私は以下の単純なシナリオを持っています。この特定のシナリオでは、どのようなデータベースロックを使用する必要がありますか?
3台のコンピュータが映画館の予約テーブルを更新します。私はテーブル全体をロックするか、更新されるシートに対応する行をロックする必要がありますか?ここで楽観的同時実行制御を検討できますか?
私は、楽観的で悲観的な並行性の制御について調べて、さまざまなロックについて遭遇し、どのシナリオに最も適しているのか不思議に思っていました。
私は以下の単純なシナリオを持っています。この特定のシナリオでは、どのようなデータベースロックを使用する必要がありますか?
3台のコンピュータが映画館の予約テーブルを更新します。私はテーブル全体をロックするか、更新されるシートに対応する行をロックする必要がありますか?ここで楽観的同時実行制御を検討できますか?
私は、楽観的で悲観的な並行性の制御について調べて、さまざまなロックについて遭遇し、どのシナリオに最も適しているのか不思議に思っていました。
あなたのDBMSはこのようなロックを処理する必要があります。既に登録されているシートを更新しようとしないでください。
update seat
set status = 'BOOKED', booking_ref = :booking_ref
where seat_no = :seat_no -- identify the seat to book
and status = 'FREE'; -- ensure it is currently free
2セッションが同時に同じ座席を予約しようとすると、1は成功し、他は失敗します。あなたのコードは成功したかどうかをチェックする必要があります。
オプティミスティック・ロックとペシミスティック・ロックは、DBMSの問題ではなくアプリケーションです。ここにすべて入るのではなく、私はexisting SO questionにあなたを紹介します。
内部ではどのように行われていますか?行ロック、テーブルロックなどのThroughtheの使用?どの同時実行制御メカニズム、楽観的または悲観的? – roz
その答えはDBMSによって異なる場合があります。理想的には、行ロック - 目的を達成するためにロックする必要のある最小値をロックします。オプティミスティックと悲観的なロックはまったく別の問題ですが、データベースの問題ではなくアプリケーションの問題です。 –
うまくいけばテーブルロックではありません!これらのシステムはうまくスケールされません.... –
宿題の場合は、[宿題]タグを使用してください。宿題でない場合は、このアプリケーションで実際に使用する実際のデータベースに名前を付けてください。ほとんどのRDBMSは行ロックを行いますが、行ロックを行わないRDBMSを使用している可能性があります。 –
これは宿題ではありません。私は、楽観的で悲観的な並行性の制御について調べていて、異なるロックについて遭遇し、どのシナリオに最も適しているのか不思議に思っていました。 – roz
「楽観的で悲観的な同時実行制御を探していて、さまざまなロックを見つけました。はい。あなたが話していることを知るにはリンクが役に立つでしょう。どのシナリオに最も適しているのか疑問に思っています。この質問には1つのシナリオしかありません。さらに、これはRDBMSの自動機能です。あなたはデフォルトのロック戦略をオーバーライドするように頼んでいますか? –