MongoDB庖丁解牛(存储引擎)

  • A+
所属分类:MongoDB 数据库

https://docs.mongodb.org/master/core/wiredtiger/

MongoDB目前支持三种存储引擎

WiredTiger存储引擎

MMAPv1 存储引擎

In-Memory 存储引擎(bate版)

MongoDB 3.0于2015年3月3日发布,默认存储引擎是MMAPv1

MongoDB 3.2的默认存储引擎是WiredTiger

因为MMAP存储引擎自身的天然缺陷(耗费磁盘空间和内存空间且难以清理,库级别锁),MongoDB为数据库运维人员带来了极大痛苦。意识到这一问题的10g公司,做出了有钱任性的决定,直接收购存储引擎厂商WiredTiger,将WiredTiger存储引擎集成进3.0版本(仅在64位版本中提供)。

WiredTiger存储引擎的特性

1、文档级别并发控制

WiredTiger通过MVCC实现文档级别的并发控制,即文档级别锁。这就允许多个客户端请求同时更新一个集合内存的多个文档,再也不需要在排队等待库级别的写锁。这在提升数据库读写性能的同时,大大提高了系统的并发处理能力。关于这一点的效果从监控工具mongostat就可以直接体现出来,旧版本的监控指标会有locked
db这一项(该项指标过高是mongo使用人员的一大痛点啊),而新版的mongostat已经看不到了。

2、磁盘数据压缩

WiredTiger支持对所有集合和索引进行Block压缩和前缀压缩(如果数据库启用了journal,journal文件一样会压缩),已支持的压缩选项包括:不压缩、Snappy压缩和Zlib压缩。这为广大Mongo使用者们带来了又一福音,因为很多Mongo数据库都是因为MMAP存储引擎消耗了过多的磁盘空间而不得已进行扩容。其中Snappy压缩为数据库的默认压缩方式,用户可以根据业务需求选择适合的压缩方式。理论上来说,Snappy压缩速度快,压缩率OK,而Zlib压缩率高,CPU消耗多且速度稍慢。当然,只要选择使用压缩,Mongo肯定会占用更多的CPU使用率,但是考虑到Mongo本身并不是十分耗CPU,所以启用压缩完全是值得的。

3、可配置内存使用上限

WiredTiger支持内存使用容量配置,用户通过storage.wiredTiger.engineConfig.cacheSizeGB参数即可控制MongoDB所能使用的最大内存,该参数默认值为物理内存大小的一半。这也为广大Mongo使用者们带来了又一福音,MMAP存储引擎消耗内存是出了名的,只要数据量够大,简直就是有多少用多少。

MMAPv1 存储引擎的特性

该存储引擎依然是3.0版的默认存储引擎。遗憾的是改进后的MMAP存储引擎依旧在数据库级别分配文件,数据库中的所有集合和索引都混合存储在数据库文件中,所以磁盘空间无法及时自动回收的问题如故。

1、锁粒度由库级别锁提升为集合级别锁

2、文档空间分配方式改变

In-Memory 存储引擎

目前还在测试中,不要在生产环境使用!!!

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: