gao*_*ols 5 transactions mongodb
多数提交数据和多数提交数据的快照之间有什么区别,我应该关心它吗?如果这两个概念完全不同,何时以及如何选择一个?
我在阅读有关 mongodb 中事务的参考时发现了这些描述:https://docs.mongodb.com/manual/core/transactions/#transaction-options-read-concern-write-concern-read-preference,但我不明白之间的差别readConcern: majority和readConcern: snapshot。
不幸的是,文档确实将这些概念视为理所当然,但差异并不那么容易理解。我什至不确定我是否正确,但 Aly Cabral 在她关于分布式事务的演讲中举了这个例子。
\n如果我指定readConcern: snapshot,那么我将在所有分片上拥有一致的时间点。
相反,如果我指定readConcern: local或readConcern: majority,那么每个分区都会有一致的快照。
她最后说readConcern: snapshot,在分片集群中协调快照查找可能会很昂贵,因此您应该权衡每种方法的利弊readConcern。
她做了一个很好的例子,这些图片确实对我有帮助,但我认为有必要补充一下:
\n显示的字段time指的是ClusterTime1:这是基于混合逻辑时钟的集群范围逻辑时钟。每个分片的主分片都有自己的ClusterTime价值,并遵守以下规则:
\n\nClusterTime 增量规则:\n仅当有\n写入主节点\xe2\x80\x99s 复制操作日志\n(oplog) 时,ClusterTime 才会递增 (\xe2\x80\x9cticks\xe2\x80\x9d)。\ ClusterTime 分布规则:\ n集群节点(mongod、mongos、配置服务器、客户端)\n在发送消息时\n始终跟踪并包含最大的已知 ClusterTime。
\n
如果在第二张图中,ClusterTime交易的编号选择为 102,则具有ClusterTime110 的分片可能会包含我不希望在交易期间看到的多数提交的更改。从 MongoDB 5.0 开始,这个时间是可配置的:
readConcern: {\n level: "snapshot",\n atClusterTime: Timestamp(1613577600, 1)\n}\nRun Code Online (Sandbox Code Playgroud)\n我正在写一份关于 MongoDB 事务的报告,其中解释了这些概念和许多其他概念。如果您发现错误/需要改进的地方,我将非常感谢任何人的帮助。
\n1: https: //dl.acm.org/doi/pdf/10.1145/3299869.3314049
\n| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |