セッションの一貫性を使用する際にDocumentDBが提供する正確な保証を理解しようとしています。 DocumentDBのセッション保証
は、それが可能のためですが起こるには、以下の(a、b、c、dを仮定することができますされている同じドキュメントのすべての値)セッション1 W(a)のW(B)
セッション2 .................. W(c)W(d)
セッション3 .................. ............... R(b)R(c)
セッション4 ..................... ............. R(c)R(b)
I言い換えれば、順序付けされたセッション間の書き込みです(この場合、bがcより前に起こる前に起こるか、またはcがbの前に起こるので、C3またはC4のいずれかが単調な読み込みに違反します)。
更新プログラムa、b、c、d(セッションが一貫しているものとします)がどのような順序で適用されますか?
C1、C2などは何を表していますか?彼らは異なった "クライアント"ですか?セッションの一貫性は、特定のセッションの場合、データベースが一貫して表示され、自分の書き込み/単調性を準備できることを意味します。しかし、別のセッションからは、完全に順不同で表示されることがあります。あなたの例では、書き込み後に読み取りを行うので、これは当てはまらないかもしれませんが、読み取り後に書き込みを行う場合は、Etag optimistic並行処理機能を使用して、文書が2つの間で更新されていないことを確認できます。また、すべての読み込みと書き込みをストアドプロシージャに結合すると、それらは完全にACIDトランザクションです。 –
はい、異なるクライアントを表します。アップデートの最終注文に何らかの保証はありますか? (私が示したものの後で更新がなくなったと仮定して、最終状態はdかbか?)。 私はetagsに関するあなたの意見を得るのか分からない。 etagsは強い一貫性で意味をなさないが、書き込みは非同期的に起こる。さて、私はr(a)を読んでからw(c)を書きたいと思っています。書き込み(b)が通過中であり、読み込み(a)と書き込み(b)の間に適用されるという保証はありません。 (私が最初にw(b)を適用したとき、文書はまだ値aを持っていたので、etagチェックは失敗しませんでした)。 – user1018513
"私はr(a)を読んでからw(c)を書きたいと思っていますが、書き込み(b)が転送中であり、読み込み(a)と書き込み(b)の間に適用されるという保証はありません。 Etagsを使ってread(a)とwrite(c)の間にwrite(b)が発生すると、write(c)が失敗することを保証できます。 –