首頁  >  文章  >  資料庫  >  一文深析MongoDB儲存引擎(附原理圖)

一文深析MongoDB儲存引擎(附原理圖)

藏色散人
藏色散人轉載
2022-12-06 17:00:182948瀏覽

這篇文章帶大家了解關於mongodb的相關知識,介紹一下MongoDB中的儲存引擎,希望對大家有幫助!

簡單回顧

上次我們說到了關於mongodb 的集群,分為主從集群和分片集群,對於分片集群中的分片這裡需要注意如下幾點,一起來回顧一下:

  • 對於熱點資料

某些分片鍵(分片鍵是集合中每個文件中存在的索引欄位或複合索引欄位)會導致所有的讀取或寫入請求 都操作在單一資料區塊或分片上,這樣就會導致單一分片伺服器負荷過重,那麼自增長的分片鍵容易導致寫的問題【推薦:MongoDB視訊教學

  • 對於不可分割的資料塊

對於粗粒度的分片鍵,可能會導致許多文件使用相同的分片鍵

這樣的話這些文件就不能分割為多個資料區塊,這就會限制了mongodb 的均勻分佈資料能力

  • 對於查詢障礙

##分片鍵與查詢是沒有關聯的,這樣會造成糟糕的查詢效能

對於以上註意點,咱們做到心中有數,實際工作中遇到類似的問題,就可以嘗試學著處理了

今天我們簡單了解一下

mongodb 的儲存引擎是個啥

#儲存引擎

說到mongodb 的儲存引擎,我們要知道是在mongodb 3.0 的時候引入了

可插拔儲存引擎的概念

現在主要有這幾個引擎:

    ##WiredTiger 儲存引擎
  • inMemory 儲存引擎
  • 在儲存引擎剛出來的時候,預設是使用的 MMAPV1 儲存引擎的

MMAPV1 引擎,看名字我們大概就知道他是使用的是mmap 來做的,運用的是linux 內存映射的原理

#現在不使用MMAPV1 引擎,是因為

WiredTiger  存儲引擎更優

,例如對比一下WiredTiger  就有以下優勢:

WiredTiger  
    讀寫作業效能較好
  • WiredTiger 能更好的發揮多核心系統的處理能力

    WiredTiger
  • 鎖定的粒度更小

    MMAPV1引擎使用表級鎖,當某個單表上有並發的操作,吞吐就會受到限制

  • 而WiredTiger 使用文件級的鎖,這就帶來並發及吞吐的提高

WiredTiger
    壓縮方式更好
  • WiredTiger 使用前綴壓縮,比起MMAPV1 更節省對記憶體空間的損耗

並且 WiredTiger  也

提供壓縮演算法

一文深析MongoDB儲存引擎(附原理圖)

  • ##資源的消耗
  • WiredTiger 引擎的寫入原理
    #透過上圖我們可以看出, WiredTiger  寫入磁碟的原理也是很簡單的

應用程式請求來到mongodb ,mongodb 做處理,並將結果存入快取中當快取中達到

2 個G

的時候,或當一文深析MongoDB儲存引擎(附原理圖)60 s

定時器到時間的時候,就會將快取中的資料刷到磁碟中去

細心的xdm 就知道,那麼如果現在正好是59 秒,1個多G 的時候,快取中的資料還沒同步到磁碟中,mongodb 就異常掛掉了,那麼mongodb 豈不是會遺失資料?

我們用手指頭都可以想到,
    mongodb 的設計者怎麼會讓這種情況存在,那麼必然會有解決方案
  • ,如下

    如上圖,圖中多了一個 
  • journaling buffer 和 journal 檔案

##journaling buffer

存放mongodb 增刪改指令的緩衝區

journal 檔案

類似於關聯式資料庫中的交易日誌

引入Journaling 的目的是:

Journaling  能夠讓mongodb 資料庫因意外故障後快速復原

Journaling  日誌功能######Journaling  的日誌功能,看起來有點像是redis 中的aof 持久化一樣,也只能說是類似######在mongodb 2.4 的時候,就已經是###預設會開啟Journaling日誌功能### 的,我們啟動mongod 實例的時候,服務就會去檢查是否需要恢復資料#########因此就不會有上述mongodb 遺失資料的情況了#######

另外這裡我們要知道,journaling 的日誌功能,當mongodb 需要進行寫入操作的時候,也就是增,刪,改的時候,journaling 是會寫日誌的,這會影響效能

但是mongodb 讀取操作的時候,是不會記錄到快取中的,因此也不會記錄到journaling  日誌中,因此讀取操作沒有影響

#今天就到這裡,學習所得,若有偏差,還請斧正

#

以上是一文深析MongoDB儲存引擎(附原理圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除