[mongodb] :MMAPv1 Storage Engine

  MMAPv1 是mongodb 在3.2以前默认的存储引擎,在3.2 之后默认的存储引擎为WiredTiger,MMAPv1存储引擎基于内存映射文件,它擅长高容量的插入,读取和更新。

Journal

  为了确保所有对mongodb 数据集的修改是可持续的写到磁盘中,mongodb 默认所有的记录都写在磁盘中的日志里面,mongodb写日志比写数据文件更加平凡。默认的情况下,mongodb每隔60秒写到磁盘中的数据文件一次,而写日志文件粗略的每隔100毫秒,这些值都是他们写数据文件的最大时间间隔,在更多的mongodb的应用例子中,mongdb和操作系统刷新数据到磁盘是更加频繁的,因此这些值都是理论上的最大值。,去改变日志文件写的时间间隔,看 storage.syncPeriodSecs ,改变日志文件写入的时间间隔看storage.journal.commitIntervalMs

  当mongdb的实例退出后,这些日志允许mongdb从数据文件中恢复数据并不刷新所有的改变。

Record Storage Characteristics

  所有的记录被写进磁盘中,当一个document变的比被分配到的磁盘的地址空间更大的时候,mongdb 必须分配一个新的地址,新的地址要求mongodb 移动这个document 和更新与这个document 有关的所有的索引,这将导致需要花费更多的时间去更新地址和整理存储碎片。

  值得庆幸的是,在mongdb3.0以后的版本中,有所改变,默认的情况下,3.0以后的版本中, 使用了 Power of 2 Sized Allocations,每一个在mongdb中的document被存储在一个磁盘空间中,这个空间包括他自己和一些额外的空间,这些额外的空间允许document更新导致的增长以最大可能的减少重新分配。

Record Allocation Strategies

  mongodb  支持多个空间分配策略,当分配一个空间时,这些策略决定mongod 怎样增加一个额外的空间到这个doument上,因为在mongodb 中,document在插入后是可以增加的,所有的记录都在磁盘上,一个额外的空间可以减少一个document在更新变大重新分配空间的需要。重新分配更新空间效率是比在本地空间更新效率低,并且重新分配空间导致存储的碎片,因此,所有的另外增加额外的(padding stratrgies)策略交换另外的空间提高了效率减少了碎片。

  不同的策略支持不同的工作负载,lead to storage fragmentation 是对插入更新和删除的工作负载时更佳有效的, exact fit allocations(精确分配)是一个好的策略对于一个没有更新和删除的工作负载。

Power of 2 Sized Allocations

  mongodb 在3.0 以后的版本中默认使用了Power of 2 Sized Allocations 的分配策略为MMPAPv1,每一个空间的大小都是2的指数比特(如:32,64,128,256,512 ... 2MB),由于文档的大小都超过了2MB ,分配的空间被上升到了2MB 的倍数。

  The power of 2 sizes有如下关键的属性:

    * 可以有效的重新释放空余的空间用来减少分裂。把特定的空间大小转化为一个固定大小增加的集合,插入的数据将保存在可能被更早的document删除或者搬迁创造的空间中。

    *可以减少移动,增加额外的装饰空间给一个document不需要移动就可以增长空间。另外,节省了移动的花费,在不需要更多的去更新索引。虽然The power of 2 sizes策略可以最大程度的减少移动,但是不能完全的消除。

No Padding Allocation Strategy

  对于一些collections 工作不改变文档的大小,如插入和更新工作,这些工作都不增加文件的大小,这个时候The power of 2 sizes 策略是没用的,你可以使用collMod  命令或者db.createCollection() 方法并且用nopadding 对象。

在3.0以前,mongdb 使用一个分配策略,这个策略包括动态计算padding 作为一个document 大小的因素。

Memory Use

  使用MMAPv,mongodb 自动使用所有机器的空闲的内存作为它的cache,系统资源监视器监视mongodb 使用的内存情况,这意外这着mongodb将尽可能多的使用空闲的内存,如果其他的进程突然需要服务器大量的内存,mongdb 将会缓存内存到其他的进程。

  严格的来说,操作系统的虚拟内存的子系统管理mongdb内存,这意外着mongodb将尽可能的使用更多的空闲的内存,按照实际需要内存和磁盘进行数据交换,部署充足的内存去使应用程序工作的数据集有充足的RAM,使mongodb 达到最好的性能。

时间: 2024-08-19 11:45:07

[mongodb] :MMAPv1 Storage Engine的相关文章

对mongodb 的 WiredTiger Storage Engine 的理解

今天看了mongodb的官方文档中的WiredTiger Storage Engine ,说说我对WiredTiger Storage Engine 的理解! 在mongodb3.2版本以后,wiredTiger 存储引擎为默认的储存引擎. Document Level Concurrency WiredTiger 的写操作使用了Document 级别的并发控制,因此多个clients可以同时同一个collection 中的不同的document  进行修改. 为了尽可能多的读和写操作,Wire

MongoDB学习笔记(一:安装时出现The default storage engine 'wiredTiger' is not available问题解决)

今晚在自己老式笔记本来试了一下MongoDB的安装,由于配置比较低,只能选择32位版本的MongoDB进行安装,在安装过程中碰到了上述标题所示错误,自己也捣鼓了一个小时左右,终于在一篇博客中找到答案,具体原文链接如下:http://blog.csdn.net/u013457382/article/details/50775268 MongoDB学习笔记(一:安装时出现The default storage engine 'wiredTiger' is not available问题解决)

mysql 1030 Got error 28 from storage engine

mysql 1030 Got error 28 from storage engine 错误原因:磁盘临时空间不够. 解决办法:df -h 查看设备存储的使用情况 du -h --max-depth=1 查看目录的大小,删除一部分内容

MySQL出现1030-Got error 28 from storage engine错误

Navicat for MySQL出现1030-Got error 28 from storage engine错误  刚刚还能用这会儿就用不了了,估计是磁盘空间不足引起的! 在根目录/下执行命令:df -h [[email protected]localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 50G 48G 0 100% / tmpfs 1.9G 448K 1.

[转]Inside the Storage Engine: Ghost cleanup in depth

Inside the Storage Engine: Ghost cleanup in depth By: Paul Randal Over the years I was in the Storage Engine team I saw a lot of concern on the various forums about the ghost cleanup task. There have been a few bugs with it in previous versions  (see

在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'

在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB' 解决方法:解决方法:             1.关闭MySQL数据库       2.修改my.ini文件,把skip-innodb这行注释掉       3.打开MySQL数据库 原因:没有开启MySQL InnoDB存储引擎. 在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'

Unknown/unsupported storage engine: InnoDB

症状:无法启动mysql,在“mysql数据库目录/主机名.err”日志文件中报错 Unknown/unsupported storage engine: InnoDB原因:MySQL5.5.8 GA默认引擎为InnoDB,而配置文件(my.cnf)中设置了skip-innodb解决:在配置文件(my.cnf)中设置default-storage-engine=MyISAM Error:2013-08-18 21:08:37 21440 [Note] Plugin 'FEDERATED' is

You can add an index on a column that can have NULL values if you are using the MyISAM, InnoDB, or MEMORY storage engine.

w https://dev.mysql.com/doc/refman/5.7/en/create-index.html MySQL :: MySQL 5.7 Reference Manual :: B.5.4.3 Problems with NULL Valueshttps://dev.mysql.com/doc/refman/5.7/en/problems-with-null.html You can add an index on a column that can have NULL va

MySQL启动时报Plugin 'InnoDB' registration as a STORAGE ENGINE failed.错误

当更改了MySQL参数后,重新启动MySQL数据库,查看日志发现以下错误信息 141029  2:23:37 [ERROR] Plugin 'InnoDB' init function returned error.141029  2:23:37 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 解决办法 [[email protected] mysql]# lsibdata1  master.info    mys