InnoDB 엔진을 사용하여 동일한 MySQL 데이터베이스 서버를 공유하는 Ruby on Rails를 실행하는 두 개의 애플리케이션 서버가 있습니다.ID, 가능한 데이터베이스 MySQL 트랜잭션 문제를 건너 뛰는 레일?
때때로 부하가 심할 때 레코드의 ID가 Users, X 및 Y 테이블에서 건너 뛰고 순차적이지 않은 것으로 나타납니다.
이것은 의사 코드 : 모든 어떻게든지에 관련된
user = Create user x in table Users
user_x = Find user x
Insert a tuple into an auxiliary table X
Insert a tuple into an auxiliary table Y
Update the tuple that was inserted in table X
Insert a tuple into an auxiliary table Z
테이블 X, Y, Z, 나는 모든 레코드를 삭제하고 있지 않다.
그러나로드 된 ID가 과부하 일 때 한두개 건너 뛰기도하는 경우가 있습니다.
이 사건과 관련하여 거래가 도움이 되겠습니까?
Start transaction
user = Create user x
user_x = Find user x
Insert a tuple into an auxiliary table X
Insert a tuple into an auxiliary table Y
Update the tuple that was inserted in table X
Insert a tuple into an auxiliary table Z
Commit
Noobie 질문,이 코드는로드가없는 경우에는 잘 작동하지만로드가있는 경우에는 정상적으로 작동합니다. 즉 동일한 시간에 동일한 자원을 여러 사용자가 사용하면 위의 상황이 발생합니다. 거래가 도움이 될까요?
트랜잭션 블록에 모든 것을 래핑하는 데 어떤 단점이 있습니까?
수정 사항이 추가되었습니다. – Bill
트랜잭션 추가는 자동 증가 값 건너 뛰기에 거의 영향을 미치지 않습니다. 그러나 사용자, X, Y 및 Z에 모두 삽입되거나 모두 실패하도록 레코드를 삽입해야하는 경우 트랜잭션이 필요합니다. –