Dynamo paperのセクション 5には、次の内容があります。
特に、各書き込みは通常、読み取り操作の後に続くため、書き込みのコーディネーターは、要求のコンテキスト情報に格納されている前の読み取り操作に最も速く応答したノードになるように選択されます。この最適化により、前の読み取り操作によって読み取られたデータを持つノードを選択できるため、「読み取り後書き込み」の一貫性が得られる可能性が高くなります。
「read-your-writes」の一貫性を得る可能性はどのように増加しますか?
「read-your-writes」とは、書き込みに続く読み取りが、書き込みによって設定された値を取得することを意味します。このコンテキストでは、読み取りと書き込みが 2 つの異なるクライアントによって実行されます。その理由は、書き込みコーディネーターの選択が、同じクライアントによる「read-your-writes」を取得する可能性に影響を与えないためです。
しかし、上記のテキストは、読み取りに続く書き込みについて語っています。これが私の推測です。可能であれば、読み取りコーディネーターは構文の調整を試みます。バージョンが異なるために構文の調整が不可能な場合、クライアントは書き込みを行う前に意味の調整を行う必要があります。どちらの方法でも、読み取り操作に関係するすべてのノードのバージョンは、調整されたバージョンの祖先です。したがって、次の書き込みをそれらのいずれかに送信して適用できます。書き込みが読み取りによって認識される最も早い時期は、次の手順が完了した後です。
- クライアントは書き込みコーディネーターに連絡します。
- 書き込みコーディネーターは、新しいバージョンのバージョン クロックを生成します。
- 書き込みコーディネーターは、新しいバージョンをローカルに書き込みます。
上記の手順を実行する時間が短いほど、次の別の読み取りで新しいバージョンが表示される可能性が高くなります。以前の読み取りに最も速く応答したノードが、次の手順をより短い時間で実行できる可能性が非常に高いためです。このようなノードは、書き込みコーディネーターとして選択されます。