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. socket.io 中文api

    1. 服务端 io.on('connection',function(socket)); 监听客户端连接,回调函数会传递本次连接的socket io.sockets.emit('String',dat ...

  2. Spring Mvc 上传文件Demo 实例

    返得利购物. 淘宝.京东500家商城合作,包括全面的商城返利网.注冊就送5元,购物就有返利.随时提现. 同学们,新一轮的返利大潮正在慢慢靠近,让购物都认为自己在赚钱.购物,机票.游戏.酒店旅游,地方特 ...

  3. 第一次使用Xamarin就上手 - 安裝Xamarin

    http://xamarintech.blogspot.tw/2013/06/xamarin-xamarin-step-by-step-part1.html http://xamarintech.bl ...

  4. JZOJ.5230【NOIP2017模拟8.5】队伍统计

    Description 现在有n个人要排成一列,编号为1->n .但由于一些不明原因的关系,人与人之间可能存在一些矛盾关系,具体有m条矛盾关系(u,v),表示编号为u的人想要排在编号为v的人前面 ...

  5. iOS xcode6.0使用7.1运行程序 iphone5上下有黑条

    转自:http://stackoverflow.com/questions/25817562/black-bars-appear-in-app-when-targeting-ios7-1-or-7-0 ...

  6. cannot be cast to javax.servletFilter

    java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast ...

  7. jQuery选择器概览

    层级 ancestor descendant parent > child prev + next prev ~ siblings 基本筛选器 :first :not(selector) :ev ...

  8. Minecraft Forge编程入门二 “工艺和食谱”

    从现在开始我们就要开始真正写代码了,还没有来得及配置环境的同学可以参考Minecraft Forge编程入门一 "环境搭建"这篇文章来进行环境搭建. 工艺(Craft)和食谱(Re ...

  9. Java Concurrency In Practice

    线程安全 定义 A class is thread-safe if it behaves correctly when accessed from multiple threads, regardle ...

  10. Python菜鸟之路:Django 缓存

    Django中提供了6种缓存方式: 开发调试 内存 文件 数据库 Memcache缓存(python-memcached模块) Memcache缓存(pylibmc模块) 1. 开发调试 # 此为开始 ...