1

ゲームの場合、スコアテーブルを実装しようとしています。ゲームロジックによると、スコアは通常、1人のユーザーが数分ごとに発生する1ラウンドを完了すると変化します。ただし、2人のユーザーが同時に終了するという保証はありません。

ユーザーがスコアをチェックするたびにスコアが再計算されないようにするために、ラウンドが完了するたびに更新される永続的なテーブルにスコアデータを保持する予定です。

これを実装する予定です

TRUNCATE TABLE scores; INSERT INTO SCORES SELECT ....

しかし、私の懸念は、2人のユーザーが同時に終了したときに何が起こるかです。クエリ全体を1つの接続で渡します(それが重要な場合はASP.NETから)が、2つのクエリを一緒にアトミックと見なしますか?または、手動のトランザクションロジックを実装する必要があることを提案しますか?

トランザクションを提案する場合は、クエリを「BEGIN TRAN ... END TRAN」で囲むだけで十分であり、その「スコア」テーブルにMyISAMまたはInnoDBを提案しますか?

私のMySQLバージョンは5.0.92です-それが重要な場合はログに記録してください。

4

1 に答える 1

0

2つのクエリは、トランザクション内で実行される場合にのみアトミックです。そしてそれでも、それらは世界の他の地域でのみアトミックになります。トランザクション内では、2つの完全に別個の操作です。

トランザクションは、データセットに対して操作を行う2人以上のユーザーからユーザーを保護しません。同時アクセスを防ぐために、関連するテーブルにロックを確立する必要があります。

于 2012-04-04T21:46:36.533 に答える