事务背景介绍(1):MongoDB/WiredTiger中的底层时间戳

  • 时间:
  • 浏览:0
  • 来源:大发彩神下载—大发彩神APP

译者:牟天垒,郭远威

MongoDB中文社区,4个多mongoers都在来的技术交流社区。

官网:Mongoing.com 微信公众号:Mongoing中文社区 (mongoing-mongoing)

WiredTiger将所有数据存储在4个多所含键和值的树状特征中。作为MongoDB的存储层时,该数据是因为是4个多文档或某个索引的一主次,这两者都存储在WiredTiger的树中。当对某个键的值进行更新时,WiredTiger将创建4个多用于更新的特征。此特征包所含关事务、已更改的数据以及指向其后任何更改的指针的信息。已经 ,WiredTiger将其附加到原始值,以前的更新会将当事人换成到前4个多特征的末尾,随着时间的推移创建4个多不同版本值的链式特征。

引入时间戳以前不能从根本上繁杂你这些 过程。通过获取多数提交点的时间戳并将其应用于原主节点的存储层,而在该时间戳以前发生的更改不能删除。完成后,你这些 节点就不能重新加入集群并之前 之前 结束从主节点进行克隆qq了。

当以前的主节点回到集群时,将该节点与集群的其余主次同步的过程非常繁杂。是因为它是因为拥有很多公共点之外的数据,它不会能找出它所做的那此集群并我如此了乎 的更改,并获取到它所更改的记录的旧版本。

当4个多从节点从主节点同步时,它通过从oplog中读取一批更新来进行同步。已经 ,它尝试将那此更改应用到当事人的存储中。是因为如此时间戳,如此直到完成一批更新,应用操作的过程将阻塞读取查询,以确保用户不会都看无序的写入。有个你这些 时间戳,现在不能使用从当前批次之前 之前 结束的时间戳继续提供读取查询服务,该时间戳将确保对查询提供一致性的响应。这是因为从节点读取现在不会被克隆qq更新中断。

在本系列的下一篇文章中,很多人将介绍MongoDB中的逻辑会话(Logical Sessions)以及它们要怎样使事务成为是因为。

本文译自:Transactions Background Part 1: Low-level timestamps in MongoDB/WiredTiger

在你这些 由六篇文章组成的系列中,很多人将同時 看一下在MongoDB中使得数据库核心不能支持事务的很多变化。那此变化包括:

为了在WiredTiger存储引擎中保留MongoDB的顺序,很多人在更新特征上扩展出了4个多“timestamp”字段。此字段的值由MongoDB传递到WiredTiger层,并被WiredTiger视为4个多重要的元信息。当使用WiredTiger进行查询时,不能指定4个多时间戳以获取那个特定时刻数据的确切情况表。这提供了有一种在MongoDB顺序和WiredTiger顺序之间进行映射的法子。

当MongoDB集群中的多个从节点通过克隆qq进行更新时,它们会发生与主节点同步的不同阶段。这是因为很多人会有“多数提交点(majority commit point)”你这些 概念:即大多数从节点是因为达到的时间点。当主节点发生故障时,所有节点上都保证不会能达到该多数提交点的数据是可用的。而通过基于RAFT的共识协议,其中4个多从节点会被选举为新的主节点,这而是 从节点的工作法子。

为了启用副本集的克隆qq特征,MongoDB会维护4个多操作日志,称为oplog。oplog是服务层中的4个多专用集合,它列出了应用于数据库的最新操作。通过在从节点上重放那此操作,不能使副本保持最新情况表,从而与主节点保持一致。oplog中的操作顺序对于确保副本正确反映主节点的内容至关重要。

这而是 WiredTiger所实现的多版本并发控制组件。WiredTiger有着当事人用于读取更新特征以获取某个值“当前”情况表的规则。WiredTiger应用那此更新的顺序与MongoDB的oplog顺序不会相同。你这些 顺序上的差异来源于WiredTiger会在是因为的情况表下将多个写操作并行应用到从节点。是因为主节点不能接受很多并行的写入,已经 从节点不会不会 达到相同的吞吐量,这就要让其当事人的克隆qq写入过程也是并行的。

MongoDB负责管理oplog的排序以及副本要怎样以正确的顺序访问oplog。使用WiredTiger你这些 的更强大的存储引擎以及它底层的顺序模型是因为充分利用WiredTiger的能力,这不会能协调服务层和存储层的4个多顺序模型。

很多人将逐项检查那此特征,以回答那此大问题:“换成了那此功能?”、“为那此原来实现?”以及“从整体上说它对事务有那此影响?”。

通过将时间戳信息推送到WiredTiger的树特征中,不能使用WiredTiger的多版本并发控制来减少锁操作并繁杂重新同步的过程。快照时间点的能力还使服务器不能回滚到该时间点,这是多文档ACID事务正确性保证的基础。

MongoDB中的很多最新特征(如多文档ACID事务)不会能对底层的WiredTiger存储引擎中进行基础性的增强。

很多人现在从MongoDB和WiredTiger的底层时间戳之前 之前 结束。

MongoDB写操作的时间戳现在作为一项附加的元数据总出 在WiredTiger存储层中。这使得MongoDB的时间和顺序在概念上变为可查询的,以便不能只检索特定时间或以前的数据。它通过创建MongoDB快照,允许数据库操作和事务不能从4个多公共时间点之前 之前 结束工作。