(mongodb >=1.1.0)
MongoDB\Driver\ReadConcern 控制副本集和副本集分片的讀取操作隔離級別。此選項需要 MongoDB 3.2 或更高版本。
MongoDB\Driver\ReadConcern::AVAILABLE
當 `afterClusterTime` 和 `level` 未指定時,針對次要節點讀取的預設值。
查詢返回執行個體的最新資料。不保證資料已寫入大多數副本集成員(即可能會被回滾)。
對於未分片的集合(包括獨立部署或副本集部署中的集合),`"local"` 和 `"available"` 讀取策略的行為相同。
對於分片叢集,`"available"` 讀取策略對分割區容錯能力更強,因為它不會等待確保一致性保證。然而,使用 `"available"` 讀取策略的查詢可能會返回孤立文件,如果分片正在進行區塊遷移,因為 `"available"` 讀取策略與 `"local"` 讀取策略不同,它不會聯繫分片的 primary 節點或 config servers 以獲取更新的元數據。
MongoDB\Driver\ReadConcern::LINEARIZABLE
查詢返回的資料反映了所有使用寫入策略 `"majority"` 且在讀取操作開始之前確認的成功寫入。對於以 `writeConcernMajorityJournalDefault` 設定為 **`true`** 執行的副本集,線性化讀取策略返回的資料永遠不會被回滾。
如果將 `writeConcernMajorityJournalDefault` 設定為 **`false`**,MongoDB 將不會等待 `w: "majority"` 寫入持久化後再確認寫入。因此,如果副本集成員丟失,`"majority"` 寫入操作可能會回滾。
您只能在主節點上指定可線性化的讀取關注。
只有當讀取操作指定能唯一識別單一文件的查詢篩選器時,可線性化的讀取關注保證才會生效。
如果大多數資料承載成員都不可用,請始終將 `maxTimeMS` 與可線性化的讀取關注一起使用。`maxTimeMS` 可確保操作不會無限期阻塞,並確保如果無法滿足讀取關注,操作會返回錯誤。
可線性化的讀取關注需要 MongoDB 3.4 或更高版本。
MongoDB\Driver\ReadConcern::LOCAL
如果未指定 `level`,則這是對主節點讀取的預設值;如果未指定 `level` 但指定了 `afterClusterTime`,則這是對次要節點讀取的預設值。
查詢返回執行個體的最新資料。不保證資料已寫入大多數副本集成員(即可能會被回滾)。
MongoDB\Driver\ReadConcern::MAJORITY
查詢返回副本集中大多數成員確認已寫入的實例最新資料。
要使用 `“majority”` 的讀取關注級別,副本集必須使用 WiredTiger 儲存引擎和選舉協定版本 1。
MongoDB\Driver\ReadConcern::SNAPSHOT
讀取關注 `“snapshot”` 可用於多文件事務,並且從 MongoDB 5.0 開始,也可用於多文件事務之外的某些讀取操作。
如果事務不是因果一致性工作階段的一部分,則在使用寫入關注 `“majority”` 提交事務時,保證事務操作從多數提交資料的快照中讀取。
如果事務是因果一致性工作階段的一部分,則在使用寫入關注 `“majority”` 提交事務時,保證事務操作從多數提交資料的快照中讀取,該快照提供與事務開始前操作的因果一致性。
在多文件事務之外,讀取關注 `“snapshot”` 可在主節點和次要節點上用於以下讀取操作:`find`、`aggregate` 和 `distinct`(在非分片集合上)。所有其他讀取命令都禁止使用 `“snapshot”`。
版本 | 說明 |
---|---|
PECL mongodb 1.11.0 |
新增了 **`MongoDB\Driver\ReadConcern::SNAPSHOT`** 常數。 |
PECL mongodb 1.7.0 | 實作 Serializable 介面。 |
PECL mongodb 1.4.0 |
新增了 **`MongoDB\Driver\ReadConcern::AVAILABLE`** 常數。 |
PECL mongodb 1.2.0 |
新增了 **`MongoDB\Driver\ReadConcern::LINEARIZABLE`** 常數。 實作 MongoDB\BSON\Serializable 介面。 |