MongoDB--WiredTiger存储引擎(写数据流程,持久化,Cache)

MongoDB–WiredTiger存储引擎(写数据流程,持久化,Cache)


在mongoDB3.2之后,默认的存储引擎是WiredTiger。

一:WiredTiger是什么

WiredTiger是一个存储引擎,mongoDB3.2之后默认采用的就是WiredTiger.wiredTiger支持document级别的锁,在MongoDB3.6里面, 支持了事务,在MongoDB4.0里面, 终于有了针对副本集的多文档事务实现 。

WiredTiger与原先的MMAPV1相比有以下优势:

  • 性能&并发:在大多数工作负载下,WiredTiger的性能要比MMAPV1高很多。WiredTiger引擎为现代多核系统量身定制,更好地发挥多核系统的处理能力。MMAPV1引擎使用表级锁,因此,当某个单表上有并发的操作,吞吐将受到限制。WiredTiger使用文档级锁,由此带来并发及吞吐的提高。对于典型的应用,切到WiredTiger引擎,可带来5-10倍的性能提升。
  • 压缩&加密MMAPV1引擎要求数据在内存和在磁盘的形式一致(map磁盘内存映射)。因此,它并不支持压缩和加密。WiredTiger并没有这层限制,可以更好地支持。
  • 索引前缀压缩WiredTiger存储索引时使用前缀压缩——相同的前缀只存一次。由此带来的效果是:索引更小了,对物理内存使用也更少了。

二:写操作流程

  1. wiredTiger写操作先写到cache,并且持久化到WAL(预写日志)
  2. 每60s或者文件达到2G,执行一次checkpoint持久化到磁盘,产生一个快照
  3. Wiredtiger连接初始化时,首先将数据恢复至最新的快照状态,然后根据WAL恢复数据,以保证存储可靠性

三:关于B树

B树,英文中的B-Tree,一个 m 阶的B树满足以下条件:

每个结点至多拥有m棵子树;
根结点至少拥有两颗子树(存在子树的情况下);
除了根结点以外,其余每个分支结点至少拥有 m/2 棵子树;
所有的叶结点都在同一层上;
有 k 棵子树的分支结点则存在 k-1 个关键码,关键码按照递增次序进行排列;
关键字数量需要满足ceil(m/2)-1 <= n <= m-1;

在这里插入图片描述

四:Cache

Wiredtiger的Cache采用Btree的方式组织,每个Btree节点为一个page,root page是btree的根节点,internal page是btree的中间索引节点,leaf page是真正存储数据的叶子节点;btree的数据以page为单位按需从磁盘加载或写入磁盘。
在这里插入图片描述

五:增删改

采用Copy on write的方式管理insert、update、delete。

修改操作:

1、数据读入Cache里,
2、对数据修改,
3、持久化时,写入新的page(不会写原理的leaf page)。
4、执行Chechpoint之后,产生新的page。

六:Checkpoint

每次Checkpoint的过程:
在这里插入图片描述

1、对所有的table进行一次Checkpoint,将每个table的Checkpoint的元数据更新到WiredTiger.wt
2、再对WiredTiger.wt进行Checkpoint,将Checkpoint的meta数据更新到WiredTiger.turtle.set
3、将WiredTiger.turtle.set重命名为WiredTiger.turtle

WiredTiger包含以下文件:

WiredTiger.basecfg :存储基本配置信息
WiredTiger.lock用于防止多个进程连接同一个WiredTiger数据库
table*.wt存储各个table的数据
WiredTiger.wt:是特殊的table,用于存储所有其他table的meta数据信息
WiredTiger.turtle:存储WireTiger.wt的meta数据信息

journal存储Write ahead log

上述过程如中间失败,Wiredtiger在下次连接初始化时,首先将数据恢复至最新的快照状态,然后根据WAL恢复数据,以保证存储可靠性。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值