據不完全統計,目前還有很多同學在生產環境使用着 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雲服務。