告别 MongoDB 2.x 拥抱 3.x 版本的5大理由(转)
据不完全统计,目前还有很多同学在生产环境使用着 MongoDB 2.x 版本的服务,偶尔也会听到一些抱怨,但有些抱怨其实很没道理,因为抱怨的问题在最新版本的MongoDB里已经解决了,你缺的只是一次版本升级。
1. 更安全的数据库
- 3.x 版本默认WriteConcern 为{w:1},2.x 较早的版本为 {w: 0}
- 3.x 默认使用更安全的 SCRAM-SHA-1 算法鉴权,代替了2.x 版本默认的 MONGODB-CR
- 3.x 支持加密引擎对存储的数据进行加密
2. 更高的服务性能
| 版本 | MMAPV1 | WIREDTIGER |
|---|---|---|
| 2.x | DB级别锁 | 不支持 |
| 3.x | 集合级别锁 | 文档级别锁 |
如果你使用2.x存在高并发时的性能问题,那么升级到3.x后,问题会得到极大的改善。
3. 更低的存储成本
| 版本 | MMAPV1 | WIREDTIGER |
|---|---|---|
| 2.x | 不支持数据压缩 | 不支持 |
| 3.x | 不支持数据压缩 | 支持snappy、zlib等压缩 |
很多用户从 2.x 升级到 3.x + wiredtiger 后,惊奇的发现,数据量居然变小了很多,比如原来100G的数据,升级后只有30G了,这是因为wiredtiger默认使用snappy压缩,存储成本通常只有mmapv1的10%-30%左右。
4. 更快的复制
- 3.x 在增量同步数据时,拉取oplog和重放oplog完全流水线化,效率更高
- 3.4 对全量同步做了改进
- 在拷贝数据的时候,同时建立所有的索引(以前版本只有_id索引是在同步数据时建立的)
- 拷贝数据的阶段,secondary 不断拉取新的 oplog,同步效率更高,同时避免了出现oplog不足无法同步的问题。
5. 更简单、高效的分片集群
- MongoDB 3.2 开始,分片集群的Config Server 也是一个复制集,之前的版本则是多个独立的mongod节点,维护起来更简单。
- MongoDB 3.4 开始,分片集群的迁移由Config server负责,并支持同时发起迁移任务,迁移效率更高。
3.x 版本里还增加了其他一些很给力的功能特性,比如
- 部分索引,可以让索引占用的空间更小
- 文档校验,灵活的文档模型下
- Collation,支持本地化语言排序
- 只读视图,让复杂的查询写起来的更简单
- 更强大的aggregation支持
- ……
升级步骤建议
因为2.x 到 3.x 改动很多,在升级的时候,必须先升级到3.0版本,步骤参考Upgrade MongoDB to 3.0,然后从3.0再往更高的版本升级。
虽然通过上述方式,MongoDB能做到不停机的从2.x升级到3.x,但强烈建议升级的时候,使用更保险的方式。
- 建立新的3.x复制集
- mongodump 2.x 复制集的数据
- mongorestore 到3.x复制集
- 等待3.x服务稳定,将2.x复制集下线
版本使用建议 (2016-12-23版)
| 版本 | 建议 |
|---|---|
| 2.x | 强烈建议升级到3.2 |
| 3.0 | 建议升级到3.2 |
| 3.2 | 强烈建议使用 |
| 3.4 | 鼓励使用 |
作者简介
张友东,阿里巴巴技术专家,主要关注分布式存储、Nosql数据库等技术领域,先后参与TFS(淘宝分布式文件系统)、Redis云数据库等项目,目前主要从事MongoDB云数据库的研发工作,致力于让开发者用上最好的MongoDB云服务。
告别 MongoDB 2.x 拥抱 3.x 版本的5大理由(转)的更多相关文章
- 【RMAN】RMAN跨版本恢复(下)--大版本异机恢复
[RMAN]RMAN跨版本恢复(下)--大版本异机恢复 BLOG文档结构图 ORACLE_SID=ORA1024G 关于10g的跨小版本恢复参考:http://blog.chinaunix.net/u ...
- 【RTOS】基于V7开发板的最新版uCOS-III V3.07.03程序模板,含MDK和IAR,支持uC/Probe,与之前版本变化较大
模板下载: 链接:https://pan.baidu.com/s/1_4z_Lg51jMT87RrRM6Qs3g 提取码:2gns 对MDK的AC6也做了支持:https://www.cnblog ...
- 使用MongoDB.NET 2.2.4驱动版本对 Mongodb3.3数据库中GridFS增删改查
Program.cs代码如下: internal class Program { private static void Main(string[] args) { GridFSHelper help ...
- MongoDB GridFS——本质上是将一个文件分割为大小为256KB的chunks 每个chunk里会放md5标识 取文件的时候会将这些chunks合并为一个整体返回
MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等). GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中 ...
- MySQL 5.7开始支持JSON,那还有必要使用MongoDB存JSON吗?请列出你的观点/理由。
一.观点A:支持MySQL存储JSON MongoDB不支持事务,而MySQL支持事务 MySQL相对MongoDB而言,MySQL的稳定性要优于MongoDB MySQL支持多种存储引擎 二.观点B ...
- HBase版本进化史及大版本特性
HBase 2.0 新特性介绍 2018年4月30日HBase发布了2.0的Release版本.HBase的2.0版本承载了太多的Features,共包含4551个Issues,可以说是迄今最大的一个 ...
- CAP 2.3版本发布,支持 MongoDB
前言 经过2个月的调整及测试,CAP 2.3 版本终于发布了,这个版本最大的特性就是对于 MongoDB 的支持,感谢博客园团队的keke同学对于 MongoDB 支持所提供的 PR,相信随着博客园的 ...
- 【转】MongoDB 3.0 正式版本即将发布,强力推荐
MongoDB 今天宣布3.0 正式版本即将发布.这标志着 MongoDB 数据库进入了一个全新的发展阶段,提供强大.灵活而且易于管理的数据库管理系统. MongoDB 3.0 在性能和伸缩性方面都有 ...
- MongoDB.Driver 2.4以上版本 在.NET中的基本操作
MongoDB.Driver是操作mongo数据库的驱动,最近2.0以下版本已经从GitHub和Nuget中移除了,也就是说.NET Framework4.0不再能从官方获取到MongoDB的驱动了, ...
随机推荐
- HashMap 排序
本文章,摘抄自:2018黑马程序最新面试题汇总 已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性.请写一个方法实现 ...
- 【转】html树形菜单控件
Query plugin: Treeview 这个插件能够把无序列表转换成可展开与收缩的Tree. 主页:http://bassistance.de/jQuery-plugins/jquery-pl ...
- 3D全景漫游
全景图共分为三种: ①球面全景图 利用一张全景图围成一个球,自身位置位于球体内.由于图片是矩形,所以最上和最下的缝合处很明显就能够看得出来. 球面全景图是最接近人眼的构建模式,若利用多个立面构建,拼接 ...
- 数据追踪系统Zipkin 及其 Zipkin的php客户端驱动hoopak
Zipkin是Twitter的一个开源项目,是一个致力于收集Twitter所有服务的监控数据的分布式跟踪系统,它提供了收集数据,和查询数据两大接口服务.Zipkin 是一款开源的分布式实时数据追踪系统 ...
- Python知识点入门笔记——Python文件操作、异常处理及random模块使用
文件是存储在外部介质的数据集合,通常可以长久保存,前提是介质不易损坏 Python的绝对路径写法: E:\\编程学习资料\\爬取某社区高清无码大图.py E:/编程学习资料/爬取某社区高清无码大图.p ...
- 海量数据处理算法—BitMap
1. Bit Map算法简介 来自于<编程珠玑>.所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素.由于采用了Bit为单位来存储数据,因此在存储空 ...
- Python虚拟机类机制之填充tp_dict(二)
填充tp_dict 在Python虚拟机类机制之对象模型(一)这一章中,我们介绍了Python的内置类型type如果要完成到class对象的转变,有一个重要的步骤就是填充tp_dict对象,这是一个极 ...
- IOS开发学习笔记011-xcode使用技巧
xcode使用技巧 1.自动生成类 2.断点调试 3.代码段保存 4.注释标记 1.新建类,自动生成两个文件和基本结构 第一步 第二步,选择新建一个类,而不是一个源文件 第三步,书写类名一级自己要 ...
- 简单实现nodejs爬虫工具
约30行代码实现一个简单nodejs爬虫工具,定时抓取网页数据. 使用npm模块 request---简单http请求客户端.(轻量级) fs---nodejs文件模块. index.js var ...
- Wordpress Uncaught TypeError: b(...).not(...).filter(...).mediaelementplayer is not a function
Wordpress 插件页面报错如下图: 原因及解决方法: 引入了两次 jquery.js 或 jquery.js 定义的变量导致报错,删除在插件页面自己引入的 jquery,js 即可解决报错. 大 ...