RethinkDBはatomicity guarantees under certain conditionsを返します。私はリビジョンフィールドを使ってオプティミスティックな並行処理(c#)を実装しようとしています。クライアントが自分のリビジョンを編集している間にデータが変更された場合、更新は失敗するという考えがあります。新しいエントリを挿入する必要があります。RethinkDBで原子的条件付き更新
var id = "some unique id";
var rev = "the old known revision";
var doc = new {id, Revision = Guid.NewGuid().ToString("N")};
var result = await R.Db("test").Table("table")
.Get(id)
.Replace(found =>
R.Branch(
found.Eq(null), doc,
found["Revision"].Eq(rev), doc,
found
)
).RunResultAsync(connection);
上記のコードは、この目的のために働くようだが、それは確かにタイトな同時アクセスのための競合状態を排除する場合、私は思ったんだけど。言い換えれば、この更新/挿入またはupsertアトミックですか?可能であれば、私にいくつかの文書を案内してください。
ドキュメントには、実際にどの操作が原子的であるかを説明するのに役立つように、(これはCAS、比較およびスワップの可能性があります)のチェック・アンド・セット・レジスタそれは(例えば統合テストを使って)。
- write_acks:
は、私は次の基準を満たしている場合という印象取得過半数を
- 耐久性:ハード
- read_mode:大半
そして書き込みが関与していない場合二次照会または他の文書の場合、書き込みは不可分です。そこに私の好み、それらのifsにあまりにも多くの信仰があります。私は、操作がアトミックでなければならない旗や何かがあればそれを好むだろう、そうでなければそれを核にする。それまでは、私の印象を信じることができますか? confusion on SOもあります。
Wonderful、ありがとうございます@AtnNn – Rbjz