据不完全统计,目前还有很多同学在生产环境使用着 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,但强烈建议升级的时候,使用更保险的方式。

  1. 建立新的3.x复制集
  2. mongodump 2.x 复制集的数据
  3. mongorestore 到3.x复制集
  4. 等待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大理由(转)的更多相关文章

  1. 【RMAN】RMAN跨版本恢复(下)--大版本异机恢复

    [RMAN]RMAN跨版本恢复(下)--大版本异机恢复 BLOG文档结构图 ORACLE_SID=ORA1024G 关于10g的跨小版本恢复参考:http://blog.chinaunix.net/u ...

  2. 【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 ...

  3. 使用MongoDB.NET 2.2.4驱动版本对 Mongodb3.3数据库中GridFS增删改查

    Program.cs代码如下: internal class Program { private static void Main(string[] args) { GridFSHelper help ...

  4. MongoDB GridFS——本质上是将一个文件分割为大小为256KB的chunks 每个chunk里会放md5标识 取文件的时候会将这些chunks合并为一个整体返回

    MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等). GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中 ...

  5. MySQL 5.7开始支持JSON,那还有必要使用MongoDB存JSON吗?请列出你的观点/理由。

    一.观点A:支持MySQL存储JSON MongoDB不支持事务,而MySQL支持事务 MySQL相对MongoDB而言,MySQL的稳定性要优于MongoDB MySQL支持多种存储引擎 二.观点B ...

  6. HBase版本进化史及大版本特性

    HBase 2.0 新特性介绍 2018年4月30日HBase发布了2.0的Release版本.HBase的2.0版本承载了太多的Features,共包含4551个Issues,可以说是迄今最大的一个 ...

  7. CAP 2.3版本发布,支持 MongoDB

    前言 经过2个月的调整及测试,CAP 2.3 版本终于发布了,这个版本最大的特性就是对于 MongoDB 的支持,感谢博客园团队的keke同学对于 MongoDB 支持所提供的 PR,相信随着博客园的 ...

  8. 【转】MongoDB 3.0 正式版本即将发布,强力推荐

    MongoDB 今天宣布3.0 正式版本即将发布.这标志着 MongoDB 数据库进入了一个全新的发展阶段,提供强大.灵活而且易于管理的数据库管理系统. MongoDB 3.0 在性能和伸缩性方面都有 ...

  9. MongoDB.Driver 2.4以上版本 在.NET中的基本操作

    MongoDB.Driver是操作mongo数据库的驱动,最近2.0以下版本已经从GitHub和Nuget中移除了,也就是说.NET Framework4.0不再能从官方获取到MongoDB的驱动了, ...

随机推荐

  1. IE console报错

    需要注意的是,使用console对象查看对象信息,在IE8浏览器下未打开开发人员工具(F12)的情况下 会报'console'未定义错误. 解决办法:1.打开开发人员调试工具(F12)        ...

  2. JavaScript常用八种继承方案

    更新:在常用七种继承方案的基础之上增加了ES6的类继承,所以现在变成八种啦,欢迎加高级前端进阶群一起学习(文末). --- 2018.10.30 1.原型链继承 构造函数.原型和实例之间的关系:每个构 ...

  3. 科学计算库Numpy——文件读写

    读文件 要读取的文件 有分隔符的文件 备注:delimiter分隔符. 有多余行的文件 备注:skiprows去掉几行. 指定列 备注:usecols指定使用哪几列. 写文件 保存后的文件 备注:fm ...

  4. 动态规划:HDU1059-Dividing(多重背包问题的二进制优化)

    Dividing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  5. Visual Studio-IIS Express 支持局域网访问配置

    转自:http://www.itnose.net/detail/6132793.html 注意:本人测试后,发现个问题,不知是我个人的VS问题还是普遍的.就是将配置文件中的新增的节点注释后,会导致页面 ...

  6. Redis实现之AOF持久化

    AOF持久化 除了RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能,与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Red ...

  7. CentOS6.5创建yum源

    昨天给布置个新的需求,做一个Yum仓库,要求是HTTP式的,在某个服务器上搭建个Yum仓库,能让其它的机器有了这个机器的.repo仓库文件后就可以从本地下载安装软件,以前都是下载后直接yum inst ...

  8. 【Rotate List】cpp

    题目: Given a list, rotate the list to the right by k places, where k is non-negative. For example:Giv ...

  9. IOS开发学习笔记028-UITableView单组数据显示代码优化

    1.如果表格中又几百条数据的话,系统会自动加载显示在界面上得数据,逐一加载 添加100个数据到UITableView中 ; i < ; i ++) { NSString *icon = [NSS ...

  10. ASP.NET Core 利用中间件支持跨域请求

    方法1: 在Startup的ConfigureServices()中添加services.AddCors()在Startup的Configure()中添加app.UseCors(); 保证其在app. ...