新年新技術:MongoDB 3.0

jopen 9年前發布 | 14K 次閱讀 MongoDB

原文  http://jindong.io/2015/03/09/new-technique-in-new-year-mongodb3.0/


前一篇介紹了HTTP/2,這一篇簡單介紹下3月3號發布的MongoDB 3.0。

  • What’s new in MongoDB 3.0?
    • 新的存儲引擎WiredTiger
    • MMAPv1引擎的改進
    • Explain
    • 查詢API的改進
    • 索引
    • 工具
    • 新的Java驅動
  • 官方文檔

What’s new in MongoDB 3.0?

新的存儲引擎WiredTiger

MongoDB 3.0的存儲引擎是插件式的,默認為新增的 WiredTiger 。WiredTiger相比原來的MMAPv1引擎的優點:

  • 文檔級別的鎖

這個改進真是盼望已久啊,一直以來MongoDB的鎖粒度都被人詬病,根據我們實際的經驗MongoDB在高并發的讀寫混合場景下性能很差。

  • 更高的壓縮比

新的MongoDB使用了前綴壓縮 (Prefix Compression),大大提高了索引數據的壓縮比。從我們運維同事的簡單的測試結果來看很客觀:

新年新技術:MongoDB 3.0

  • 寫性能提高

官方的說是提高了7-10倍,從我們簡單的測試結果看雖然沒有那么夸張但確實有不小提升:

新年新技術:MongoDB 3.0

我們2.x版本測試結果大概2w不到。

注意:WiredTiger只能用于64位的機器。

MMAPv1引擎的改進

雖然新增了WiredTiger,但是對原來的MMAPv1引擎也做了改進。

  • 新的記錄分配策略

MongoDB 3.0使用 power of 2 allocation 代替原來的動態記錄分配,且棄用了 paddingFactor

原來的分配策略在文檔變大超過初始分配的大小的時候,MongoDB要分配一個新的記錄,并要移動數據和更新索引,導致存儲碎片。 power of 2 allocation 的策略是分配的記錄的大小都是2的次方(32, 64, 128, 256, 512 … 2MB),每個記錄包括文檔本身和額外的空間——padding,這個機制減少了文檔增長的時候記錄重新分配和數據移動的操作。

顯然新的策略在處理大文檔和文檔增長頻繁的場景下效率更高,但如果只有插入操縱和所謂的in-place更新操作(不會增長文檔大小)那么使用這種策略會很浪費空間,因此MongoDB 3.0允許你關閉這種策略。

  • 集合級別的鎖

雖然沒有WiredTiger的鎖粒度小,但是相比之前MMAPv1還是挺重要的一個改進。

Explain

新增 Explain ,類似MySQL的查詢計劃,做性能調優的時候很有用處。

查詢API的改進

  • aggregate()新增$dateToString 操作符,支持將日志轉換為指定的格式

  • 查詢新增 $eq 操作符支持相等判斷

索引

  • 后臺創建索引時不會被dropDatabase,drop和dropIndexes操作中斷。

工具

主要是mongodump和mongorestore功能的改進。

新的Java驅動

簡單的看了下源碼,原來的API仍然兼容,但重寫了很多主要類(MongoCollection,MongoDatabase),新的 MongoIterable接口風格很像Java8的Stream,而且都是泛型的。 提供了異步的MongoClient,新的編碼框架,提高了性能。

官方文檔

MongoDB 3.0

</div>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!