1. 程式人生 > >mongodb的儲存引擎

mongodb的儲存引擎

mongodb版本為3.4

mongodb儲存引起的一些概述

儲存引擎是MongoDB的核心元件,負責管理資料如何儲存在硬碟和記憶體上。從MongoDB 3.2 版本開始,MongoDB 支援多資料儲存引擎,MongoDB支援的儲存引擎有:WiredTiger,MMAPv1和In-Memory。

從mongodb3.2開始預設的儲存引擎是WiredTiger,3.3版本之前的預設儲存引擎是MMAPv1,mongodb4.x版本不再支援MMAPv1儲存引擎。

MongoDB不僅能將資料持久化儲存到硬碟檔案中,而且還能將資料只儲存到記憶體中;In-Memory儲存引擎用於將資料只儲存在記憶體中,只將少量的元資料和診斷日誌(Diagnostic)儲存到硬碟檔案中,由於不需要Disk的IO操作,就能獲取索取的資料,In-Memory儲存引擎大幅度降低了資料查詢的延遲(Latency)

WiredTiger儲存引擎

從mongodb3.2開始mongodb預設支援WiredTiger儲存引擎,對於3.2之前的版本可以使用引數指定儲存引擎。

storage:
   engine: wiredTiger
wireTiger:
[儲存引擎的引數設定]

WiredTiger是各種操作應用的理想選擇,因此是MongoDB的預設儲存引擎。它應該是所有新應用程式的起點,除了您需要記憶體或加密儲存引擎的特定功能的情況。

WiredTiger儲存引擎的主要優勢:

最大化可用快取: WiredTiger最大限度地利用可用記憶體作為快取來減少I / O瓶頸。

使用了兩個快取:WiredTiger快取和檔案系統快取。WiredTiger快取儲存未壓縮的資料並提供類似記憶體的效能。作業系統的檔案系統快取儲存壓縮資料。當在WiredTiger快取中找不到資料時,WiredTiger將在檔案系統快取中查詢資料。

 

【圖片】 

在移動到WiredTiger快取之前,在檔案系統快取中找到的資料首先經過解壓縮過程。

WiredTiger快取在儲存儘可能多的工作集時表現最佳。但是,為需要它的其他程序(如作業系統,包括檔案系統快取)保留記憶體也很重要。這也包括MongoDB本身,整體上消耗的記憶體比WiredTiger主動使用的記憶體多。



MongoDB預設為WiredTiger快取大小約為RAM的60%離開檔案系統快取的最小量是可用記憶體的20%。任何較低的作業系統都可能受限於資源。

高吞吐量: WiredTiger使用“寫入時複製” - 當文件更新時,WiredTiger將製作文件的新副本並確定最新版本以返回給讀者。此方法允許多個客戶端同時修改集合中的不同文件,從而實現更高的併發性和吞吐量。當應用程式使用具有多個核心的主機(越多越好)並且多個執行緒正在寫入不同的文件時,實現最佳寫入效能。

減少儲存空間並改善磁碟IOP: WiredTiger使用壓縮演算法來減少磁碟上儲存的資料量。不僅儲存減少了,而且隨著從磁碟讀取或寫入更少的位,IOP效能也會提高。某些型別的檔案比其他檔案壓縮得更好。文字檔案是高度可壓縮的,而二進位制資料可能不是可壓縮的,因為它可能已經被編碼和壓縮。使用壓縮時,WiredTiger會產生額外的CPU週期,但使用者可以配置壓縮方案以優化CPU開銷與壓縮比。Snappy是預設的壓縮引擎,在高壓縮率和低CPU開銷之間提供了良好的平衡。Zlib將實現更高的壓縮比,但會產生額外的CPU週期。

壓縮(索引和journals日誌):索引可以在記憶體和磁碟上壓縮。WiredTiger利用字首壓縮來壓縮索引,節省RAM使用以及釋放儲存IOP。預設情況下,使用Snappy壓縮壓縮journals日誌。

多核可擴充套件性:隨著CPU製造商縮小到更小的平版印刷,功耗變得越來越成問題,處理器趨勢已轉向多核架構,以維持摩爾定律的節奏。WiredTiger在設計時考慮了現代的多核架構,並提供跨多核系統的可擴充套件性。危險指標,無鎖演算法和快速鎖存等程式設計技術可最大限度地減少執行緒之間的爭用。執行緒可以執行操作而不會相互阻塞 - 從而減少執行緒爭用,更好的併發性和更高的吞吐量。

 WiredTiger允許使用者為其讀取指定隔離級別。讀取操作可以返回大部分副本集已接受或提交到磁碟的資料檢視。這樣可以保證應用程式只讀取在發生故障時仍然存在的資料,並且在將新的副本整合員提升為主要成員時不會回滾。

【以上關於wiredTiger儲存引擎的介紹來自官方文件的一片部落格:儲存引擎

mongodb的儲存引擎詳細介紹: https://www.cnblogs.com/phpandmysql/p/7763420.html