目錄
簡單回顧
首頁 資料庫 MongoDB 一文深析MongoDB儲存引擎(附原理圖)

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

Dec 06, 2022 pm 05:00 PM
mongodb

這篇文章帶大家了解關於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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

navicat過期怎麼辦 navicat過期怎麼辦 Apr 23, 2024 pm 12:12 PM

解決 Navicat 過期問題的方法包括:續約授權;卸載並重新安裝;停用自動更新;使用 Navicat Premium Essentials 免費版;聯絡 Navicat 客戶支援。

navicat怎麼連mongodb navicat怎麼連mongodb Apr 24, 2024 am 11:27 AM

要使用 Navicat 連接 MongoDB,您需要:安裝 Navicat建立 MongoDB 連接:a. 輸入連接名稱、主機位址和連接埠b. 輸入認證資訊(如果需要)新增 SSL 憑證(如果需要)驗證連線儲存連接

nodejs如何實作資料庫 nodejs如何實作資料庫 Apr 21, 2024 am 05:42 AM

在 Node.js 中連接資料庫需要選擇一個資料庫系統(關係型或非關係型),然後使用特定於該類型的模組建立連接。常見模組包括 mysql(MySQL)、pg(PostgreSQL)、mongodb(MongoDB)和 redis(Redis)。建立連線後,可以使用查詢語句檢索資料並使用更新語句修改資料。最後,完成所有操作後必須關閉連線以釋放資源。遵循這些最佳實務可提高效能和安全性,例如使用連線池、參數化查詢和妥善處理錯誤。

nodejs怎麼連接資料庫 nodejs怎麼連接資料庫 Apr 21, 2024 am 05:07 AM

在 Node.js 中連接資料庫的步驟:安裝 MySQL、MongoDB 或 PostgreSQL 套件。建立資料庫連接物件。打開資料庫連接,並處理連接錯誤。

net4.0有什麼用 net4.0有什麼用 May 10, 2024 am 01:09 AM

.NET 4.0 用於創建各種應用程序,它為應用程式開發人員提供了豐富的功能,包括:物件導向程式設計、靈活性、強大的架構、雲端運算整合、效能最佳化、廣泛的程式庫、安全性、可擴展性、資料存取和行動開發支援。

無伺服器架構中Java函數與資料庫的集成 無伺服器架構中Java函數與資料庫的集成 Apr 28, 2024 am 08:57 AM

在無伺服器架構中,Java函數可以與資料庫集成,以存取和操作資料庫中的資料。關鍵步驟包括:建立Java函數、設定環境變數、部署函數和測試函數。透過遵循這些步驟,開發人員可以建立複雜的應用程序,無縫存取儲存在資料庫中的資料。

MongoDB在Debian上的高可用性如何保障 MongoDB在Debian上的高可用性如何保障 Apr 02, 2025 am 07:21 AM

本文介紹如何在Debian系統上構建高可用性的MongoDB數據庫。我們將探討多種方法,確保數據安全和服務持續運行。關鍵策略:副本集(ReplicaSet):利用副本集實現數據冗餘和自動故障轉移。當主節點出現故障時,副本集會自動選舉新的主節點,保證服務的持續可用性。數據備份與恢復:定期使用mongodump命令進行數據庫備份,並製定有效的恢復策略,以應對數據丟失風險。監控與報警:部署監控工具(如Prometheus、Grafana)實時監控MongoDB的運行狀態,並

如何在Debian上配置MongoDB自動擴容 如何在Debian上配置MongoDB自動擴容 Apr 02, 2025 am 07:36 AM

本文介紹如何在Debian系統上配置MongoDB實現自動擴容,主要步驟包括MongoDB副本集的設置和磁盤空間監控。一、MongoDB安裝首先,確保已在Debian系統上安裝MongoDB。使用以下命令安裝:sudoaptupdatesudoaptinstall-ymongodb-org二、配置MongoDB副本集MongoDB副本集確保高可用性和數據冗餘,是實現自動擴容的基礎。啟動MongoDB服務:sudosystemctlstartmongodsudosys

See all articles