本篇文章帶大家了解關(guān)于mongodb的相關(guān)知識(shí),介紹一下MongoDB中的存儲(chǔ)引擎,希望對(duì)大家有所幫助!
簡(jiǎn)單回顧
上次我們說(shuō)到了關(guān)于 mongodb 的集群,分為主從集群和分片集群,對(duì)于分片集群中的分片這里需要注意如下幾點(diǎn),一起來(lái)回顧一下:
- 對(duì)于熱點(diǎn)數(shù)據(jù)
某些分片鍵(分片鍵是集合中每個(gè)文檔中存在的索引字段或復(fù)合索引字段)會(huì)導(dǎo)致所有的 讀或者寫請(qǐng)求 都操作在單個(gè)數(shù)據(jù)塊或者分片上,這樣就會(huì)導(dǎo)致單個(gè)分片服務(wù)器負(fù)荷過(guò)重,那么自增長(zhǎng)的分片鍵容易導(dǎo)致寫的問(wèn)題【推薦:MongoDB視頻教程】
- 對(duì)于不可分割的數(shù)據(jù)塊
對(duì)于粗粒度的分片鍵,可能會(huì)導(dǎo)致許多文檔使用相同的分片鍵
這樣的話這些文檔就不能被分割為多個(gè)數(shù)據(jù)塊,這就會(huì)限制了mongodb 的均勻分布數(shù)據(jù)能力
- 對(duì)于查詢障礙
分片鍵與查詢是沒(méi)有關(guān)聯(lián)的,這樣會(huì)造成糟糕的查詢性能
對(duì)于以上注意點(diǎn),咱們做到心中有數(shù),實(shí)際工作中遇到類似的問(wèn)題,就可以嘗試學(xué)著處理了
今天我們簡(jiǎn)單了解一下 mongodb 的存儲(chǔ)引擎是個(gè)啥
存儲(chǔ)引擎
說(shuō)到 mongodb 的存儲(chǔ)引擎,我們要知道是在 mongodb 3.0 的時(shí)候引入了可插拔存儲(chǔ)引擎的概念
現(xiàn)在主要有這幾個(gè)引擎:
- WiredTiger 存儲(chǔ)引擎
- inMemory 存儲(chǔ)引擎
在存儲(chǔ)引擎剛出來(lái)的時(shí)候,默認(rèn)是使用的 ?MMAPV1 存儲(chǔ)引擎的
MMAPV1 引擎,看名字我們大概就知道他是使用的是 mmap 來(lái)做的,運(yùn)用的是 linux 內(nèi)存映射的原理
現(xiàn)在不使用 MMAPV1 引擎,是因?yàn)?WiredTiger ?存儲(chǔ)引擎更優(yōu),例如對(duì)比一下 WiredTiger ?就有如下優(yōu)勢(shì):
- WiredTiger ? 讀寫操作性能更好
WiredTiger 能更好的發(fā)揮多核系統(tǒng)的處理能力
-
WiredTiger 鎖的粒度更小
MMAPV1引擎使用表級(jí)鎖,當(dāng)某個(gè)單表上有并發(fā)的操作,吞吐就會(huì)受到限制
而 WiredTiger 使用文檔級(jí)的鎖 ,這就帶來(lái)并發(fā)及吞吐的提高
- WiredTiger 壓縮方式更好
WiredTiger 使用前綴壓縮,比起 MMAPV1 更節(jié)省對(duì)內(nèi)存空間的損耗
并且 ?WiredTiger ?還提供壓縮算法, 這樣就可以大大降低對(duì)硬盤資源的消耗
WiredTiger 引擎 的寫入原理
通過(guò)上圖我們可以看出, WiredTiger ?寫入磁盤的原理也是很簡(jiǎn)單的
- 應(yīng)用請(qǐng)求來(lái)到 mongodb ,mongodb 做處理,并將結(jié)果存入緩存中
- 當(dāng)緩存中達(dá)到 2 個(gè) G 的時(shí)候,或者 當(dāng) 60 s 定時(shí)器到時(shí)間的時(shí)候,就會(huì)將緩存中的數(shù)據(jù)刷到磁盤中去
細(xì)心的 xdm 就知道,那么如果現(xiàn)在正好是 59 秒,1個(gè)多 G 的時(shí)候,緩存中的數(shù)據(jù)還沒(méi)有同步到磁盤中,mongodb 就異常掛掉了,那么 mongodb 豈不是會(huì)丟失數(shù)據(jù)?
我們用手指頭都可以想到,mongodb 的設(shè)計(jì)者怎么會(huì)讓這種情況存在,那么必然會(huì)有解決方案,如下
如上圖,圖中多了一個(gè) ?journaling buffer
和 ?journal 文件
- journaling buffer
存放 mongodb 增刪改 指令的緩沖區(qū)
- journal 文件
類似于關(guān)系數(shù)據(jù)庫(kù)中的事務(wù)日志
引入 Journaling 的目的是:
Journaling ?能夠使 mongodb 數(shù)據(jù)庫(kù)由于意外故障后快速恢復(fù)
Journaling ?日志功能
Journaling ?的日志功能,看上去有點(diǎn)像是 redis 中的 aof 持久化一樣,也只能說(shuō)是類似
在 mongodb 2.4 的時(shí)候,就已經(jīng)是 默認(rèn)會(huì)開(kāi)啟 Journaling日志功能 的,我們啟動(dòng) mongod 實(shí)例的時(shí)候,服務(wù)就會(huì)去檢查是否需要恢復(fù)數(shù)據(jù)
因此就不會(huì)有上述 mongodb 丟數(shù)據(jù)的情況了
另外這里我們要知道,journaling 的日志功能,當(dāng) mongodb 需要進(jìn)行寫操作的時(shí)候,也就是 增,刪,改的時(shí)候,journaling 是會(huì)寫日志的,這會(huì)影響性能
但是 mongodb 讀取操作的時(shí)候,是不會(huì)記錄到緩存中的,因此也不會(huì)記錄到 journaling ?日志中,因此讀操作沒(méi)有影響
今天就到這里,學(xué)習(xí)所得,若有偏差,還請(qǐng)斧正
以上是一文深析MongoDB存儲(chǔ)引擎(附原理圖)的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)代碼編輯軟件(SublimeText3)

在開(kāi)發(fā)一個(gè)電商網(wǎng)站時(shí),我遇到了一個(gè)棘手的問(wèn)題:如何為用戶提供個(gè)性化的商品推薦。最初,我嘗試了一些簡(jiǎn)單的推薦算法,但效果并不理想,用戶的滿意度也因此受到影響。為了提升推薦系統(tǒng)的精度和效率,我決定采用更專業(yè)的解決方案。最終,我通過(guò)Composer安裝了andres-montanez/recommendations-bundle,這不僅解決了我的問(wèn)題,還大大提升了推薦系統(tǒng)的性能??梢酝ㄟ^(guò)一下地址學(xué)習(xí)composer:學(xué)習(xí)地址

CentOS系統(tǒng)上GitLab數(shù)據(jù)庫(kù)部署指南選擇合適的數(shù)據(jù)庫(kù)是成功部署GitLab的關(guān)鍵步驟。GitLab兼容多種數(shù)據(jù)庫(kù),包括MySQL、PostgreSQL和MongoDB。本文將詳細(xì)介紹如何選擇并配置這些數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)選擇建議MySQL:一款廣泛應(yīng)用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),性能穩(wěn)定,適用于大多數(shù)GitLab部署場(chǎng)景。PostgreSQL:功能強(qiáng)大的開(kāi)源RDBMS,支持復(fù)雜查詢和高級(jí)特性,適合處理大型數(shù)據(jù)集。MongoDB:流行的NoSQL數(shù)據(jù)庫(kù),擅長(zhǎng)處理海

MongoDB適合處理大規(guī)模非結(jié)構(gòu)化數(shù)據(jù),Oracle適用于需要事務(wù)一致性的企業(yè)級(jí)應(yīng)用。 1.MongoDB提供靈活性和高性能,適合處理用戶行為數(shù)據(jù)。 2.Oracle以穩(wěn)定性和強(qiáng)大功能著稱,適用于金融系統(tǒng)。 3.MongoDB使用文檔模型,Oracle使用關(guān)系模型。 4.MongoDB適合社交媒體應(yīng)用,Oracle適合企業(yè)級(jí)應(yīng)用。

MongoDB適合非結(jié)構(gòu)化數(shù)據(jù)和高擴(kuò)展性需求,Oracle適合需要嚴(yán)格數(shù)據(jù)一致性的場(chǎng)景。1.MongoDB靈活存儲(chǔ)不同結(jié)構(gòu)數(shù)據(jù),適合社交媒體和物聯(lián)網(wǎng)。2.Oracle結(jié)構(gòu)化數(shù)據(jù)模型確保數(shù)據(jù)完整性,適用于金融交易。3.MongoDB通過(guò)分片橫向擴(kuò)展,Oracle通過(guò)RAC縱向擴(kuò)展。4.MongoDB維護(hù)成本低,Oracle維護(hù)成本高但支持完善。

CentOS系統(tǒng)下MongoDB高效備份策略詳解本文將詳細(xì)介紹在CentOS系統(tǒng)上實(shí)施MongoDB備份的多種策略,以確保數(shù)據(jù)安全和業(yè)務(wù)連續(xù)性。我們將涵蓋手動(dòng)備份、定時(shí)備份、自動(dòng)化腳本備份以及Docker容器環(huán)境下的備份方法,并提供備份文件管理的最佳實(shí)踐。手動(dòng)備份:利用mongodump命令進(jìn)行手動(dòng)全量備份,例如:mongodump-hlocalhost:27017-u用戶名-p密碼-d數(shù)據(jù)庫(kù)名稱-o/備份目錄此命令會(huì)將指定數(shù)據(jù)庫(kù)的數(shù)據(jù)及元數(shù)據(jù)導(dǎo)出到指定的備份目錄。

要設(shè)置 MongoDB 用戶,請(qǐng)按照以下步驟操作:1. 連接到服務(wù)器并創(chuàng)建管理員用戶。2. 創(chuàng)建要授予用戶訪問(wèn)權(quán)限的數(shù)據(jù)庫(kù)。3. 使用 createUser 命令創(chuàng)建用戶并指定其角色和數(shù)據(jù)庫(kù)訪問(wèn)權(quán)限。4. 使用 getUsers 命令檢查創(chuàng)建的用戶。5. 可選地設(shè)置其他權(quán)限或授予用戶對(duì)特定集合的權(quán)限。

要啟動(dòng) MongoDB 服務(wù)器:在 Unix 系統(tǒng)中,運(yùn)行 mongod 命令。在 Windows 系統(tǒng)中,運(yùn)行 mongod.exe 命令。可選:使用 --dbpath、--port、--auth 或 --replSet 選項(xiàng)設(shè)置配置。使用 mongo 命令驗(yàn)證連接是否成功。

在Debian系統(tǒng)上為MongoDB數(shù)據(jù)庫(kù)加密,需要遵循以下步驟:第一步:安裝MongoDB首先,確保您的Debian系統(tǒng)已安裝MongoDB。如果沒(méi)有,請(qǐng)參考MongoDB官方文檔進(jìn)行安裝:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/第二步:生成加密密鑰文件創(chuàng)建一個(gè)包含加密密鑰的文件,并設(shè)置正確的權(quán)限:ddif=/dev/urandomof=/etc/mongodb-keyfilebs=512
