2

ユーザーが共有できるいくつかの共通情報の更新を許可する必要がある Web サイト (c#/SQL Server 2008、.net) を作成しています。

たとえば、2 人のユーザーと、多数の項目を含むテーブルがあります。モデレーションキューによく似ています。

ID が #1、#2、#3 の行が含まれているとします。

ユーザー 1 が最初に #1 を選択した場合、これはリリースされるまで、または使用可能になるまですぐにロックする必要があります。

これは私にとって未知の領域であるため、いくつか質問があります。

  • SQL でこの行をロックする最良の方法は何ですか?
  • ステートレスであるため、ユーザー 1 が #1 を主張したことをユーザー 2 に知らせるにはどうすればよいでしょうか? 「次に利用可能な」アプローチを使用する方が良いですか?

前もって感謝します。

4

1 に答える 1

0

楽観的ロックと呼ばれるものがあります。しかし、行がロックされていることを「報告」するという問題は解決しません。ほとんどの場合、レポートは役に立ちませんが、プログラムで解決できます。

そのロックは、デスクトップ アプリを作成しているか、Web アプリを作成しているかによって異なりますが、ほとんどの場合、余分な列 (タイムスタンプ) を使用して一定期間行をロックすることで解決されます。

ユーザーに行がロックされていると報告したプロジェクトを1つ作成し、2つのフィールド(開始時間、終了時間)で解決しました。行を更新するために人に可変の時間を与えたかったからです。

サンプル:

query: select a, b, c, d, start_time, end_time FROM table

Program : if ((datetime.now()-start time > 1min) or (end_time <> null))
{
update table
SET start_time = datetime.now()
set end_time = null
where A = a and B = b and C= c and D = d, and START_TIME = start_time 
--big caps is current value, small caps value from last select ( and that is OPTIMISTIC concurency).
}
else
{
messagebox.show ("You suck, cant be changed") --personal touch :-)
}

行を更新するときは、end_time を配置することを忘れないでください。

OFC、時間確認、内更新可能

編集:私はオラクルのrow_scnからそのアイデアを得たので、革新的なものではありません

于 2012-11-16T12:25:03.610 に答える