MongoDB WiredTiger儲存引擎的優勢是什麼?
MMAP儲存引擎自身的天然缺陷(耗費磁碟空間和記憶體空間且難以清理,庫級別鎖)。
1. 文件級別併發控制: WiredTiger透過MVCC實現文件級別的併發控制,即文件級別鎖。這就允許多個客戶端請求同時更新一個集合記憶體的多個文件,再也不需要在排隊等待 庫級別的寫鎖。這在提升資料庫讀寫效能的同時,大大提高了系統的併發處理能力。關於這一點的效果從監控工具mongostat就可以直接體現出來,舊版本 的監控指標會有locked db這一項(該項指標過高是mongo使用人員的一大痛點啊),而新版的mongostat已經看不到了。
2. 磁碟資料壓縮: WiredTiger支援對所有集合和索引進行Block壓縮和字首壓縮(如果資料庫啟用了journal,journal檔案一樣會壓縮),已支援的壓 縮選項包括:不壓縮、Snappy壓縮和Zlib壓縮。這為廣大Mongo使用者們帶來了又一福音,因為很多Mongo資料庫都是因為MMAP儲存引擎消 耗了過多的磁碟空間而不得已進行擴容。其中Snappy壓縮為資料庫的預設壓縮方式,使用者可以根據業務需求選擇適合的壓縮方式。理論上來說,Snappy 壓縮速度快,壓縮率OK,而Zlib壓縮率高,CPU消耗多且速度稍慢。當然,只要選擇使用壓縮,Mongo肯定會佔用更多的CPU使用率,但是考慮到 Mongo本身並不是十分耗CPU,所以啟用壓縮完全是值得的。 此外,WiredTiger儲存方式上也有很大改進。舊版本Mongo在資料庫級別分配檔案,資料庫中的所有集合和索引都混合儲存在資料庫檔案中,所以即 使刪掉了某個集合或者索引,佔用的磁碟空間也很難及時自動回收。WiredTiger在集合和索引級別分配檔案,資料庫中的所有集合和索引均儲存在單獨的 檔案中,集合或者索引刪除後,對應的儲存檔案隨即刪除。當然,因為儲存方式不同,低版本的資料庫無法直接升級到WiredTiger儲存引擎,只能透過導 出匯入資料的方式來實現。
MMAPv1儲存引擎提升
MongoDB 3.0出了引入WiredTiger外,對於原有的儲存引擎MMAP也進行了一定的完善,該儲存引擎依然是3.0版的預設儲存引擎。遺憾的是改進後的 MMAP儲存引擎依舊在資料庫級別分配檔案,資料庫中的所有集合和索引都混合儲存在資料庫檔案中,所以磁碟空間無法及時自動回收的問題如故。
1、鎖粒度由庫級別鎖提升為集合級別鎖
這在一定程度上也能夠提升資料庫的併發處理能力。
2、文件空間分配方式改變
在MMAP儲存引擎中,文件按照寫入順序排列儲存。如果文件更新後長度變長且原有儲存位置後面沒有足夠的空間放下增長部分的資料,那麼文件就要移動到檔案 中的其他位置。這種因更新導致的文件位置移動會嚴重降低寫效能,因為一旦文件發生移動,集合中的所有索引都要同步修改文件新的儲存位置。
MMAP儲存引擎為了減少這種情況的發生提供了兩種文件空間分配方式:基於paddingFactor(填充因子)的自適應分配方式和基於 usePowerOf2Sizes的預分配方式,其中前者為預設方式。第一種方式會基於每個集合中文件更新歷史計算文件更新的平均增長長度,然後在新文件 插入或舊文件移動時填充一部分空間,如當前集合paddingFactor的值為1.5,那麼一個大小為200位元組的文件插入時就會自動在文件後填充 100個位元組的空間。第二種方式則不考慮更新歷史,直接為文件分配2的N次方大小的儲存空間,如一個大小同樣為200位元組的文件插入時直接分配256個字 節的空間。
MongoDB 3.0版本中的MMAPv1拋棄了基於paddingFactor的自適應分配方式,因為這種方式看起來很智慧,但是因為一個集合中的文件的大小不一,所 以經過填充後的空間大小也不一樣。如果集合上的更新操作很多,那麼因為記錄移動後導致的空閒空間會因為大小不一而難以重用。目前基於 usePowerOf2Sizes的預分配方式成為預設的文件空間分配方式,這種分配方式因為分配和回收的空間大小都是2的N次方(當大小超過2MB時則 變為2MB的倍數增長),因此更容易維護和利用。如果某個集合上只有insert或者in-place update,那麼使用者可以透過為該集合設定noPadding標誌位,關閉空間預分配。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-1982510/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB技術分享:WiredTiger儲存引擎MongoDB儲存引擎
- 【Mongo】MongoDB WiredTiger引擎調優技巧MongoDB
- 什麼是YottaChain儲存,為什麼說是未來資料儲存的趨勢?AI
- 物件儲存的優勢有哪些?為什麼要選擇物件儲存?物件
- MongoDB--三、儲存引擎MongoDB儲存引擎
- 什麼是MongoDB,它的優勢和不足以及適用場景是什麼?MongoDB
- 什麼是物件儲存?物件
- MongoDB 儲存引擎與內部原理MongoDB儲存引擎
- Mongodb多儲存引擎支援機制MongoDB儲存引擎
- HBase的儲存格式是什麼?
- SRAM是什麼儲存器
- 什麼是儲存過程儲存過程
- AI儲存的需求是什麼?未來趨勢是怎樣的?AI
- 什麼是docker?docker有什麼優勢?Docker
- 資料庫mysql儲存是什麼?可以存什麼?資料庫MySql
- mongodb 切換wiredtigerMongoDB
- 什麼是HDFS 分散式儲存分散式
- 原生IP是什麼意思?有什麼優勢?
- MyISAM 儲存引擎,Innodb 儲存引擎儲存引擎
- 談談儲存即服務(STaaS)解決方案具有什麼優勢?
- 美國伺服器的優勢是什麼?伺服器
- MySQL資料庫的優勢是什麼?MySql資料庫
- 什麼是透明屏,其工作原理與優勢是什麼
- 什麼是MongoDBMongoDB
- 小談mysql儲存引擎優化MySql儲存引擎優化
- 儲存------什麼是MAID(轉帖)AI
- 什麼是NAS網路附加儲存
- MySQL儲存引擎MyISAM與InnoDB的優劣MySql儲存引擎
- MongoDB儲存引擎-MMAPv1學習總結MongoDB儲存引擎
- Python是什麼?它有怎樣的優勢?Python
- Python優勢是什麼?為什麼要學習?Python
- Python是什麼語言?有什麼優劣勢?Python
- 怎麼檢視mysql的儲存引擎MySql儲存引擎
- OB有問必答 | LSM Tree的技術原理是什麼?OceanBase的儲存引擎為什麼基於LSM Tree?儲存引擎
- 《MySQL 效能優化》之 InnoDB 儲存引擎MySql優化儲存引擎
- 儲存引擎儲存引擎
- MongoDB的特性、優點和不擅長領域是什麼MongoDB
- 共享儲存是什麼意思?與DRBD有什麼區別?