Webファーム内の複数のサーバー間でアクセスできるファイルをディスクに保存しています。このファイルは、データベースのデータ変更に基づいて必要に応じて更新されます。このファイルのURIといくつかのデータベーステーブルに基づくいくつかのハッシュを含む行を格納するデータベーステーブルがあります。ハッシュがそれぞれのテーブルと一致しない場合は、ファイルを再生成し、新しい行を挿入する必要があります。
1つのクライアントだけがこのファイルを再生成して行を挿入するようにするにはどうすればよいですか?
最も簡単ですが最悪の解決策(ロックのため)は次のとおりです。
BEGIN TRANSACTION
SELECT ROW FROM TABLE (lock the table for the remainder of the transaction)
IF ROW IS OUT OF DATE:
REGENERATE FILE
INSERT ROW INTO TABLE
DO SOME STUFF WITH FILE (30s)
COMMIT TRANSACTION
ただし、複数のクライアントがこのコードを実行する場合、「DO SOME STUFF WITH FILE」の処理中は、後続のすべてのクライアントが長時間待機します。
これを処理するためのより良い方法はありますか?コミット前にファイルを処理する方法を変更して、ファイルを高速化するのではないでしょうか。私はこれに数日間困惑しています。