mongodb 现在有两款存储引擎  MMAPv1 和 WireTiger,当然了除了这两款存储引擎还有其他的存储引擎了。

如:

  • 内存引擎:现在的mongodb 版本中已经有了,主要的cache 服务,它主要是做单元测试的。
  • mongo-rocks:是一个key-value 的引擎被作为一个混合层为Facebook的RocksDB
  • Fusion-io: 这个存储引擎是被SanDisk创建,他是尽可能的绕过操作系统的文件层直接写到存储设备。
  • TokuMX:这个存储系统被 Percona 创建,使用了分形树索引代替了B-tree树索引。
  • /dev/null:这个存储引擎把你所有写的和读的每一件事都返回空的结果,这听起来是愚蠢的,但是在一些情况下是十分有用的,例如,在与数据库无关的情况下,在你的应用程序中去找一些性能瓶颈的时候。

MMAPv1

  MMAPv1之所以被命名,是因为Linux 中的命令mmap() 这个命令的意思是映射文件到虚拟内存并且允许对一些用例进行单个的优化,例如,当你有一个大的文件,但是你不需要去读整个文件,你只需要读取器中的一部分,mmap()是十分快的比一个read(),因为read() 是把整个文件读到内存中。

  MMAP1有一个collection级别的锁,但是没有document 级别的锁,这就造成不能同时有两个进程对同一个collection 进行写的操作。因此,针对同一个collection的写操作,必须要等到前一个操作完成才能进行下一个写的操作。MMAP这个collection 级别的锁事必要的,因为MMAP的索引涉及多个document ,如果这些索引不能同时的被更新,那么这些索引将是不稳定的。

WiredTiger

  MMAP使用B-tree树去存储索引,WiredTiger也使用B-trees ,但是支持LSM树image above was adapted from here)。

  LSM 树针对需要去有大量的随机的插入的工作负载的,当你的数据比cahce的容量大并且后台的维护经费在可以接受的范围的的情况是有利的。

  在WiredTiger引擎中,如果一个元素的document 需要被更新,一整个新的document将被全部写到磁盘中,并且把这个旧的document移除。

  WiredTiger 提供了document-level-concurrency,这意味着两个写的操作将不影响相同的document,如果影响,一个操作将被返回重新执行。如果返回执行是十分少的那么这个是一个非常不错的性能优化。

  还有一个WiredTiger特有的,提供了一个在文件系统中压缩数据和索引的功能,他支持快压和zlib 两种运算,默认情况下是有用快压,和zlib相比他是用了少量的cpu但是它有低 的压缩效率。

Benchmarks

  当WiredTiger为mongodb服务的时候,他被公布在写操作方面,性能将比之前快7-10 倍,并且压缩了80%的文件系统,这是一个大的改善,下面是多线程的吞吐量

 Conclusion 

  如果你的app是读的权重大,使用MMAP,如果写的大,使用WiredTiger。

  一个有趣的问题是可以建立一个混合引擎的复制集。在复制集中,你可以给一个node配置WiredTiger去接受一个大量写的数据负载,再用另外一个node 配置MMAP引擎去被一些读数据的服务使用,复制集会自动主库和其他库之间的数据,她们基础的存储引擎是独立的。

  如果你的数据文件使用MMAP引擎创建的,你将需要创建一个新的数据库,如果你需要用一个WiredTirger node去运行,他不能打开数据文件,这倒转过来是一样的,虽然她们使用了不同的方法存储数据,你不能重新使用相同的文件,但是在复制集中,数据和主库进行交换是没有问题的

[mongodb] MMAP 和wiredTiger 的比较的更多相关文章

  1. mongodb 3.x WiredTiger存储优化测试

    http://pan.baidu.com/s/1sk8zekX 总结:1.使用WiredTiger引擎压缩比例约是MMAP引擎的12倍,2.从时间上看,此次测试100个线程并发,mongodb 3.2 ...

  2. MongoDB 3.0 WiredTiger Compression and Performance

    MongoDB3.0中的压缩选项 在MongoDB 3.0中,WiredTiger为集合提供三个压缩选项: 无压缩 Snappy(默认启用) – 很不错的压缩,有效利用资源 zlib(类似gzip) ...

  3. MongoDB 存储引擎Wiredtiger原理剖析

    今天开始看MongoDB 3.2的文档,发现了这么两句话 Support for Multiple Storage Engines MongoDB supports multiple storage ...

  4. MongoDb Mmap引擎分析

    版权声明:本文由孔德雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/137 来源:腾云阁 https://www.qclo ...

  5. 最牛MongoDB灾难恢复(WiredTiger.wt文件损坏,Mongo无法启动)

    WiredTiger.wt文件是mongoDB的元数据文件,存储了其他数据库表的元数据信息.笔者最近遇到了WiredTiger.wt文件损坏的情况,MongoDB无法启动,数据库中的重要数据危在旦夕. ...

  6. mongodb存储引擎WiredTiger

      MongoDB3.2后默认采用WiredTiger存储引擎. 组成 WiredTiger由三部分组成: Mongos: 负责查询请求的路由和对ShardServer的管理: ConfigServe ...

  7. MongoDB 存储引擎:WiredTiger和In-Memory

    存储引擎(Storage Engine)是MongoDB的核心组件,负责管理数据如何存储在硬盘(Disk)和内存(Memory)上.从MongoDB 3.2 版本开始,MongoDB 支持多数据存储引 ...

  8. [mongodb] WiredTiger Storage Engine

    今天看了mongodb的官方文档中的WiredTiger Storage Engine ,说说我对WiredTiger Storage Engine 的理解! 在mongodb3.2版本以后,wire ...

  9. MongoDB存储引擎选择

    MongoDB存储引擎选择 MongoDB存储引擎构架 插件式存储引擎, MongoDB 3.0引入了插件式存储引擎API,为第三方的存储引擎厂商加入MongoDB提供了方便,这一变化无疑参考了MyS ...

随机推荐

  1. trait优先级 与 使用

    之前一直沒有讲到trait,在此我不得不提一下trait中的优先级: 在trait继承中,优先顺序依次是:来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法. For e ...

  2. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.2——使用Android Testing Support Library进行测试

    问题: 你想要测试app的Android组件. 解决方案: 使用新的测试类实现JUnit风格的测试. 讨论: 测试像activities,services等的Android组件,需要将app部署到连接 ...

  3. 全局最小割模板(定S,不定T,找最小割)

    #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...

  4. 160623、理解 Promise 的工作原理

    Javascript 采用回调函数(callback)来处理异步编程.从同步编程到异步回调编程有一个适应的过程,但是如果出现多层回调嵌套,也就是我们常说的厄运的回调金字塔(Pyramid of Doo ...

  5. CodeForces 666B World Tour(spfa+枚举)

    B. World Tour time limit per test 5 seconds memory limit per test 512 megabytes input standard input ...

  6. Selenium Firefox 官方Webdriver -- Geckodriver 下载地址

    Selenium Firefox 官方Webdriver -- Geckodriver 下载地址 https://github.com/mozilla/geckodriver/releases

  7. 在Editplus中Dev C++配置C++的编译运行环境

    1.首先得下载安装DEV-cpp 2.打开Editplus编辑器,工具->配置自定义工具 3.具体配置 编译C:命令:D:\Dev-Cpp\MinGW64\bin\g++.exe参数:" ...

  8. window下搭建python开发环境

    搭建一个python开发环境比较简单,所以就稍微记录一下. 1.下载python然后安装 2.配置环境变量 3.在eclipse添加PyDev插件 1.下载python 官网:https://www. ...

  9. Storm的组件

    摘自网上 当时写的很好,很详细的介绍了各个组件直接的关系 Storm集群和Hadoop集群表面上看很类似.但是Hadoop上运行的是MapReduce jobs,而在Storm上运行的是拓扑(topo ...

  10. 使用Docker创建Elasticsearch服务

    一.Docker是什么? Docker是一个开源工具,能将一个WEB应用封装在一个轻量级,便携且独立的容器里,然后可以运行在几乎任何服务环境下.Docker的容器能使应用跑在任何服务器上并且表现一致. ...