[mongodb] MMAP 和wiredTiger 的比较
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 的比较的更多相关文章
- mongodb 3.x WiredTiger存储优化测试
http://pan.baidu.com/s/1sk8zekX 总结:1.使用WiredTiger引擎压缩比例约是MMAP引擎的12倍,2.从时间上看,此次测试100个线程并发,mongodb 3.2 ...
- MongoDB 3.0 WiredTiger Compression and Performance
MongoDB3.0中的压缩选项 在MongoDB 3.0中,WiredTiger为集合提供三个压缩选项: 无压缩 Snappy(默认启用) – 很不错的压缩,有效利用资源 zlib(类似gzip) ...
- MongoDB 存储引擎Wiredtiger原理剖析
今天开始看MongoDB 3.2的文档,发现了这么两句话 Support for Multiple Storage Engines MongoDB supports multiple storage ...
- MongoDb Mmap引擎分析
版权声明:本文由孔德雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/137 来源:腾云阁 https://www.qclo ...
- 最牛MongoDB灾难恢复(WiredTiger.wt文件损坏,Mongo无法启动)
WiredTiger.wt文件是mongoDB的元数据文件,存储了其他数据库表的元数据信息.笔者最近遇到了WiredTiger.wt文件损坏的情况,MongoDB无法启动,数据库中的重要数据危在旦夕. ...
- mongodb存储引擎WiredTiger
MongoDB3.2后默认采用WiredTiger存储引擎. 组成 WiredTiger由三部分组成: Mongos: 负责查询请求的路由和对ShardServer的管理: ConfigServe ...
- MongoDB 存储引擎:WiredTiger和In-Memory
存储引擎(Storage Engine)是MongoDB的核心组件,负责管理数据如何存储在硬盘(Disk)和内存(Memory)上.从MongoDB 3.2 版本开始,MongoDB 支持多数据存储引 ...
- [mongodb] WiredTiger Storage Engine
今天看了mongodb的官方文档中的WiredTiger Storage Engine ,说说我对WiredTiger Storage Engine 的理解! 在mongodb3.2版本以后,wire ...
- MongoDB存储引擎选择
MongoDB存储引擎选择 MongoDB存储引擎构架 插件式存储引擎, MongoDB 3.0引入了插件式存储引擎API,为第三方的存储引擎厂商加入MongoDB提供了方便,这一变化无疑参考了MyS ...
随机推荐
- 好久没写blog了 ~ 换了个城市,换了个公司,各种忙碌
最近一直在忙工作交接以及换城市.入职的事情 ~~~ 新公司做C++的比较少,so全上C++11了,写代码各种爽. 最近应该会写一点关于QT的blog , 学到新知识了哈.
- 怎样開始学习ADF和Jdeveroper 11g
先给一些资料能够帮助刚開始学习的人開始学习ADF和Jdeveloper11g 1.首先毫无疑问,你要懂java语言. 能够看看Thinking In Java, 或者原来sun的网上的一些文档Sun' ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.3——使用Robotium进行功能测试
问题: 你想要使用Robotium库测试activity. 解决方案: 增加Robotium依赖,编写自己的测试脚本. 讨论: Android Test Support Library提供类可以操作a ...
- Adapter适配器 final int Id 导致选中的Item不在当前界面
写了上面这么一个横向混动,点击切换到,哪个的Item上就会有一个 常用 的小图标.但是我每次滑动切换到后面 成龙9这个Item,这个 常用的图片,也在 这个上面了,但是他一更新,就变成 等你再 ...
- 10招步骤保护IIS服务器安全
问题 IIS(Internet Information Server)是黑客特别喜欢的目标.因此,对于管理IIS网页服务器的管理员来说,确保服务器安全是一件至关重要的事.IIS 4.0和IIS 5.0 ...
- Jmeter - 分布式部署负载机
1. 原理图: 2.具体操作 ① 负载机 安装JDK.Jmeter[版本与Controller 调度机一致] ② 配置环境变量 ③ 负载机自定义端口号 a.进入Jmeter的bin目录,找到Jmete ...
- [Algorithms] Heap and Heapsort
Recently I reviewed the classic heapsort algorithm and implement it according to contents in Introdu ...
- css3动画效果:1基础
css动画分两种:过渡效果transition .关键帧动画keyframes 一.过渡效果transition 需触发一个事件(如hover.click)时,才改变其css属性. 过渡效果通常在用户 ...
- HTML、DOM和JS的了解
1.HTML.JS.以及DOM的关系的关系说明 关于HTML.JS.以及DOM的关系一直很迷惑,虽然一直听人说,但并未理解. 偶然间,忽然懂了这三者之间的关系. 举例吧: HTML就是最终的页面,是一 ...
- C# 二进制文件操作(内容搜索、数据截取)
private void button2_Click(object sender, EventArgs e) { var list = new List<Frame>(); byte[] ...