読み取り保証 (read concern) "snapshot"
項目一覧
バージョン 5.0 での変更。
読み取り保証 "snapshot"
を指定したクエリでは、直近の特定の点のシャード全体に表示れる、過半数のコミット済みデータが返されます。読み取り保証 "snapshot"
は、トランザクションが書込み保証 "majority"
でコミットされた場合にのみ保証を提供します。
読み取り保証"snapshot"
は、マルチドキュメントトランザクションと MongoDB 5.0 以降では、マルチドキュメントトランザクション外の特定の読み取り操作で使用できます。
トランザクションが因果関係がコンシステントなセッションの一部でない場合、書込み保証
"majority"
によるトランザクションのコミット時に、トランザクション操作は、大多数がコミットされたデータのスナップショットから読み取られることが保証されます。トランザクションが因果関係がコンシステントなセッションの一部である場合、書込み保証
"majority"
によるトランザクションのコミット時に、トランザクション操作は、トランザクションの開始直前の操作との因果整合性を提供する、大多数がコミットされたデータのスナップショットから読み取られることが保証されます。
マルチドキュメントトランザクション以外では、読み取り保証"snapshot"
は、次の読み取り操作のプライマリとセカンダリで使用できます。
他のすべての読み取りコマンドは、 "snapshot"
を禁止しています。
操作
読み取り保証を受け入れるすべての操作のリストについては、「読み取り保証をサポートする操作 」を参照してください。
読み取り保証(read concern) とトランザクション
マルチドキュメントトランザクションは、読み取り保証"snapshot"
だけでなく、 "local"
と"majority"
もサポートします。
注意
読み取り保証 (read concern) は、個々の操作レベルではなく、トランザクション レベルで設定します。トランザクションに読み取り保証 (read concern) を設定するには、「トランザクションと読み取り保証 (read concern)」を参照してください。
読み取り保証 (read concern) とatClusterTime
バージョン 5.0 で追加
マルチドキュメントトランザクション以外では、読み取り保証(read concern) "snapshot"
を使用する読み取りは任意のパラメータatClusterTime
をサポートします。 パラメーターatClusterTime
を使用すると、読み取りのタイムスタンプを指定できます。 指定されたatClusterTime
の T で読み取りリクエストを満たすには、 mongod
は T 時に利用可能なデータに基づいてリクエストを実行します。
操作の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
考慮事項と動作
atClusterTime
に許可される値は、minSnapshotHistoryWindowInSeconds
パラメータによって異なります。minSnapshotHistoryWindowInSeconds
は、storage engineがスナップショット履歴を保持する最小時間枠を秒単位で示します。minSnapshotHistoryWindowInSeconds
に従って保持されている最も古いスナップショットよりも古いatClusterTime値を指定すると、
mongod
はエラーを返します。遅延レプリカセット メンバーに対して
"snapshot"
を使用して読み取り操作を実行すると、返される過半数がコミットしたデータが古い可能性があります。atClusterTime
"snapshot"
因果整合性のあるセッション 内では、 に指定することはできません。
Cappedコレクションに関する 読み取り保証 (read concern)
MongoDB 以降では、8.0 Capped"snapshot"
コレクションで読み取り保証 (read concern) を使用できます。