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

  • 时间:
  • 浏览:0

大家儿将逐项检查哪些地方地方特征,以回答哪些地方地方什么的问题:“加带了哪些地方功能?”、“为哪些地方事先实现?”以及“从整体上说它对事务哪些地方地方影响?”。

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

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

这倘若WiredTiger所实现的多版本并发控制组件。WiredTiger有着买车人用于读取更新特征以获取某个值“当前”清况 的规则。WiredTiger应用哪些地方地方更新的顺序与MongoDB的oplog顺序不不相同。你这人顺序上的差异来源于WiredTiger会在事先的清况 下将多个写操作并行应用到从节点。事先主节点还也能接受一些并行的写入,否则从节点需用也能达到相同的吞吐量,这就要让其买车人的克隆写入过程也是并行的。

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

当MongoDB集群中的多个从节点通过克隆进行更新时,它们会趋于稳定与主节点同步的不同阶段。这因为着大家儿会有“多数提交点(majority commit point)”你这人概念:即大多数从节点事先达到的时间点。当主节点趋于稳定故障时,所有节点上都保证只有达到该多数提交点的数据是可用的。而通过基于RAFT的共识协议,其中还还有一个 从节点会被选举为新的主节点,这倘若从节点的工作辦法 。

译者:牟天垒,郭远威

MongoDB中文社区,还还有一个 mongoers前会来的技术交流社区。

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

当还还有一个 从节点从主节点同步时,它通过从oplog中读取一批更新来进行同步。否则,它尝试将哪些地方地方更改应用到买车人的存储中。事先没办法 时间戳,没办法 直到完成一批更新,应用操作的过程将阻塞读取查询,以确保用户不不就看无序的写入。有个你这人时间戳,现在还也能使用从当前批次结速英语 的时间戳继续提供读取查询服务,该时间戳将确保对查询提供一致性的响应。这因为着从节点读取现在不不被克隆更新中断。

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

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

引入时间戳事先还也能从根本上比较复杂你这人过程。通过获取多数提交点的时间戳并将其应用于原主节点的存储层,而在该时间戳事先趋于稳定的更改还也能删除。完成后,你这人节点就还也能重新加入集群并结速英语 从主节点进行克隆了。

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

在你这人由六篇文章组成的系列中,大家儿将共同看一下在MongoDB中使得数据库核心还也能支持事务的一些变化。哪些地方地方变化包括:

当事先的主节点回到集群时,将该节点与集群的其余部分同步的过程非常比较复杂。事先它事先拥有一些公共点之外的数据,它需用找出它所做的哪些地方地方集群并我不知道的更改,并获取到它所更改的记录的旧版本。

MongoDB负责管理oplog的排序以及副本如何以正确的顺序访问oplog。使用WiredTiger你这人的更强大的存储引擎以及它底层的顺序模型因为着充分利用WiredTiger的能力,这需用协调服务层和存储层的还还有一个 顺序模型。

大家儿现在从MongoDB和WiredTiger的底层时间戳结速英语 。

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

在本系列的下一篇文章中,大家儿将介绍MongoDB中的逻辑会话(Logical Sessions)以及它们如何使事务成为事先。