次の問題があります。ステートレスRESTサーバーにRavenDBを使用してキューの抽象化を実装しています。RavenDBでドキュメントのアトミック同時読み込みを実装するにはどうすればよいですか?
は、私は2 RESTコールAが起こっているときにAとB
が、私は最後の項目(項目A)のためのキューを照会し、通話Bが呼び出された場合A.
を呼び出すためにそれを与える呼び出していると仮定しますコールAと同時に - RESTコールで発生する可能性があるので、コールBにコールAと同じアイテムを与えることを防ぐ必要があります。コールAによって意味のあるアイテムAが「ロック」されている必要があります。
標準マルチここでのスレッド保護は単純なロックになりますが、RavenDBとRESTを使ってこのアイデアを自分の状況に変換するにはどうすればいいですか?
私は私が何か見落としていない限り、あまりにも難しいことではありませんRESTサーバー
両方の呼び出しが同時に正確に更新され、例外がスローされない場合がありますか?私はそれがRavenDBの内部でどのように実装されているかに依存していると思います。 –
いいえ、それは不可能です。 'SaveChanges'への呼び出しの間のあなたの文書のすべての変更は完全にトランザクション的です。セッションでOptimisticConcurrencyを有効にする前に他の誰もこの文書を変更していないことが保証されています。 (btw:RavenDBはSystem.Transactionもサポートしているので、より長いトランザクションにまたがることができますが、あなたと同じように、情報と同様に)意味がありません。 –
@DanielLangこんにちはDaniel、あなたの答えは非常に有用です。 「Processed」のような単一のフィールドでUseOptimisticConcurrencyを使用することで、(分散環境で)RavenDBのクラスタを訪れる多くのクライアントのアトミック性を保証できますか?あるいは明示的な「取引」が必要ですか?どうもありがとう。 – Dodd