39

プロジェクトの 1 つに Dynamodb を使用しようとして、dynamodb の強整合性モデルについて疑問があります。よくある質問から

強力な一貫性のある読み取り — Amazon DynamoDB は、結果整合性に加えて、アプリケーションまたはアプリケーションの要素が必要とする場合に、強力な一貫性のある読み取りをリクエストする柔軟性と制御も提供します。強整合性読み取りは、読み取りの前に成功応答を受け取ったすべての書き込みを反映する結果を返します。

上記の定義から、強力な一貫性のある読み取りは最新の書き込み値を返すことがわかります。

例を挙げると、Client1 がキー K1 で書き込みコマンドを発行して、値を V0 から V1 に更新するとします。数ミリ秒後、クライアント 2 がキー K1 の読み取りコマンドを発行すると、強力な整合性の場合は常に V1 が返されますが、結果整合性の場合は V1 または V0 が返される場合があります。私の理解は正しいですか?

そうである場合、書き込み操作が成功を返したが、データがすべてのレプリカに更新されておらず、強力な一貫性のある読み取りを発行した場合、この場合、最新の書き込み値を確実に返すにはどうすればよいでしょうか?

次のリンク AWS DynamoDB read after write一貫性 - 理論的にはどのように機能しますか? この背後にあるアーキテクチャを説明しようとしていますが、これが実際にどのように機能するかわかりませんか? このリンクをたどった後に頭に浮かぶ次の質問は、DynamoDb はシングル マスター、マルチ スレーブ アーキテクチャに基づいており、書き込みと強力な整合性のある読み取りはマスター レプリカを介して行われ、通常の読み取りは他のレプリカを介して行われるかということです。

4

3 に答える 3

6

免責事項: 以下は公開されている DynamoDB ドキュメントに基づいて検証することはできませんが、おそらく真実に非常に近いものです。

理論から始めると、DynamoDB はクォーラムを利用します。ここで、V はレプリカ ノードの総数Vr、読み取り操作で要求されるレプリカ ノードの数、Vw は各書き込みが実行されるレプリカ ノードの数です。読み取りクォーラム ( Vr) を利用して、クライアントが最新の値を取得していることを確認できます。一方、書き込みクォーラム ( Vw) を利用して、書き込みが競合を作成しないようにすることができます。

DynamoDB に書き込み競合がないという事実に基づいて (これらはクライアントから調整する必要があり、したがって API で公開されるため)、DynamoDB は第 2 法則 ( Vw > V/2)を尊重する Vw を使用していると結論付けます。V/2+1書き込みレイテンシを短縮します。

読み取りクォーラムに関して、DynamoDB は 2 種類の読み取りを提供します。Vr + Vw > V強整合性の読み取りは、最初の法則 ( )を尊重する読み取りクォーラムを使用しV/2ますV/2+1。ただし、結果整合性のある読み取りでは、単一のランダム レプリカしか使用できないVr = 1ため、はるかに高速ですが、整合性に関する保証はありません。

注: 使用される書き込みクォーラムが第 2 法則を尊重しない可能性があります ( Vw > V/2) が、これは DynamoDB がクライアントからの調整なしに (たとえば、現地時間に基づいて最新のものを選択することにより) そのような競合を自動的に解決することを意味します。しかし、DynamoDB のドキュメントにはそのような参照がないため、これが真実であるとは考えにくいと思います。その場合でも、残りの推論は同じままです。

于 2017-09-21T17:49:00.603 に答える
0

ここであなたの質問への答えを見つけることができます: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/APISummary.html

強力な一貫性のある読み取りリクエストを発行すると、Amazon DynamoDB は、Amazon DynamoDB が成功した応答を返した以前の関連するすべての書き込み操作による更新を反映した最新のデータを含む応答を返します。

あなたの例では、値を からにupdateItem更新するリクエストが成功した場合、後続の強力な一貫性のある読み取りリクエストは を返します。v0v1v1

お役に立てれば。

于 2014-01-02T19:34:12.113 に答える