2016-04-05 13 views
0

セッションの一貫性を使用する際に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(セッションが一貫しているものとします)がどのような順序で適用されますか?

+0

C1、C2などは何を表していますか?彼らは異なった "クライアント"ですか?セッションの一貫性は、特定のセッションの場合、データベースが一貫して表示され、自分の書き込み/単調性を準備できることを意味します。しかし、別のセッションからは、完全に順不同で表示されることがあります。あなたの例では、書き込み後に読み取りを行うので、これは当てはまらないかもしれませんが、読み取り後に書き込みを行う場合は、Etag optimistic並行処理機能を使用して、文書が2つの間で更新されていないことを確認できます。また、すべての読み込みと書き込みをストアドプロシージャに結合すると、それらは完全にACIDトランザクションです。 –

+0

はい、異なるクライアントを表します。アップデートの最終注文に何らかの保証はありますか? (私が示したものの後で更新がなくなったと仮定して、最終状態はdかbか?)。 私はetagsに関するあなたの意見を得るのか分からない。 etagsは強い一貫性で意味をなさないが、書き込みは非同期的に起こる。さて、私はr(a)を読んでからw(c)を書きたいと思っています。書き込み(b)が通過中であり、読み込み(a)と書き込み(b)の間に適用されるという保証はありません。 (私が最初にw(b)を適用したとき、文書はまだ値aを持っていたので、etagチェックは失敗しませんでした)。 – user1018513

+0

"私はr(a)を読んでからw(c)を書きたいと思っていますが、書き込み(b)が転送中であり、読み込み(a)と書き込み(b)の間に適用されるという保証はありません。 Etagsを使ってread(a)とwrite(c)の間にwrite(b)が発生すると、write(c)が失敗することを保証できます。 –

答えて

2

セッション一貫性は、次の保証をユーザーに提供します。

1)自分の書き込みを読む - セッション内で実行された書き込みは、セッション内ですぐに表示されます。

2)単調な読み取り - セッション内に見られる読み取りは、セッション内で回帰しません。

A、B、C、Dが同じドキュメントの増加バージョンであると仮定します。

C、Bは単調増加の履歴ではなく、セッション保証に違反します。

注:セッション(4)による読込み要求は、ここでは連続して発行されます。すなわち、第2の読み出しは、第1の読み出しの完了後に発行される。

+0

BとCは異なるクライアントによって書かれています。それはまだ保持されますか?これは、すべての書き込みが1つのプライマリを経由すると仮定することができますか? 「退行」を意味するときは、私自身の書き込みに関して、または文書中の書き込みの合計順序(ここではA、B、C、DのA、B、C、セッションによって書かれたt) – user1018513

+0

はい、どのセッションが書き込みを実行したかにかかわらず、*すべての*セッション内で単調な読み取り保証があります。 –

+0

これは同じコレクション内の文書にも適用されますか? クライアント1がドキュメントAのバージョン1を書き込むと、ドキュメントbのバージョン1を書き込みます。クライアント2がドキュメントBのバージョン1を読み取ると、ドキュメントAのバージョン1も確実に表示されますか? – user1018513

関連する問題