2

ロックについて質問です。これは、レコードのロックだけに限ったことではありません。

私が Web アクセス可能な CMS を書いているとしましょう。私はいくつかのアイデアに苦労しています。

ユーザーが編集のために記事を開いた瞬間に、記事に「使用中」のフラグを立てることができます。ここまでは順調ですね。

しかし、いつフラグを削除するのですか? ユーザーが記事を保存したとき しかし、ユーザーがもうタイピングする気になれず、ブラウザを閉じて就寝することにした場合はどうなるでしょうか。

タイムアウトの仕組みが頭に浮かびますが、記事を書くのにどれくらいの時間がかかりますか? 10分短すぎて30分長すぎ…

多分私はこれを過度に複雑にしています。この件についてあなたの考えを聞きたいです。

4

3 に答える 3

3

タイムスタンプを使用しないのはなぜですか? 実際に何かをロックすることを心配する必要はありません。レコード (記事) が変更されたイベントに反応するだけです。

基本的に、記事を保存する前に、バージョン (タイムスタンプ) がディスク上のものと同じかどうかを確認してください。同じ場合は、まだ最新のコピーがあるので、それを書きます。そうでない場合は、マージを提案し、新規として保存を提案し、それを破棄します-そのアプリケーション固有です。

于 2008-10-03T05:48:57.947 に答える
2

私の投票は、可能な限り楽観的ロックです。

実際のロックを実装したある場所には、ロックを削除するための管理ページがありました。対応するアクティブなセッションを持たないロックを解除するために、サーバー上で実行されているサービスもありました..

于 2008-10-03T05:40:39.993 に答える
0

mssql 2005 以降の場合は rowversion を使用し、mssql 2000 以下の場合はタイムスタンプを使用します。postgresql の非表示の xmin フィールドを使用します。

他のすべてのユーザーがレコードを開くようにします。レコードを保存するとともに、レコードを保存した人にタグを付け、rowversion を使用して、catch(DbConcurrencyException) で、レコードを保存する前に保存した他のユーザーに示すエラーを再スローし、レコードを再度開くように要求します。最初にレコードを保存したユーザーが行った変更を確認します。

于 2009-03-01T00:22:55.513 に答える