mongodb第五篇文章~关于mongodb的两种引擎
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb第五篇文章~关于mongodb的两种引擎相关的知识,希望对你有一定的参考价值。
简介:介绍mongodb的两种引擎和WAL技术
一 MMAPv1引擎:
前注释:mmapv1引擎也是随着版本不断改进,所以只介绍大体的
1 默认版本引擎: mongodb <3.2
2 锁级别: 1 Version < 2.2 : 只支持进程级锁,一个Mongod实例一个锁。
2 2.2 ≤ Version < 3.0 : 支持库级锁,一个db一把锁
3 Version> 3..0 collection级别
3 MVCC : 不支持 多版本并发控制
二 wiredtiger引擎
1 默认版本引擎:mongodb >= 3.2
2 锁级别: document 级别(table) =》document-level concurrency( 文档级别的并发)
3 MVCC:支持 多版本并发控制
4 Checkpoint durability (周期性的checkpoint会生成数据集的镜像,这是灾难恢复的基础)
5 Commit-level durability (开启WAL(记录在jonural日志中)日志记录后 对WT数据库的更新都会先写log,并进行周期性刷新,再修改数据,用于灾难恢复的根据)
6 恢复机制 :具体策略为
- 每60s做一次checkpoint
- 开启write ahead log,当log size达到2GB时做checkpoint;并自动删除不需要的log文件。
- 每次
commit_transaction
时,调用fsync持久化已经commit的log - 通过 checkpoint+wal日志记录 保证了mongodb的数据可靠性恢复
基于上述配置,mongodb可以保证服务crash时,所有已经commit的操作都能通过log恢复
三 日志文件对应的理解
1 mongodb oplog => mysql binlog
2 mongodb WAL => mysql undo+redo log
四 WAL技术解读
WAL即 Write-Ahead Logging,是一种实现事务日志的标准方法。WAL 的中心思想是先写日志,再写数据,数据文件的修改必须发生在这些修改已经记录在日志文件中之后。采用WAL日志的数据库系统在事务提交时,WAL机制可以从两个方面来提高性能:
- 多个client写日志文件可以通过一次 fsync()来完成
- 日志文件是顺序写的,同步日志的开销要远比同步数据页的开销要小
总体来说,使用了WAL机制之后,磁盘写操作只有传统的回滚日志的一半左右,大大提高了数据库磁盘I/O操作的效率,从而提高了数据库的性能。
采用了WAL机制,就不需要在每次事务提交的时候都把数据页冲刷到磁盘,如果出现数据库崩溃, 我们可以用日志来恢复数据库,任何尚未附加到数据页的记录都将先从日志记录 中重做(这叫向前滚动恢复,也叫做 REDO).WAL日志模式提供checkpoint操作,来定时进行数据更新操作
五 关于引擎方面还有很多不太懂的地方,有兴趣的可以留言交流
以上是关于mongodb第五篇文章~关于mongodb的两种引擎的主要内容,如果未能解决你的问题,请参考以下文章
启动MongoDB报version `OPENSSL_1.0.2‘ not found的两种解决办法
在 SQL 中选择范围的两种方法,在 MongoDB 中只有一种?