[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 ...
随机推荐
- Android之怎样强制横竖屏显示
2 强制横屏竖屏显示(不依据手机传感器调整) 在清单文件AndroidManifest.xml中 在<activity 里面增加: android:screenOrientation=&quo ...
- 并发容器J.U.C --组件FutureTask、ForkJoin、BlockingQueue
FutureTask FutureTask是J.U.C中的类,是一个可删除的异步计算类.这个类提供了Future接口的的基本实现,使用相关方法启动和取消计算,查询计算是否完成,并检索计算结果.只有在计 ...
- STL中的排序算法
本文转自:STL中的排序算法 1. 所有STL sort算法函数的名字列表: 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 ...
- java高精度hdu4043
可以推出公式 f[n]=f[n-1]+f[n-1]*2*(n-1) f[1]=1; 数据量很大,最后又要进行gcd操作,java里竟然自带了一个gcd的函数,为了避免求大数取余和大数除法操作,还是用j ...
- 【BZOJ2055】80人环游世界 有上下界费用流
[BZOJ2055]80人环游世界 Description 想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么 一个 ...
- zookeeper Java API 简单操作示例
本文主要介绍如何在java IDE中如何应用使用客户端与zookeeper服务器通信. 首先搭建maven环境,并在pom文件中加入zookeeper引用包: <!-- https://mvnr ...
- mysql中给表添加字段
添加字段: 格式:alter table 表名 add 字段名 字段类型 ; 如:给表stu_info 添加一个字段type,类型为varchar(30) alter table stu_info a ...
- Group By 与 Count
select UserID,COUNT(0) From [Order] a Group By UserID UserID (无列名)1 5 2 ...
- iOS10以前的本地通知和远程通知
一.简介 分为本地推送和远程推送2种.可以在应用没有打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用:如果用户不同意则下次打开程 ...
- C#生成Windows服务
1. 新建一个项目,或者从选择当前解决方案--右键-添加--新建项目 2. 选择Visual C#项目-->Windows 服务,填写要创建的服务名称(修改默认的WindowService1成为 ...