(mongodb >=1.1.0)
MongoDB\Driver\ReadConcern 控制副本集和副本集分片中读取操作的隔离级别。此选项需要 MongoDB 3.2 或更高版本。
MongoDB\Driver\ReadConcern::AVAILABLE
当 afterClusterTime
和 level
未指定时,针对辅助节点的读取的默认值。
查询返回实例的最新数据。不保证数据已写入副本集的大多数成员(即可能回滚)。
对于非分片集合(包括独立部署或副本集部署中的集合),"local"
和 "available"
读取关注的行为相同。
对于分片集群,"available"
读取关注提供了更高的分区容忍度,因为它不等待确保一致性保证。但是,如果分片正在进行分片迁移,则具有 "available"
读取关注的查询可能会返回孤立文档,因为 "available"
读取关注与 "local"
读取关注不同,它不会联系分片的 primary 或 config server 以获取更新的元数据。
MongoDB\Driver\ReadConcern::LINEARIZABLE
查询返回的数据反映了所有成功写入,这些写入使用 "majority"
写入关注并在读取操作开始之前已确认。对于以 writeConcernMajorityJournalDefault
设置为 true
运行的副本集,线性化读取关注返回的数据永远不会回滚。
当 writeConcernMajorityJournalDefault
设置为 false
时,MongoDB 不会等待 w: "majority"
写入持久化,然后才确认写入。因此,如果丢失了副本集成员,"majority"
写入操作可能会回滚。
您可以为 primary 上的读取操作指定线性化读取关注。
线性化读取关注保证仅适用于读取操作指定唯一标识单个文档的查询过滤器。
始终将 maxTimeMS
与线性化读取关注一起使用,以防大多数承载数据的成员不可用。 maxTimeMS
确保操作不会无限期阻塞,而是确保如果无法满足读取关注,操作将返回错误。
线性化读取关注需要 MongoDB 3.4。
MongoDB\Driver\ReadConcern::LOCAL
如果未指定 level
,则针对 primary 的读取的默认值;如果未指定 level
但指定了 afterClusterTime
,则针对 secondary 的读取的默认值。
查询返回实例的最新数据。不保证数据已写入副本集的大多数成员(即可能回滚)。
MongoDB\Driver\ReadConcern::MAJORITY
查询返回实例的最新数据,该数据已确认已写入副本集中的大多数成员。
要使用 "majority"
的读取关注级别,副本集必须使用 WiredTiger 存储引擎和选举协议版本 1。
MongoDB\Driver\ReadConcern::SNAPSHOT
读取关注 "snapshot"
可用于多文档事务,从 MongoDB 5.0 开始,可用于多文档事务之外的某些读取操作。
如果事务不是因果一致会话的一部分,则在使用写入关注 "majority"
提交事务时,保证事务操作已从大多数已提交数据的快照中读取。
如果事务是因果一致会话的一部分,则在使用写入关注 "majority"
提交事务时,保证事务操作已从大多数已提交数据的快照中读取,该快照提供与紧接在事务开始之前的操作的因果一致性。
在多文档事务之外,读取关注 "snapshot"
可用于 primary 和 secondary 的以下读取操作:find
、aggregate
和 distinct
(针对非分片集合)。所有其他读取命令都禁止使用 "snapshot"
。
版本 | 描述 |
---|---|
PECL mongodb 1.11.0 | |
PECL mongodb 1.7.0 | 实现 Serializable。 |
PECL mongodb 1.4.0 | |
PECL mongodb 1.2.0 |