存储引擎概述

存储引擎是MongoDB的核心组件,负责管理数据如何存储在硬盘和内存上。MongoDB支持的存储引擎有MMAPv1 ,WiredTiger和InMemory。InMemory存储引擎用于将数据只存储在内存中,只将少量的元数据(meta-data)和诊断日志(Diagnostic)存储到硬盘文件中,由于不需要Disk的IO操作,就能获取所需的数据,InMemory存储引擎大幅度降低了数据查询的延迟(Latency)。从mongodb3.2开始默认的存储引擎是WiredTiger,3.2版本之前的默认存储引擎是MMAPv1,mongodb4.x版本不再支持MMAPv1存储引擎

storage:
journal:
enabled: true
dbPath: /data/mongo/
##是否一个库一个文件夹
directoryPerDB: true
##数据引擎
engine: wiredTiger
##WT引擎配置
WiredTiger:
engineConfig:
##WT最大使用cache(根据服务器实际情况调节)
cacheSizeGB: 25.3.2 WiredTiger存储引擎优势
5.3.3 WiredTiger引擎包含的文件和作用
##是否将索引也按数据库名单独存储
directoryForIndexes: true
journalCompressor:none (默认snappy)
##表压缩配置
collectionConfig:
blockCompressor: zlib (默认snappy,还可选none、zlib)
##索引配置
indexConfig:
prefixCompression: true

WiredTiger存储引擎优势

5.3.3 WiredTiger引擎包含的文件和作用
##是否将索引也按数据库名单独存储
directoryForIndexes: true
journalCompressor:none (默认snappy)
##表压缩配置
collectionConfig:
blockCompressor: zlib (默认snappy,还可选none、zlib)
##索引配置
indexConfig:
prefixCompression: true
1.文档空间分配方式
WiredTiger使用的是BTree存储 MMAPV1 线性存储 需要Padding
2.并发级别
WiredTiger 文档级别锁 MMAPV1引擎使用表级锁
3.数据压缩
snappy (默认) 和 zlib ,相比MMAPV1(无压缩) 空间节省数倍。
4.内存使用
WiredTiger 可以指定内存的使用大小。
5.Cache使用
WT引擎使用了二阶缓存WiredTiger Cache, File System Cache来保证Disk上的数据的最终一
致性。
而MMAPv1 只有journal 日志

WiredTiger引擎包含的文件和作用

WiredTiger.basecfg: 存储基本配置信息,与 ConfigServer有关系
WiredTiger.lock: 定义锁操作
table*.wt: 存储各张表的数据
WiredTiger.wt: 存储table* 的元数据
WiredTiger.turtle: 存储WiredTiger.wt的元数据
journal: 存储WAL(Write Ahead Log)

WiredTiger存储引擎实现原理

写请求
WiredTiger的写操作会默认写入 Cache ,并持久化到 WAL (Write Ahead Log),每60s或Log文件达到2G
做一次 checkpoint (当然我们也可以通过在写入时传入 j: true 的参数强制 journal 文件的同步 ,
writeConcern
{ w: , j: , wtimeout: }) 产生快照文件。WiredTiger初始化时,恢复至最新的快照状态,然后再根据WAL
恢复数据,保证数据的完整性

checkpoint流程

1.对所有的table进行一次checkpoint,每个table的checkpoint的元数据更新至WiredTiger.wt
2.对WiredTiger.wt进行checkpoint,将该table checkpoint的元数据更新至临时文件
WiredTiger.turtle.set
3.将WiredTiger.turtle.set重命名为WiredTiger.turtle。
4.上述过程如果中间失败,WiredTiger在下次连接初始化时,首先将数据恢复至最新的快照状态,然后根
据WAL恢复数据,以保证存储可靠性

Journaling

在数据库宕机时 , 为保证 MongoDB 中数据的持久性,MongoDB 使用了 Write Ahead Logging 向磁盘
上的 journal 文件预先进行写入。除了 journal 日志,MongoDB 还使用检查点(checkpoint)来保证
数据的一致性,当数据库发生宕机时,我们就需要 checkpoint 和 journal 文件协作完成数据的恢复工
作。

  1. 在数据文件中查找上一个检查点的标识符
  2. 在 journal 文件中查找标识符对应的记录
  3. 重做对应记录之后的全部操作

MongoDB 存储引擎相关推荐

  1. WiredTiger存储引擎分析

    初始化 mongodb中wiredtiger初始化 MONGO_INITIALIZER_WITH_PREREQUISITES(WiredTigerEngineInit, ("SetGloba ...

  2. MongoDB存储原理和基本概念

    mongodb基本概念 ①.mongodb是属于文档型的非关系型数据库 ②. mongodb 数据库和关系型数据库概念一致,mongodb集合就是关系型数据库的表, mongodb文档就是关系型数据库 ...

  3. Mongodb WiredTiger存储引擎特性

    数据库的存储引擎组件,负责管理存储在内存和硬盘上的数据.MongoDB支持多个存储引擎,为特定的工作指派合适的存储引擎为您的用例可以显著提高应用程序的性能. **MongoDB WiredTiger* ...

  4. MongoDB Wiredtiger存储引擎实现原理——Copy on write的方式管理修改操作,Btree cache...

    转自:http://www.mongoing.com/archives/2540 传统数据库引擎的数据组织方式,一般存储引擎都是采用 btree 或者 lsm tree 来实现索引,但是索引的最小单位 ...

  5. MongoDB Wiredtiger存储引擎实现原理

    Mongodb-3.2已经WiredTiger设置为了默认的存储引擎,最近通过阅读wiredtiger源代码(在不了解其内部实现的情况下,读代码难度相当大,代码量太大,强烈建议官方多出些介绍文章),理 ...

  6. MongoDB 初体验:存储引擎 MMAPv1 与高内存消耗及升级迁移

    想不到我和MongoDB的第一次亲密接触竟然是这样开始的. 当我对公司的一个内部系统性能无可忍受时,意外发现在这个内存仅为 32G 的服务器上,运行着一个 MongoDB 数据库,其主进程 mongo ...

  7. 存储引擎配置引发的MongoDB启动失败

    前言 系统环境: [root@rabbitmq3 mongo]# uname -r 3.10.0-693.21.1.el7.x86_64 [root@rabbitmq3 mongo]# cat /et ...

  8. MONGODB 的存储引擎更快,更高,更强的秘诀 --译

    在过去的20年里,存储硬件的性能提高了两个数量级,首先固态存储系统 SSD 的引入,同时SATA导向了PCIE 的接口方式,最终非易失性的技术以及制造工艺的创新.2019年4月,Intel 发布了首款 ...

  9. MyRocks: 为facebool 的社交图谱服务的LSM-tree存储引擎

    文章目录 概览 1. UDB 架构 2. UDB 表格式 3. Rocksdb:针对flash存储优化过的第三方库 3.1 Rocksdb架构 3.2 为什么选择Rocksdb 4. MyRocks ...

最新文章

  1. 汉诺塔递归与非递归算法
  2. jetty的Form too large异常解决方案
  3. 用 FileZilla 连接 Amazon 的aws的主机
  4. arcscene如何显示标注_CAD制图初学入门:CAD制图软件中如何添加多重标注?
  5. 关于“Xshell连接linux(deepin)时提示ssh服务器拒绝了密码,请再试一次”的问题...
  6. kafka数据可靠性深度解读
  7. android 转发短信
  8. axios (get post请求、头部参数添加)傻瓜式入门axios
  9. 荣耀老熊晒荣耀V30新机样张:还有更深远的未知空间
  10. 【Linux】Ubuntu 代理配置
  11. [BZOJ 3622]已经没有什么好害怕的了(Dp+容斥原理)
  12. numpy-poly1d、polyfit、polyval多项式使用
  13. Win10操作系统下,如何确定电脑位数(图文教程)
  14. 二进制算法问题解析——1000瓶药水,1瓶有毒药,几只小白鼠能够找出?
  15. 利用云服务器自动发送天气预报邮件
  16. 如何下载离线地图数据(支持谷歌、百度、高德等所有地图源)
  17. 虚拟机ping通主机步骤_6在购买虚拟主机服务之前,请按照操作步骤进行操作
  18. Bailian2713 肿瘤面积
  19. 【教程】win10下安装Biolinux双系统
  20. 将图片进行base64 编码后的数据进行读取,以io流的方式传给前台并显示出来并且不断刷新图片

热门文章

  1. 仿微信、短信、QQ等消息数目右上角红色小圆球气泡显示(基于Android XML布局文件实现)
  2. 技术视角 | 生成式 AI 对商业世界的革新与影响
  3. SSM+垃圾分类系统小程序 毕业设计-附源码221511
  4. 地缘剧本杀 (十三):逃亡(原创小说连载,内含语音)
  5. 旧版本显卡驱动官网安装失败,教你如何把别人的驱动程序“复制”过来
  6. 页面Http状态查询工具说明
  7. springboot结合swagger
  8. 经验之谈:破解网络竞价菜鸟迷茫困局
  9. ros robot_localization
  10. JAVA 16进制转ASCII -- 2018年5月25日 周五