99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀想使用 MongoDB ,你應該了解這8個方面!
想使用 MongoDB ,你應該了解這8個方面!
2016-04-15
收藏

想使用 MongoDB ,你應該了解這8個方面!

應用性能高低依賴于數(shù)據(jù)庫性能,MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫,旨在為 WEB 應用提供可擴展的高性能數(shù)據(jù)存儲解決方案。MongoDB 是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的產(chǎn)品,是非關系數(shù)據(jù)庫當中功能最豐富,最像關系數(shù)據(jù)庫的。

本文針對實時監(jiān)控 MongoDB 數(shù)據(jù)庫,總結(jié)了一些使用的工具以及需要重點注意的性能方面。

1.實時監(jiān)控 MongoDB 工具

MongoDB 用自己的工具來統(tǒng)計現(xiàn)在運行的 MongoDB 服務器的數(shù)據(jù),并進行實時報告分析:

mongostat:可以展示像 opcounts,lock%,內(nèi)存使用以及副本集更新狀態(tài)等關鍵指標,因為可以實時看到發(fā)生的狀況,所以一般用于故障除疑。

mongotop:mongostat 提供的是全局指標,而 mongotop 則提供追蹤 MongoDB 實例花費在讀寫操作數(shù)據(jù)的時間指標,提供每個集合級別的統(tǒng)計數(shù)據(jù)。

is.status():返回的是當前服務器節(jié)點執(zhí)行操作后副本集的狀態(tài),通過這個來實時查看集群的變化。

sh.status():返回你的分片集群的狀態(tài),尤其是每塊碎片的數(shù)量,顯示關于分片集群的現(xiàn)有區(qū)塊的信息的格式化的報告,如果區(qū)塊大于等于20就不顯示詳細塊信息。

2.內(nèi)存使用量和頁面錯誤

內(nèi)存可能是你可以給 MongoDB 的最重要的資源,因為 Mongodb 是相當吃內(nèi)存的,如果控制不好的話,mongodb會掛掉。。。所以你要確保你給的內(nèi)存總是有足夠的!經(jīng)驗之談是提供符合索引數(shù)量的足夠的 RAM,如果可能的話,為所有數(shù)據(jù)提供足夠的內(nèi)存。

常駐內(nèi)存是這里的關鍵指標,MongoDB 內(nèi)存 mem 記錄了 Mongod 的系統(tǒng)架構(gòu)和內(nèi)存使用。

頁面錯誤和內(nèi)存相關因為頁面錯誤發(fā)生時是 MongoDB 去磁盤里面查找數(shù)據(jù)而不是內(nèi)存中,如果內(nèi)存的數(shù)量不能滿足性能需求,那么你將會看到頁面錯誤,隨著頁面錯誤率的上升,opcounters 最終會低于期望值,所以這時你應該增加可用的 RAM。

3.連接數(shù)

連接到 MongoDB 的每個連接都有助于追蹤系統(tǒng)所需的內(nèi)存的開銷。這最初由 Unix 通過 ulimit 來設置限制,但隨后成為由服務器資源,特別是存儲器限制。

過高數(shù)量的連接數(shù)還可以指明問題,例如你的應用程序代碼打開太多的連接,造成某地方產(chǎn)生很高的 lock% 。

有時客戶端和數(shù)據(jù)庫之間的連接數(shù)超出服務器處理請求的能力,這可能會導致在 MongoDB 環(huán)境的應用程序性能的下降。

4.數(shù)據(jù)庫操作

不多說,實時掌握數(shù)據(jù)庫操作的統(tǒng)計數(shù)據(jù)以及復制和分片操作的詳細信息,確保每秒數(shù)據(jù)庫操作(inserts,query,update,delete,getmore 等 command 命令)的總數(shù)有助于分析和跟蹤數(shù)據(jù)庫的負載。

5.鎖

MongoDB 使用一個全局鎖來確保一致性。但是,如果某些操作是長時間運行的或形成一個隊列,操作等待鎖就會大大降低應用程序性能。

在 MongoDB 2.6版本中,鎖是數(shù)據(jù)庫級別的,一直持續(xù) MongoDB 2.8,寫操作都是一個全局性數(shù)據(jù)庫鎖,MongoDB 使用的這種「readers-writer」鎖,雖然支持并發(fā)但有很大的局限性,當一個讀鎖存在,許多讀操作可以使用這把鎖,然而當一個寫鎖存在時,其它讀寫操作不能使用共享這個鎖,寫入優(yōu)先于讀取,當兩個操作一個讀取和一個寫入正在等待鎖,MongoDB 會授予寫鎖,所以如果寫鎖發(fā)生的過于頻繁,那么你應用的性能出現(xiàn)文件也就不奇怪了。當然如果你的應用中真的有大量的寫操作,可以考慮 Cassandra 數(shù)據(jù)庫。

6.復制集

MongoDB 復制集通過將數(shù)據(jù)部署在多個不同的服務器上,防止因單機故障而造成數(shù)據(jù)的丟失,借助數(shù)據(jù)冗余來提高數(shù)據(jù)的可靠性和安全性。而且還可以通過復制技術(shù)構(gòu)建分布式數(shù)據(jù)庫,提高系統(tǒng)的訪問性能和安全性。

復制集同步數(shù)據(jù)過程是:Primary 節(jié)點寫入數(shù)據(jù),Secondary 通過讀取 Primary 的 oplog 得到復制信息,開始復制數(shù)據(jù)并且將復制信息寫入到自己的 oplog,復制延遲是 Primary 節(jié)點上寫入到 Secondary 節(jié)點讀取 oplog 再寫入操作的延遲,復制延遲可能是一個顯著的問題,嚴重影響 MongoDB 副本集部署,過度復制延遲使「滯后」的節(jié)點將很快成為 Primary ,增加了分布式讀操作不一致的可能性。

7.片鍵

分片是在多臺計算機存儲數(shù)據(jù)記錄的過程中 MongoDB 來滿足數(shù)據(jù)增長需求的特有方式。隨著數(shù)據(jù)量的增加,一臺服務器可能不足以存儲數(shù)據(jù)或提供大量的讀寫操作。分片解決了水平擴展的問題,通過分片,可以添加更多的機器來支持數(shù)據(jù)增長以及滿足讀寫操作的需求。

MongoDB 在集合的水平上分割數(shù)據(jù)和分片,通過一個片鍵( shard key )來分割分片。

為了將一個集合分片,需要選擇一個片關鍵字。一個片鍵是一個索引字段,或是存在于每個集合文檔中的一個復合索引字段。選擇正確的分片鍵可以對應用性能,功能以及數(shù)據(jù)庫和集群的運作有很大的影響,合適的分片鍵選擇取決于你的數(shù)據(jù)的架構(gòu)和應用程序的查詢和寫入數(shù)據(jù)的方式。而且 Mongodb 數(shù)據(jù)庫是否能高效運轉(zhuǎn)也取決于你指定了文檔的哪個字段作為分片字段。由于分片字段都是預先選擇且選定后無法更改的,而且考慮到 MongoDB 縱向擴展能力的限制,選擇時就需要深思熟慮了。分片鍵應該滿足以下條件:

分配 — 分片鍵最糟糕的情況是自增的值(當所有的寫操作將被平衡到單個碎片時就意味著”熱碎片”的發(fā)生,而這就是瓶頸)。理想的分片重點應該讀和寫是盡可能多的”隨機分布”。

理想的片鍵主要功能應該是用于查詢,如果大部分的查詢請求都能夠命中盡可能少的分片那就最好了。

一個好的片鍵使得 MongoDB 分配內(nèi)容變的容易。MongoDB 會根據(jù)你的設置將你的數(shù)據(jù)劃分到有著相同片鍵的數(shù)據(jù)塊 (Chunk) 中。而后這些數(shù)據(jù)塊將根據(jù)片鍵的大致順序分散到副本集中。

8.集成監(jiān)控工具 Cloud Insight

想要看以上數(shù)據(jù)指標,需要一定的監(jiān)控手段,MongoDB 本身有一堆自己的工具,此外還有開源工具以及第三方廠家提供的監(jiān)控軟件,總結(jié)為一點,監(jiān)控很重要,Cloud Insight 全面監(jiān)控 MongoDB,一工具在手,默認60個數(shù)據(jù)指標,MongoDB 發(fā)生什么都了然于心。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }