1
私は、同じトランザクションデータベースと通信する2台のサーバーがあるとします。トランザクションデータベースを使用してクリティカルセクションを作成するにはどうすればよいですか?
これらの2つのサーバーのうちの1つのみが所定のタイミングのアクション(本質的にはデータベースを使用して同期を実行する)を実行するように設定します。私が聞いたことから、この行に沿った何かがうまくいくかもしれません:
私のテーブルは2列、IDと状態を持っています。コードを次のように設定した場合:
update TABLE set STATUS = 'processing' where ID = 1234 and STATUS != 'processing'
if (weHaveModifiedAtLeastOneRow)
{
// do critical section stuff here
// This is code that we only want one server to run, not both.
update TABLE set STATUS = 'free' where ID = 1234
}
else
{
// We failed to get the lock, so do nothing
}
ここではいくつかの概念が欠落していますか?
私は私たち自身のロックを巻き込む大きなファンではありません。しかし、これが解決策である可能性があります。しかし、ロックを発行するときに両方の呼び出し側サーバーが同じIDを使用するようにする必要があるため、同期問題を解決するのではなく転送するように見えます。 – APC