0

これらの同時実行制御の両方が平易な英語でどのように機能するかを理解しました。しかし、悲観的な制御がコードでどのように行われなければならないかということにもっと興味がありました。これが私が感じていることです。2 人のユーザーが wiki ドキュメントを更新しようとしているとします。

悲観的コントロール

ここでは、トランザクションを使用するように指示されています。

BEGIN
     SELECT DOC FROM WIKI WHERE DOC_ID = 1;
     /* business logic */
     UPDATE WIKI SET DOC = INPUT WHERE DOC_ID = 1;
END

ただし、これは以前の更新を上書きする傾向があります。selectステートメントの後に書き込みが発生したかどうかを確認するために、トランザクション内で2回目のチェックが必要だと思います。そうであれば、ロールバックするかコミットします。私は正しいですか?

4

1 に答える 1

1

並行性 (悲観的) の 2 つの選択肢があります。

テーブル レベルのロックと行レベルのロック:

ただし、複数のユーザーがいる場合、ロックによって DEADLOCK が発生する可能性があることに注意してください。同時実行を使用する場合、考慮すべきことがたくさんあります。幸運を!

アップデート:

ロックはデッドロックやその他の同時実行性の問題を引き起こす可能性があるため、チェックインおよびチェックアウト機能を実装して、ユーザーが特定のレコードをチェックアウトしたときに、他のユーザーが同じレコードをチェックアウトできないようにすることができます。

于 2016-08-12T05:25:53.420 に答える