Docs Menu

読み取り保証 (read concern) "majority"

"majority"

マルチドキュメントトランザクションに関連しない読み取り操作の場合、読み取り保証 (read concern) "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 の後、他の書込みは発生していません。

Timeline of a write operation to a three member replica set
時間
イベント
最新の書込み
直近の w: "majority" 書込み

t 0

プライマリが Write <sub>0</sub> を適用 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

Timeline of a write operation to a three member replica set.
読み取りの対象
時間 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 concern) は、個々の操作レベルではなく、トランザクション レベルで設定します。トランザクションに読み取り保証 (read concern) を設定するには、「トランザクションと読み取り保証 (read concern)」を参照してください。

マルチドキュメントトランザクションでの操作では、読み取り保証 (read concern) "majority"は、トランザクションが 書込み保証 ( write concern) "majority"でコミットされる場合にのみ保証を提供します。それ以外の場合、 "majority"読み取り保証では、トランザクションで読み取られるデータについて保証されません。

ステージを含む集計に対して、"majority" $out読み取り保証 レベル を指定できます。

書き込みリクエスト確認をする場合は、非公式のコンシステントセッションを使用して自分の書き込みを読み取ることができます。

MongoDB 5.0 以降では、ストレージエンジンの改善により、enableMajorityReadConcern--enableMajorityReadConcern は変更できなくなり、常にtrue に設定されています。

MongoDB の以前のバージョンでは、enableMajorityReadConcern--enableMajorityReadConcern を構成可能であり、これらを false に設定して、ストレージ キャッシュの負荷が 3 つのノードからなるプライマリとセカンダリのアービタ(PSA)アーキテクチャで配置が固定されないようにできます。

3 ノードのプライマリセカンダリアービタ(PSA)アーキテクチャを使用している場合は、次の点を考慮してください。

  • セカンダリが使用できなくなったり遅延が発生したりすると、 書込み保証 (write concern "majority"によってパフォーマンスの問題が発生することがあります。 こうした問題を軽減するためのアドバイスについては、「自己管理型 PSA レプリカセットのパフォーマンスの問題の軽減 」を参照してください。

  • グローバル デフォルト"majority" を使用しており、書込み保証 (write concern) がマジョリティのサイズより小さい場合、クエリでは古くなった(完全にはレプリケーションされていない)データを返すことがあります。