2015中國資料庫大會Mongodb分享,2015mongodb

來源:互聯網
上載者:User

2015中國資料庫大會Mongodb分享,2015mongodb
本次分享由MongoDB大中華區技術顧問分享。“老人家”上來就問Mongo是什麼意思,猜中有獎,還號稱自己是最牛的MongoDB專家(在風箏衝浪圈子裡…大家都懂的)。相信大家都不知道,容易理解為芒果(英文應該是mango)。實際上mongo是由這個英文humongous演變來的,表示“巨大的”的意思。
本次分享主要是介紹了MongoDB的3.0版本,對其效能提升進行內幕解密。首先介紹了MongoDB的主要功能:(1)自動複製高可用     MongoDB有3中配置方式:單機、主從和複製集(replicat),複製集可以實現資料讀寫分離,並保持資料庫叢集自動複製實現自動容災和高可用性。(2)二級索引、動態查詢     MongoDB二級索引是用B樹(B-tree)實現的,B樹索引其實就是大多數關係型資料庫的預設索引。  動態查詢:MongoDB支援豐富的查詢運算式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌對象和多維陣列。
(3)彙總架構、MapReduce     MongoDB的彙總架構,就是把一系列特殊操作符作用於一個集合,可以替代MapReduce,並用於一般的彙總操作。(4)企業級安全(5)地理空間索引     關於LBS相關項目,一般會儲存每個地點的經緯度的座標,如果要查詢附近的場所,則需要建立索引來提升查詢效率,MongoDB專門針對這種查詢建立了地理空間索引。(6)GridFS,MongoDB檔案儲存體系統     MongoDB的GridFS功能,效能沒有傳統的檔案系統高,建議使用檔案系統來隱藏檔,再用MongoDB來儲存該檔案的中繼資料。(7)自動分區、水平擴充     自動分區功能支援水平的資料庫叢集,可以動態添加額外的機器。(8)文檔模型  將一個對象資訊用一個文檔儲存起來的模型。我想這也是為啥MongoDB不能使用join聯表查詢的原因吧~
     MongoDB 2.8(2.8版本直接跳到3.0版本。為什麼將2.8命名為3.0?唐建法表示2.8有了極大的增強,用2.8有點委屈,因此MongoDB市場部主導命名為3.0。)版本開始引入支援Latch-free、Non-blocking演算法的WiredTiger儲存引擎MMAP。所以在使用之前必須加上wiredtiger參數。MongoDB3.0提升:(1)寫效能:7x-10x,提升了7到10倍寫速度(2)資料壓縮:30%-80%,是原有資料的30%-80%(3)營運:95%,營運成本減少95%,主要集中在叢集聽說是:因為有了WiredTiger儲存引擎,MongoDB3.0才能有文檔層級的並行控制,即使處理頻繁寫入任務,資料庫依然能維持效能一定的穩定度和可預測性。
這次3.0的發布,MongoDB官方也同步發布了一份效能測試報告,這絕對是MongoDB有史以來第一份官方測試報告。並發量:
在YCSB(NoSQL測壓工具)測試中,MongoDB3.0在多線程、批量插入情境下較之於MongoDB2.6有大約7倍的增長。第二次測試比較了兩個系統上 95%讀取和5%更新的情境。可以看到WiredTiger 有4倍多的輸送量。相比於純插入情境,這次的效能提升沒有那麼顯著,因為寫操作只佔所有操作的5%。最後,對於讀寫操作平衡的情境,可以看到 MongoDB3.0有6倍的並發率。這比剛才看到的95%讀 的4倍提高要好一些,因為這裡有更多的寫操作。
響應時間長度:
他們通過讀密集型的工作負載來比較更新響應延遲的95th和99th百分位元 。在MongoDB3.0中更新延時顯著改善了,在95th和99th百分位元中幾乎減少了90%。

MongoDB2.6和3.0各自的文檔層級並發控制實現:2.6版本使用悲觀鎖,即庫級鎖(實際上並不是我們理解的Lock,用Lock來形容感覺太大太重的,2.6版本的庫級鎖應該理解成latch,即在修改資料時,會加上的一個輕量的行鎖),而3.0使用了樂觀鎖(MVCC):何為悲觀鎖,樂觀鎖?   悲觀鎖:悲觀鎖假定其他使用者企圖訪問或者修改你正在訪問或者修改的對象的機率是很高的。因此在悲觀鎖的環境裡,在你開始改變此對象之前就將該對象鎖住,並且直到你提交了所作的更改之後,才釋放鎖。所以悲觀鎖加鎖的時間會比較長,這樣可能就會長時間的限制其他使用者的訪問,也就是說,悲觀鎖的並發訪問效能不好。所以2.6版本在效能上不去也就是這樣原因。2.6中採用的是庫級鎖,讀操作和寫操作為互斥操作,大大影響了資料庫的整體效能。
3.0版本採用了樂觀鎖:   樂觀鎖:樂觀鎖則認為其他使用者企圖改變你正在修改的對象的幾率是非常小的。因此樂觀鎖直到你準備提交所作的更改時才將對象鎖住。可見樂觀鎖加鎖的時間要比悲觀鎖短,樂觀鎖可以利用較大的鎖粒度獲得較好的並發訪問效能。這也是3.0讀寫效能提升並且實現高並發控制的原因之一。
當然也有需要注意的:(1)沒有32位支援(2)和2.6資料檔案不相容(3)Journal預設不會及時書刷盤,系統宕機的話,會丟失最多100MB Jouranl資料(4)Stall現象還會存在 - 特別是IO資源不夠的情況下(5)Windows上效能指標不如Linux
最後提供MongoDB社區教程:中文社區:http://www.mongoing.com線上教程:http://university.mongodb.com

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.