読み取り保証(read concern) "available"
バージョン 3.6 の新機能。
読み取り保証(read concern "available"
を指定したクエリは インスタンスからデータを返しますが、そのデータがレプリカセットのノードの大半に書き込まれた(つまり、ロールバックされる可能性がある)という保証はありません。
シャーディングされたクラスター の場合、
"available"
読み取り保証はパーティションに対する許容度を高めます。"available"
読み取り保証 (read concern) を持つクエリでは、正しいシャードがクエリを受信したことを確認するためのチェックは必要ありません。ネットワーク パーティションが発生した場合、これらのクエリはネットワーク パーティションが発生する前に適切と見なされるシャードにルーティングします。 利用できない可能性のあるサーバーからの整合性保証は待ちません。 シャードがチャンク移行を実行している場合、
"available"
を使用したクエリでは孤立したドキュメント が返されることがあります。警告
mongos
では、読み取り保証(read concern"available"
のクエリが正しいシャードにルーティングされることは保証されません。 クエリを受け取ったシャードはデータを返しますが、このシャードはリクエストされたデータの的所有者でない場合があります。これにより、クエリが誤った結果や予期しない結果を返すことがあります。
シャーディングされていないコレクション(スタンドアロン配置またはレプリカセット配置のコレクションを含む)の場合、
"local"
と"available"
の読み取り保証は同じように動作します。
読み取り保証のレベルを問わず、ノード上の最新データにシステム内のデータの最新バージョンが反映されていない場合があります。
可用性
読み取り保証"available"
はで、因果整合性を持つセッションおよびトランザクションでは 使用できません。
例
次の書込み (write) 操作のタイムラインを考えてみましょう。3 つのノードからなるレプリカセットに Write 0 します。
注意
単純化のため、この例では次のことを前提としています。
Write 0 より前のすべての書込みは、すべてのノードに正常にレプリケーションされました。
Write prev は Write 0 の前の書込みです。
Write 0 の後、他の書込みは発生していません。
時間 | イベント | 最新の書込み | 直近の w: "majority" 書込み |
---|---|---|---|
t 0 | プライマリが Write 0 を適用 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
t 1 | セカンダリ 1 が Write 0 を適用 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write prev | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
t 2 | セカンダリ 2 が Write 0 を適用 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write prev Secondary 1: Write prev Secondary 2: Write prev |
t 3 | プライマリがセカンダリ1へのレプリケーション成功を認識し、クライアントに確認応答を送信 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev |
t 4 | プライマリがセカンダリ2 へのレプリケーション成功を認識 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write prev Secondary 2: Write prev |
t 5 | セカンダリ 1 が(定期的なレプリケーションを通じて)最新の w: " majority " 書込みのスナップショットを更新するよう通知を受信 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write prev |
t 6 | セカンダリ 2 が(定期的なレプリケーションを通じて)最新の w: " majority " 書込みのスナップショットを更新するよう通知を受信 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 | Primary: Write 0 Secondary 1: Write 0 Secondary 2: Write 0 |
次に、次の表は、 "available"
読み取り保証(read concern)を持つ読み取り操作に表示されるデータの状態をまとめたものですT
。
読み取りの対象 | 時間 T | データの状態 |
---|---|---|
原発 | t 0より後 | データは Write 0を反映します。 |
セカンダリ 1 | t 1より前 | データは Write prev を反映 |
セカンダリ 1 | t 1 より後 | データは Write 0 を反映 |
セカンダリ 2 | t 2より前 | データは Write prev を反映 |
セカンダリ 2 | t 2より後 | データは Write 0 を反映 |