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

  • 时间:
  • 浏览:0

在你你这种由六篇文章组成的系列中,大伙儿将共同看一下在MongoDB中使得数据库核心都都可以 支持事务的但会 变化。哪些变化包括:

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

引入时间戳以前都都可以 从根本上冗杂你你这种过程。通过获取多数提交点的时间戳并将其应用于原主节点的存储层,而在该时间戳以前指在的更改都都可以 删除。完成后,你你这种节点就都都可以 重新加入集群并过后结速从主节点进行克隆qq好友好友了。

MongoDB中的但会 最新底部形态(如多文档ACID事务)没办法 对底层的WiredTiger存储引擎中进行基础性的增强。

当MongoDB集群中的多个从节点通过克隆qq好友好友进行更新时,它们会指在与主节点同步的不同阶段。这原因分析分析大伙儿会有“多数提交点(majority commit point)”你你这种概念:即大多数从节点但会 达到的时间点。当主节点指在故障时,所有节点上都保证没办法 达到该多数提交点的数据是可用的。而通过基于RAFT的共识协议,其所含1个 从节点会被选举为新的主节点,这只是 从节点的工作最好的法律法律依据。

为了启用副本集的克隆qq好友好友底部形态,MongoDB会维护有1个 操作日志,称为oplog。oplog是服务层中的有1个 专用集合,它列出了应用于数据库的最新操作。通过在从节点上重放哪些操作,都都可以 使副本保持最新情况,从而与主节点保持一致。oplog中的操作顺序对于确保副本正确反映主节点的内容至关重要。

大伙儿将逐项检查哪些底部形态,以回答哪些间题:“去掉 了哪些功能?”、“为哪些另1个 实现?”以及“从整体上说它对事务哪些影响?”。

这只是 WiredTiger所实现的多版本并发控制组件。WiredTiger有着当时人用于读取更新底部形态以获取某个值“当前”情况的规则。WiredTiger应用哪些更新的顺序与MongoDB的oplog顺序不须相同。你你这种顺序上的差异来源于WiredTiger会在但会 的情况下将多个写操作并行应用到从节点。但会 主节点都都可以 接受但会 并行的写入,但会 从节点没办法 要能达到相同的吞吐量,这就要让其当时人的克隆qq好友好友写入过程也是并行的。

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

大伙儿现在从MongoDB和WiredTiger的底层时间戳过后结速。

在本系列的下一篇文章中,大伙儿将介绍MongoDB中的逻辑会话(Logical Sessions)以及它们怎样才能使事务成为但会 。

为了在WiredTiger存储引擎中保留MongoDB的顺序,大伙儿在更新底部形态上扩展出了有1个 “timestamp”字段。此字段的值由MongoDB传递到WiredTiger层,并被WiredTiger视为有1个 重要的元信息。当使用WiredTiger进行查询时,都都可以 指定有1个 时间戳以获取那个特定时刻数据的确切情况。这提供了你你这种在MongoDB顺序和WiredTiger顺序之间进行映射的最好的法律法律依据。

译者:牟天垒,郭远威

MongoDB中文社区,有1个 mongoers没办法 来的技术交流社区。

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

当以前的主节点回到集群时,将该节点与集群的其余次要同步的过程非常冗杂。但会 它但会 拥有但会 公共点之外的数据,它没办法 找出它所做的哪些集群并真不知道的更改,并获取到它所更改的记录的旧版本。

MongoDB负责管理oplog的排序以及副本怎样才能以正确的顺序访问oplog。使用WiredTiger你你这种的更强大的存储引擎以及它底层的顺序模型原因分析分析充分利用WiredTiger的能力,这没办法 协调服务层和存储层的有1个 顺序模型。

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

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

当有1个 从节点从主节点同步时,它通过从oplog中读取一批更新来进行同步。但会 ,它尝试将哪些更改应用到当时人的存储中。但会 没办法 时间戳,没办法 直到完成一批更新,应用操作的过程将阻塞读取查询,以确保用户不想看得人无序的写入。有个你你这种时间戳,现在都都可以 使用从当前批次过后结速的时间戳继续提供读取查询服务,该时间戳将确保对查询提供一致性的响应。这原因分析分析从节点读取现在不想被克隆qq好友好友更新中断。