InnoDBエンジンを使用して、同じMySQLデータベースサーバーを共有するRubyonRailsを実行している2つのアプリケーションサーバーがあります。
負荷が高い場合、レコードの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が1つまたは2つスキップすることがあります。
トランザクションはこの場合に役立ちますか?
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の質問ですが、このコードは負荷がない場合は正常に機能しますが、負荷がある場合は1回だけ機能します。つまり、複数のユーザーがまったく同時に同じリソースにアクセスすると、上記のことが起こります。取引は役に立ちますか?
すべてをトランザクションブロックでラップすることにはどのような欠点がありますか?