バージョン5.0で変更。
読み取り保証 "snapshot" を指定したクエリでは、直近の特定の点のシャード全体に表示れる、過半数のコミット済みデータが返されます。読み取り保証 "snapshot" は、トランザクションが書込み保証 "majority" でコミットされた場合にのみ保証を提供します。
読み取り保証"snapshot"は、マルチドキュメントトランザクションと MongoDB 5.0 以降では、マルチドキュメントトランザクション外の特定の読み取り操作で使用できます。
トランザクションが因果関係がコンシステントなセッションの一部でない場合、書込み保証
"majority"によるトランザクションのコミット時に、トランザクション操作は、大多数がコミットされたデータのスナップショットから読み取られることが保証されます。トランザクションが因果関係がコンシステントなセッションの一部である場合、書込み保証
"majority"によるトランザクションのコミット時に、トランザクション操作は、トランザクションの開始直前の操作との因果整合性を提供する、大多数がコミットされたデータのスナップショットから読み取られることが保証されます。
重要
"snapshot" 読み取りは、minSnapshotHistoryWindowInSeconds で指定された期間内にのみ実行できます。minSnapshotHistoryWindowInSeconds より長く続く読み取り操作が終了する可能性があります。
マルチドキュメントトランザクション以外では、読み取り保証 (read concern)"snapshot" は、次の読み取り操作のプライマリとセカンダリで使用できます。
distinct(シャーディングされていないコレクションの場合)
他のすべての読み取りコマンドは、 "snapshot"を禁止しています。
操作
読み取り保証を受け入れるすべての操作のリストについては、「読み取り保証をサポートする操作 」を参照してください。
読み取り保証(read concern) とトランザクション
マルチドキュメントトランザクションは読み取り保証 (read concern) 、"snapshot" "local"、"majority" をサポートしています。
注意
読み取り保証 (read concern) は、個々の操作レベルではなく、トランザクション レベルで設定します。トランザクションに読み取り保証 (read concern) を設定するには、「トランザクションと読み取り保証 (read concern)」を参照してください。
読み取り保証(read concern) と atClusterTime
マルチドキュメントトランザクション以外では、読み取り保証 (read concern)"snapshot" による読み取りは任意のパラメータatClusterTime をサポートします。パラメータatClusterTime を使用すると、読み取りのタイムスタンプを指定できます。指定されたatClusterTime の T で読み取りリクエストを満たすために、mongod は時刻 T で利用可能なデータに基づいてリクエストを実行します。mongod がoplogの時間 T にまだ達していない場合は、次を処理するまで待機します。リクエスト。
Tip
レプリカセットのノードの延遅に向けて読み取りが行われる場合、maxTimeMS を使用して、指定された atClusterTime で読み取りの待機時間に上限を設定できます。maxTimeMS により、操作が無期限にブロックされることはなく、代わりに mongod が指定された atClusterTime に時間内に達しない場合はエラーが返されます。
操作のoperationTimeまたはclusterTimeは、 db.runCommand()の応答またはSession()オブジェクトから取得できます。
次のコマンドは読み取り保証(read concern "snapshot")を使用して検索操作を実行し、この操作がクラスター時間 Timestamp(1613577600, 1) にスナップショットからデータを読み取る必要があることを指定します。
db.runCommand( { find: "restaurants", filter: { _id: 5 }, readConcern: { level: "snapshot", atClusterTime: Timestamp(1613577600, 1) }, } )
パラメータatClusterTimeが指定されていない場合、 mongos 、または単一ノード レプリカセットではmongodは、最新の 過半数がコミットしたスナップショット のタイムスタンプをatClusterTimeとして選択し、それをクライアントに返します。
トランザクション以外では、"snapshot" の読み取りは、過半数がコミットされたデータから読み取られることが保証されます。
atClusterTime 考慮事項と動作
に許可される値は、
atClusterTimeminSnapshotHistoryWindowInSecondsパラメータによって異なります。minSnapshotHistoryWindowInSecondsは、 ストレージエンジンがスナップショット履歴を保持する最小時間ウィンドウを秒単位で示します。 によって保持された最も古いスナップショットよりも古い atClusterTime 値を指定すると、minSnapshotHistoryWindowInSecondsmongodはエラーを返します。"snapshot"atClusterTime遅延レプリカセットノードに対して を指定せずに で読み取り操作を実行すると、返される過半数のコミット済みデータが古い可能性があります。atClusterTimeを指定すると、mongodは古いデータを返す代わりに指定されたタイムスタンプだけ待機しますが、読み取りのブロックやタイムアウトが発生する可能性があります。atClusterTime"snapshot"因果的にコンシステントなセッション 内では、 を に指定することはできません。
Cappedコレクションに関する 読み取り保証 (read concern)
MongoDB8.0 以降では、Capped"snapshot" コレクションで読み取り保証 (read concern) を使用できます。