Mongo3.4 Storage Engines存储引擎(MMAPv1)

来源:互联网 发布:新闻资讯网站源码 编辑:程序博客网 时间:2024/05/28 19:23

MMAPv1是MongoDB基于内存映射文件的存储引擎,它擅长于大容量插入、读取和就地更新的工作负载。

从MongoDB3.2开始MMAPv1不在是Mongo的默认存储引擎,WiredTiger成为了默认存储引擎;

日志

为了确保对MongoDB数据集的所有修改都持久化到硬盘上,默认的MongoDB会将所有的操作日志记录到硬盘上,MongoDB写日志的频率比写数据文件的频率更高。

MMAPv1存储引擎的默认配置是每隔60秒写入到数据文件一次和每隔100毫秒写入到日志文件一次;

可以使用storage.syncPeriodSecs改变写入到数据文件的时间间隔;

MongoDB写入数据文件和日志文件时这些值表示完成写入操作的最大时间量,在许多情况下MongoDB和操作系统刷新数据到硬盘的频率更频繁,所以上面的值代表了理论上的最大值;

日志可以使mongo成功的恢复数据在MongoDB终端或者退出之后;


记录存储特性

所有的记录在磁盘上连续分布,当一个文档变的比他允许的大的时候,MongoDB必须分配一个新的记录,新分配的记录需要MongoDB移动文件和索引,这将比就地更新话费更多的时间

默认情况下MongoDB使用Power of 2 Sized Allocations分配,因此每一个文档存储MongoDB记录和额外的空间;


记录分配策略、

Mongodb支持多种记录分配策略来决定如何将填充添加到文档中当创建一个记录的时候。因为插入之后文档会变大并且所有的记录都是连续的;填充可以减少更新后在磁盘上重新放置文档的需要。搬迁比更新效率低并可能导致存储碎片,因此,所有的填充策略都为增加效率和减少碎片提供了额外的空间。

.不同的分配策略支持不同的工作负载,the power of 2 allocations are more efficient for insert/update/delete workloads; while exact fit allocations is ideal for collections without update and delete workloads.


Power of 2 Sized分配策略

Mongo3.0使用Power of 2 Sized分配策略做为MMAPv1做为默认分配策略,使用Power of 2 Sized分配策略,每个记录的大小都是字节,对于大于2 MB的文件,分配舍入到最近的2 MB的倍数。

the power of 2 sizes 分配策略有一下关键特性

可以有效地重用已释放的记录以减少碎片。将记录分配大小量化为固定的一组大小,增加插入将适合于由先前的文档删除或重新定位创建的空闲空间的可能性。

给一个文档填充空间可以减少移动,


无填充分配策略

对于工作负载不改变文档集合大小的集合,例如只包含插入操作或不增加文档大小的更新操作的工作负载。


阅读全文
0 0
原创粉丝点击