読み取り保証(read concern) "majority"
項目一覧
マルチドキュメントトランザクションに関連しない読み取り操作の場合、読み取り保証 "majority"
は、読み取られたデータがレプリカセットの過半数によって確認済みであることを保証します。読み取られたドキュメントは耐久性があり、ロールバックされないことが保証されます。
マルチドキュメントトランザクションでの操作では、読み取り保証 (read concern) "majority"
は、トランザクションが 書込み保証 ( write concern) "majority"でコミットされる場合にのみ保証を提供します。それ以外の場合、 "majority"
読み取り保証では、トランザクションで読み取られるデータについて保証されません。
読み取り保証のレベルを問わず、ノード上の最新データにシステム内のデータの最新バージョンが反映されていない場合があります。
プライマリに障害が発生した場合の詳細については、「自動フェイルオーバー」を参照してください。
パフォーマンス
レプリカセットの各ノードは、メモリ内にマジョリティ コミット ポイントのデータのビューを保持します。マジョリティ コミット ポイントはプライマリによって計算されます。読み取り保証 "majority"
を満たすために、ノードはこのビューからデータを返しますが、パフォーマンスは他の読み取り保証と同等です。
可用性
読み取り保証 (read concern) "majority"
は、因果整合性を持つセッションやトランザクションの有無にかかわらず使用できます。
警告
3 ノードのプライマリセカンダリアービタ(PSA)アーキテクチャを使用している場合は、次の点を考慮してください。
セカンダリが使用できなくなったり遅延が発生したりすると、 書込み保証 (write concern
"majority"
によってパフォーマンスの問題が発生することがあります。 こうした問題を軽減するためのアドバイスについては、「自己管理型 PSA レプリカセットのパフォーマンスの問題の軽減 」を参照してください。グローバル デフォルト
"majority"
を使用しており、書込み保証 (write concern) がマジョリティのサイズより小さい場合、クエリでは古くなった(完全にはレプリケーションされていない)データを返すことがあります。
例
次の書込み (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 |
次に、次の表は、 "majority"
読み取り保証(read concern)を持つ読み取り操作に表示されるデータの状態をまとめたものですT
。
読み取りの対象 | 時間 T | データの状態 |
---|---|---|
原発 | t 3 より前 | データは Write prev を反映 |
原発 | t 3 より後 | データは Write 0 を反映 |
セカンダリ 1 | t 5 より前 | データは Write prev を反映 |
セカンダリ 1 | t 5 より後 | データは Write 0 を反映 |
セカンダリ 2 | t 6 以前 | データは Write prev を反映 |
セカンダリ 2 | t 6 より後 | データは Write 0 を反映 |
ストレージ エンジンのサポート
WiredTiger ストレージ エンジンで読み取り保証 (read concern) "majority"
が利用可能です。
Tip
serverStatus
コマンドは、ストレージエンジンが "majority"
読み取り保証をサポートしているかどうかを示す storageEngine.supportsCommittedReads
フィールドを返します。
読み取り保証 (read"majority"
concern) とトランザクション
注意
読み取り保証 (read concern) は、個々の操作レベルではなく、トランザクション レベルで設定します。トランザクションに読み取り保証 (read concern) を設定するには、「トランザクションと読み取り保証 (read concern)」を参照してください。
マルチドキュメントトランザクションでの操作では、読み取り保証 (read concern) "majority"
は、トランザクションが 書込み保証 ( write concern) "majority"でコミットされる場合にのみ保証を提供します。それ以外の場合、 "majority"
読み取り保証では、トランザクションで読み取られるデータについて保証されません。
読み取り保証 (read"majority"
concern) と集計
ステージを含む集計に対して、"majority"
$out
読み取り保証 レベル を指定できます。
自分の書込みを読む
書き込みリクエスト確認をする場合は、非公式のコンシステントセッションを使用して自分の書き込みを読み取ることができます。
プライマリ-セカンダリ-アービタ レプリカセット
MongoDB 5.0 以降では、ストレージエンジンの改善により、enableMajorityReadConcern
と --enableMajorityReadConcern
は変更できなくなり、常にtrue
に設定されています。
MongoDB の以前のバージョンでは、enableMajorityReadConcern
と --enableMajorityReadConcern
を構成可能であり、これらを false
に設定して、ストレージ キャッシュの負荷が 3 つのノードからなるプライマリとセカンダリのアービタ(PSA)アーキテクチャで配置が固定されないようにできます。
3 ノードのプライマリセカンダリアービタ(PSA)アーキテクチャを使用している場合は、次の点を考慮してください。
セカンダリが使用できなくなったり遅延が発生したりすると、 書込み保証 (write concern
"majority"
によってパフォーマンスの問題が発生することがあります。 こうした問題を軽減するためのアドバイスについては、「自己管理型 PSA レプリカセットのパフォーマンスの問題の軽減 」を参照してください。グローバル デフォルト
"majority"
を使用しており、書込み保証 (write concern) がマジョリティのサイズより小さい場合、クエリでは古くなった(完全にはレプリケーションされていない)データを返すことがあります。