
想使用 MongoDB ,你應(yīng)該了解這8個方面!
應(yīng)用性能高低依賴于數(shù)據(jù)庫性能,MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫,旨在為 WEB 應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。MongoDB 是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。
本文針對實時監(jiān)控 MongoDB 數(shù)據(jù)庫,總結(jié)了一些使用的工具以及需要重點注意的性能方面。
MongoDB 用自己的工具來統(tǒng)計現(xiàn)在運行的 MongoDB 服務(wù)器的數(shù)據(jù),并進行實時報告分析:
mongostat:可以展示像 opcounts,lock%,內(nèi)存使用以及副本集更新狀態(tài)等關(guān)鍵指標(biāo),因為可以實時看到發(fā)生的狀況,所以一般用于故障除疑。
mongotop:mongostat 提供的是全局指標(biāo),而 mongotop 則提供追蹤 MongoDB 實例花費在讀寫操作數(shù)據(jù)的時間指標(biāo),提供每個集合級別的統(tǒng)計數(shù)據(jù)。
is.status():返回的是當(dāng)前服務(wù)器節(jié)點執(zhí)行操作后副本集的狀態(tài),通過這個來實時查看集群的變化。
sh.status():返回你的分片集群的狀態(tài),尤其是每塊碎片的數(shù)量,顯示關(guān)于分片集群的現(xiàn)有區(qū)塊的信息的格式化的報告,如果區(qū)塊大于等于20就不顯示詳細塊信息。
內(nèi)存可能是你可以給 MongoDB 的最重要的資源,因為 Mongodb 是相當(dāng)吃內(nèi)存的,如果控制不好的話,mongodb會掛掉。。。所以你要確保你給的內(nèi)存總是有足夠的!經(jīng)驗之談是提供符合索引數(shù)量的足夠的 RAM,如果可能的話,為所有數(shù)據(jù)提供足夠的內(nèi)存。
常駐內(nèi)存是這里的關(guān)鍵指標(biāo),MongoDB 內(nèi)存 mem 記錄了 Mongod 的系統(tǒng)架構(gòu)和內(nèi)存使用。
頁面錯誤和內(nèi)存相關(guān)因為頁面錯誤發(fā)生時是 MongoDB 去磁盤里面查找數(shù)據(jù)而不是內(nèi)存中,如果內(nèi)存的數(shù)量不能滿足性能需求,那么你將會看到頁面錯誤,隨著頁面錯誤率的上升,opcounters 最終會低于期望值,所以這時你應(yīng)該增加可用的 RAM。
連接到 MongoDB 的每個連接都有助于追蹤系統(tǒng)所需的內(nèi)存的開銷。這最初由 Unix 通過 ulimit 來設(shè)置限制,但隨后成為由服務(wù)器資源,特別是存儲器限制。
過高數(shù)量的連接數(shù)還可以指明問題,例如你的應(yīng)用程序代碼打開太多的連接,造成某地方產(chǎn)生很高的 lock% 。
有時客戶端和數(shù)據(jù)庫之間的連接數(shù)超出服務(wù)器處理請求的能力,這可能會導(dǎo)致在 MongoDB 環(huán)境的應(yīng)用程序性能的下降。
不多說,實時掌握數(shù)據(jù)庫操作的統(tǒng)計數(shù)據(jù)以及復(fù)制和分片操作的詳細信息,確保每秒數(shù)據(jù)庫操作(inserts,query,update,delete,getmore 等 command 命令)的總數(shù)有助于分析和跟蹤數(shù)據(jù)庫的負(fù)載。
MongoDB 使用一個全局鎖來確保一致性。但是,如果某些操作是長時間運行的或形成一個隊列,操作等待鎖就會大大降低應(yīng)用程序性能。
在 MongoDB 2.6版本中,鎖是數(shù)據(jù)庫級別的,一直持續(xù) MongoDB 2.8,寫操作都是一個全局性數(shù)據(jù)庫鎖,MongoDB 使用的這種「readers-writer」鎖,雖然支持并發(fā)但有很大的局限性,當(dāng)一個讀鎖存在,許多讀操作可以使用這把鎖,然而當(dāng)一個寫鎖存在時,其它讀寫操作不能使用共享這個鎖,寫入優(yōu)先于讀取,當(dāng)兩個操作一個讀取和一個寫入正在等待鎖,MongoDB 會授予寫鎖,所以如果寫鎖發(fā)生的過于頻繁,那么你應(yīng)用的性能出現(xiàn)文件也就不奇怪了。當(dāng)然如果你的應(yīng)用中真的有大量的寫操作,可以考慮 Cassandra 數(shù)據(jù)庫。
MongoDB 復(fù)制集通過將數(shù)據(jù)部署在多個不同的服務(wù)器上,防止因單機故障而造成數(shù)據(jù)的丟失,借助數(shù)據(jù)冗余來提高數(shù)據(jù)的可靠性和安全性。而且還可以通過復(fù)制技術(shù)構(gòu)建分布式數(shù)據(jù)庫,提高系統(tǒng)的訪問性能和安全性。
復(fù)制集同步數(shù)據(jù)過程是:Primary 節(jié)點寫入數(shù)據(jù),Secondary 通過讀取 Primary 的 oplog 得到復(fù)制信息,開始復(fù)制數(shù)據(jù)并且將復(fù)制信息寫入到自己的 oplog,復(fù)制延遲是 Primary 節(jié)點上寫入到 Secondary 節(jié)點讀取 oplog 再寫入操作的延遲,復(fù)制延遲可能是一個顯著的問題,嚴(yán)重影響 MongoDB 副本集部署,過度復(fù)制延遲使「滯后」的節(jié)點將很快成為 Primary ,增加了分布式讀操作不一致的可能性。
分片是在多臺計算機存儲數(shù)據(jù)記錄的過程中 MongoDB 來滿足數(shù)據(jù)增長需求的特有方式。隨著數(shù)據(jù)量的增加,一臺服務(wù)器可能不足以存儲數(shù)據(jù)或提供大量的讀寫操作。分片解決了水平擴展的問題,通過分片,可以添加更多的機器來支持?jǐn)?shù)據(jù)增長以及滿足讀寫操作的需求。
MongoDB 在集合的水平上分割數(shù)據(jù)和分片,通過一個片鍵( shard key )來分割分片。
為了將一個集合分片,需要選擇一個片關(guān)鍵字。一個片鍵是一個索引字段,或是存在于每個集合文檔中的一個復(fù)合索引字段。選擇正確的分片鍵可以對應(yīng)用性能,功能以及數(shù)據(jù)庫和集群的運作有很大的影響,合適的分片鍵選擇取決于你的數(shù)據(jù)的架構(gòu)和應(yīng)用程序的查詢和寫入數(shù)據(jù)的方式。而且 Mongodb 數(shù)據(jù)庫是否能高效運轉(zhuǎn)也取決于你指定了文檔的哪個字段作為分片字段。由于分片字段都是預(yù)先選擇且選定后無法更改的,而且考慮到 MongoDB 縱向擴展能力的限制,選擇時就需要深思熟慮了。分片鍵應(yīng)該滿足以下條件:
分配 — 分片鍵最糟糕的情況是自增的值(當(dāng)所有的寫操作將被平衡到單個碎片時就意味著”熱碎片”的發(fā)生,而這就是瓶頸)。理想的分片重點應(yīng)該讀和寫是盡可能多的”隨機分布”。
理想的片鍵主要功能應(yīng)該是用于查詢,如果大部分的查詢請求都能夠命中盡可能少的分片那就最好了。
一個好的片鍵使得 MongoDB 分配內(nèi)容變的容易。MongoDB 會根據(jù)你的設(shè)置將你的數(shù)據(jù)劃分到有著相同片鍵的數(shù)據(jù)塊 (Chunk) 中。而后這些數(shù)據(jù)塊將根據(jù)片鍵的大致順序分散到副本集中。
想要看以上數(shù)據(jù)指標(biāo),需要一定的監(jiān)控手段,MongoDB 本身有一堆自己的工具,此外還有開源工具以及第三方廠家提供的監(jiān)控軟件,總結(jié)為一點,監(jiān)控很重要,Cloud Insight 全面監(jiān)控 MongoDB,一工具在手,默認(rèn)60個數(shù)據(jù)指標(biāo),MongoDB 發(fā)生什么都了然于心。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10