2014-12-30 1 views
2

최근에 다른 스레드에서 발생하는 동시 요청으로 인해 중복 레코드가 생성되어 데이터베이스에 배치되기 전에 레코드가 유효성 검사를 통과하게됩니다. 내 검증 중 일부는 mysql 인덱스를 사용하여 만족할 수없는 조건을 요구하기 때문에 add_index를 사용하지 않고이 문제를 방지하고자합니다.Puma and Rails - 데이터베이스 인덱스가없는 중복 레코드 방지

내가 가지고있는 한 가지 아이디어는 어떻게 든 레코드를 만들기위한 스레드를 작성하거나 적어도 유효성 검사에서 데이터베이스로 바꿔주는 것입니다. 나는 이것에 대해 어떻게 생각하는지, 심지어 가능할 지 모르겠다.

도움말은 크게

감사

답변

2

transaction 사용을 감상 할 수있다.

내부 거래

  1. 확인 기록이 아직

거래 운영의 무결성을 보장하기 위해 잠금 데이터베이스 개체를 레코드를 만듭니다

  • 검증
  • 존재하지 않는 경우. 다른 하나가 가장 먼저 커밋되면 데이터베이스를 변경하지 않고 병렬 트랜잭션이 실패합니다.

    이것은 특히 잠금으로 인해 유효성 검증/작성 프로세스가 너무 비싸거나 길면 병렬 트랜잭션이 실패 할 것이라는 사실로 인해 성능이 저하 될 수 있습니다. 그러나 이것은 비즈니스 로직을 기반으로 최적화 할 수 있습니다.

  • +0

    이것이 내 문제에 해당되는지 확실하지 않습니다. 사용자 요청이 동시에 발생하여 동일한 요청이 여러 번 발생하는 경우이 문제가 발생합니다. 내가 오해 한 것이 있습니까? – ideanl

    +0

    @ user3739826 최종 문제는 데이터베이스에 중복 된 레코드입니까? 이 대답은 그것을 해결합니다. 사용자는 원하는만큼의 동일한 요청을 작성할 수 있으며 그 중 하나만 데이터베이스 레코드를 작성하게됩니다. – Anri