中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳細介紹MongoDB

發布時間:2020-05-27 16:06:47 來源:億速云 閱讀:588 作者:鴿子 欄目:軟件技術

一、概述

(1)版本歷程

  • 0.x 起步節點
  • 1.x 支持復制集和分片
  • 2.x 更加豐富的數據庫功能
  • 3.x 合并了一家專門做數據庫引擎的Wired Tiger公司,更加完善的周邊生態環境
  • 4.x 支持分布式事務

MongoDB的正式版本都是偶數版本,x.x.x,主要版本(x.x)大約每年升級一次,小版本主要是修復問題,通常1-2個月發布一次。

MongoDB支持原生高可用:Application通過Driver連接到Primary節點,一個Primary節點連接多個Secondary節點。

MongoDB支持水平擴展,分片集群:Driver連接多個Mongos,Mongos連接多個Shard,每個Shard都是一個Primary和多個Secondary。

詳細介紹MongoDB

二、復制集

主要用于實現服務的高可用

(1)特征

MongoDB的復制集主要具備如下特征:

  • 快速復制:數據寫入時將數據迅速復制到另一個節點。
  • 故障轉移:在接受寫入的節點發生故障的時候自動選擇另一個新的節點代替。
  • 其他作用:數據分發、讀寫分離、異地容災。

(2)MongoDB的數據復制原理

  • 一個修改操作會被記錄到oplog,有一個線程監聽oplog,如果有變動就會將這個變動應用到其他的數據庫上。
  • 從節點在主節點上打開一個tailable游標,不斷獲取新加入的oplog,并在從庫上回放

(3)節點間選舉

  • 一個典型的復制集由3個以上具有投票權的節點構成,一個Primary接受寫入操作和選舉時投票,兩個Secondary復制Primary節點數據和選舉時投票。

  • 具有投票權的節點兩兩發送心跳數據,主節點5次沒有收到心跳被定義為失聯狀態。然后MongoDB基于Raft協議進行選舉。
  • Replica Set中最多50個節點,具有投票權的節點最多只有7個
  • 影響選舉的因素:整個集群必須有大多數節點存活
  • 被選舉為主節點的條件
    • 能夠與多數節點建立連接
    • 具有較新的oplog
    • 具有較高的優先級(可以配置)
  • 常用的配置選項
    • 是否具有投票權(v參數):有就會參與投票。
    • 優先級(priority參數):優先級越高的節點越優先稱為主節點。優先級為0的節點無法成為主節點。
    • 隱藏(hidden參數):復制數據,但是對應用不可見。隱藏節點具有投票權,但是優先級必須為0。
    • 延遲(slaveDelay參數):復制N秒之前的數據,報紙與主節點的時間差
  • 復制集的部署事項:主從數據庫配置一樣,硬件具有獨立性,軟件版本一致。

三、分片集群

詳細介紹MongoDB

(1)mongos路由節點

  • 提供集群的單一入口
  • 轉發應用端請求
  • 選擇合適的數據節點進行讀寫
  • 合并多個數據額節點的返回結果
  • 無狀態
  • 至少有兩個mongos節點

(2)config配置目錄節點

  • 提供集群元數據的存儲,分片數據分布的映射

(3)數據節點

  • 以復制集為單位
  • 橫向擴展
  • 最大1024個分片
  • 分片之間數據不能重復
  • 所有分片在一起才可以完成工作

(4)特點

  • 對應用全透明,無須特殊處理
  • 數據自動均衡
  • 動態擴容,無須下線
  • 提供三種分片方式

(5)分片集群的3中方式

  • 基于范圍:片鍵范圍查詢性能好,優化讀,數據分布可能不均勻,容易產生熱點。
  • 基于Hash:數據分布均勻,寫優化,范圍查詢效率低,適用于日志,物聯網高并發場景。
  • 基于Zone:按照地域、時效等屬性分為多個Zone。一個集合(collection)中的所有的對象都被存放到一個塊(chunk)中,默認塊的大小是 64MB。當數據容量超過64 MB,才有可能實施一個遷移

(6)合理的架構

  • 一個分片不超過3TB,盡量保證在2TB。常用索引必須容納進內存。

  • 需要多少個分片?

    分片數量=max(所需存儲容量/單節點掛載容量, 工作集大小/單服務器內存容量0.6, 并發總量/單節點并發量0.7)

  • 如何選擇片鍵?

    • 基數,基數越大越好,比如百家姓要比年齡基數大。
    • 寫分布,數據分布不均勻,比如學生的年齡。
    • 定向性,mongos可以直接將數據定位。

四、災備與恢復

(1)備份

mongodump -h HostName:Port -d DatabaseName -c CollectionName

使用--oplog參數實現增量備份。復制從mongodump從開始執行到完成所有的oplog。會輸出到dump/oplog.bson文件。

(2)恢復

mongostore -h HostName:port -d DatabaseName -c CollectionName Filename.bson

使用--oplogReplay參數實現增量恢復。通過—-oplogLimit參數和--oplogFile參數實現特定時間點的恢復。

在分片集群的備份中,多個分片可能在發生數據遷移和均衡,導致備份的數據發生錯亂,可以通過停止均衡器解決。

(3)備份方案

  • 延遲節點備份
  • 全量備份+OpLog增量備份
    • mongodump
    • 復制數據文件
    • 文件系統快照

五、事務支持

(1)寫事務

writeConcern參數:決定一個寫操作落到多少個節點上才算成功。

  • w參數:
    • 1:默認,要求寫操作已經傳播到獨立的mongo實例或者副本集的Primary成員
    • 0:不要求確認寫操作。
    • majority:要求寫操作已經傳播到大多數具有存儲數據且具有投票權的成員。
  • j參數:
    • true:寫操作落到journal算成功。
    • false:寫操作落到內存算成功。

(2)讀事務

  • 從哪里讀?位置
    • readPreference參數控制,取值如下:
    • Primary(默認):主節點,一般用戶下訂單
    • PrimaryPrefered:主節點優先,一般用戶查訂單
    • Secondary:從節點,一般用于報表
    • SecondaryPrefered:優先從節點。
    • nearest:就近原則,由PingTime決定,一般用于上傳圖片分發到全球
    • 結合使用Tag定向某些節點:通過指定{"purpose": ""}實現。
  • 什么樣的數據可以讀?隔離性
    • readConcern參數控制,取值如下:
    • avaliable:讀取所有可用的數據。
    • local(默認):讀取所有可用并且屬于當前分片的數據。
    • majority:讀取大多數節點上提交完成的數據,防止臟讀。
      • 實現機制:節點使用MVCC機制維護多個版本,每個大多數節點確認過的版本數據作為一個快照,MongoDB通過維護多個快照實現鏈接不同的版本,快照維持在不再使用。
    • linearizable:線性化讀取文檔,保證之前所有寫入的,能夠保證出現網絡分區的時候讀取的安全,因為在讀取的時候會檢查所有節點。
    • snapshot:讀取最近快照中的數據。
    • 如何安全的讀寫?
    • readConcern設置為majority
    • writeConcern設置為majority

(3)多文檔事務MongoDB的ACID

  • A=4.0版本的復制集多表多行,4.2版本的分片集群多表多行,1.0版本的單表單文檔
  • C=writeConcern和readConcern。
  • I=readConcern。
  • D=Journal和Replication。

(4)ChangeStream

用于追蹤變更,類似于觸發器,基于oplog實現,返回的_id可用于斷點恢復,有個cursor進行追蹤,推送majority條件的變更

  • 應用程序可以實時的了解數據的變化。
  • 復制協議版本必須是1且使用WT存儲引擎
  • 只有副本集和Shard可用。
  • 使用MongoDB Driver3.6,并且必須開啟3.6版本特性參數featureCompatibilityVersionwriteConcern必須配置。
  • ChangeStream與觸發器的異同點:
    • ChangeStream是異步的,基于事件回調機制。
    • ChangeStream每個客戶端都會生效一次。
    • ChangeStream支持斷點,觸發器只能事務回滾。
  • 應用場景:
    • 跨集群復制
    • 微服務聯動
  • ChangeStream的中斷事件不能超過oplog的回收時間。

六、面試題

MongoDB的優勢?

  • 面向Collection和Document,以JSON格式保存數據,支持二進制數據和大型對象。
  • 高性能,支持Document嵌入,減少了數據庫上的IO操作,基于具有完整的索引支持,支持快速查詢。
  • 高可用,復制集,提供自動故障轉移。
  • 高可擴展,分片集群。
  • 支持聚合管道和全文索引。
  • 支持插件式存儲引擎,WiredTiger存儲引擎和in-memory存儲引擎。

  • MongoDB支持的數據類型:

    • 類似于Java中的:String(UTF-8編碼才是合法的)、Integer、Double、Boolean、Arrays、Datetime。
    • 特有的:ObjectId(用于存儲文檔ID,ObjectId基于分布式主鍵實現MongoDB分片也可用)、Min/Max Keys(將一個值與BSON元素最低值和最高值比較)、Code(JavaScript代碼)、Regular Expression(正則表達式)、Binary Data(二進制數據)、Null(空值)、Object(內嵌的文檔)。

什么是mongod,默認參數有哪些?

  • mongod是處理MongoDB系統的主要進程,默認參數有--dbpath=/data/db,--port=27017

MySQL和MongoDB的區別:

  • MongoDB是非關系型數據庫
  • MySQL采用虛擬內存+持久化的方式
  • MySQL使用傳統的SQL語句方式
  • MongoDB常見的架構有副本集和分片集群,MySQL有MS、MHA、MMM等架構
  • MongoDB基于內存,將熱數據存儲在物理內存,從而實現數據告訴讀寫,MySQL每個存儲引擎都有自己的特點。

更新操作會立刻fsync到磁盤?

  • 不會,磁盤寫操作默認延遲執行,寫操作可能在2~3s內落到磁盤,可以通過syncPeriodSecs參數配置。

MongoDB支持的索引類型?

  • 單字段索引
  • 復合索引
  • 多鍵索引
  • 全文索引
  • Hash索引
  • 通配符索引
  • 2d sphere索引

MongoDB在A:{B,C}上建立索引,查詢A:{B,C}和A:{C,B}都會使用索引嗎?

由于MongoDB索引使用B-tree樹原理,只會在A:{B,C}上使用索引。

如果塊移動操作(moveChunk)失敗了,我需要手動清除部分轉移的文檔嗎?

不需要,移動操作是一致并且是確定的。一次失敗后,移動操作會不斷重試。當完成后,數據只會出現在新的分片里。

數據在什么時候才會擴展到多個分片里?

MongoDB 分片是基于區域(range)的。所以一個集合(collection)中的所有的對象都被存放到一個塊(chunk)中,默認塊的大小是 64Mb。當數據容量超過64 Mb,才有可能實施一個遷移,只有當存在不止一個塊的時候,才會有多個分片獲取數據的選項。

更新一個正在被遷移的塊(Chunk)上的文檔時會發生什么?

更新操作會立即發生在舊的塊(Chunk)上,然后更改才會在所有權轉移前復制到新的分片上。

如果一個分片(Shard)停止或很慢的時候,發起一個查詢會怎樣?

如果一個分片停止了,除非查詢設置了 “Partial” 選項,否則查詢會返回一個錯誤。如果一個分片響應很慢,MongoDB 會等待它的響應。

什么是Arbiter?

仲裁節點不維護數據集。 仲裁節點的目的是通過響應其他副本集節點的心跳和選舉請求來維護副本集中的仲裁。

復制集節點類型有哪些?

  • 優先級0型(Priority 0)節點
  • 隱藏型(Hidden)節點
  • 延遲型(Delayed)節點
  • 投票型(Vote)節點以及不可投票節點

七、應用案例

(1)MongoDB典型的應用場景

MongoDB是OLTP數據庫,原則上MySQL和Oracle能做的事情,MongoDB也都可以。MongoDB具有原生的橫向擴展能力,靈活的模型支持,適合快速開發迭代,數據模型多變的場景,并且MongoDB使用了JSON數據結構,非常適合微服務領域。

基于功能的選擇

MongoDB傳統關系型數據庫
億級以上的數據量支持Easy分庫分表
靈活的表結構Easy數據字典,關聯查詢
高并發讀EasyHard
高并發寫EasyHard
跨地區的集群EasyHard
數據分片Easy中間件
地址位置查詢完整支持PostGreSQL還可以,其他的很麻煩
聚合計算EasyGroupBY,復雜的SQL
異構數據Easy數據字典,關聯查詢
大、寬表Easy性能局限

基于場景的選擇

  • 移動端應用、小程序

    場景特點:基于RESTful API,快速迭代,數據結構頻繁變化,大部分功能基于地理信息,爆發式的增長,高可用

    業界案例:Keep(說實在的, 健身還不如專門請個私教單獨一對一),摩拜單車,ADP

  • 電商的海量商品數據

    場景特點:商品信息包羅萬象,數據庫模式設計困難

    業界案例:京東商城,小紅書,GAP

  • 內容管理:

    場景特點:內容數據多樣,擴展困難

    業界案例:Adobe AEM,SiteCore

  • 物聯網IoT

    場景特點:傳感器數據結構往往是半結構化數據,傳感器實時采集的數據量巨大,容易增長到百億級別

    業界案例:華為、Bosch、MindSphere

  • SaaS應用

    場景特點:多租戶模式,需求多變,數據增長快

    業界案例:ADP、Teambition

  • 主機分流

    場景特點:高性能查詢,實時同步機制

    業界案例:金融行業

  • 實時在線分析

    場景特點:流數據計算,快速計算,秒級響應

    業界案例:MongoDB緩存機制、MongoDB聚合框架、微分片架構

  • 關系型遷移到MongoDB承載更多的數據和并發

    場景特點:數據增長導致性能低,分庫分表方案復雜

    業界案例:頭條、網易、百度、東航、中行

(2)MongoDB對接MySQL、Oracle

從傳統的關系型數據庫遷移到MongoDB需要綜合考慮的幾個問題:

  • 總體架構

    • 運維工具、腳本
    • 權限設置
    • 分布式
    • 監控
    • 備份恢復
  • 模式設計

    表結構整合為JSON文檔

  • SQL語句/存儲過程/ORM層

    原始SQL

    存儲過程特性

    ORM框架

  • 數據遷移

    數據遷移的幾個方式:

    (1)數據庫導出導入,導出JSON或者CSV

    (2)ETL批量遷移工具,Kettle、Talend

    (3)實時同步工具,infomatica、Tapdata(會運行一個Agent),一般是解析日志模式

    (4)應用主動遷移

(3)MongoDB與Spark

MongoDB作為Spark的存儲方案,MongoDB相比HDFS更加細粒度存儲,并且支持結構化存儲。MongoDB支持索引機制,使得Spark的讀取更加快速,HDFS是一次寫,多次讀,但是MongoDB適合Spark的讀寫混合場景。MongoDB是在線式存儲,毫秒級的SLA。

(4)可視化與ETL

MongoDB可以通過BI Connector實現與SQL的結合。BI Connector會自動產生DRDL映射文件,然后我們根據映射文件來編寫SQL語句實現數據展示。

BI Connector是企業版的,并且是一個獨立的服務。

BI Connector暴露的是MySQL驅動構建的解釋器,然后作為一個虛擬的MySQL服務。

(5)兩地三中心高級集群設計

容災級別描述RPORTO
Level0無災備源,只有本地的數據備份24小時4小時
Level1本地備份+異地保存,將關鍵數據保存并送到異地24小時8小時
Level2雙中心主備,通過網絡建立熱點備份秒級數分鐘到半小時
Level3雙中心雙活,互相進行數據備份秒級秒級
Level4雙中心雙活+異地熱備,當一個城市的兩個中心不可用時切換秒級分鐘級

詳細介紹MongoDB

網絡層解決方案

GSLB實現MongoDB負載均衡器的健康檢查,通過域名實現應用層的切換。

應用層解決方案

使用負載均衡技術,虛擬IP技術,使用同一個Session,使用同一套數據。

使用HAProxy或者Nginx作為本地的SLB本地負載均衡器。

數據庫層解決方案

通過日志同步或者存儲鏡像實現數據拷貝。

復制集跨中心2+2+1解決方案

2+2+1保證了主中心的高可用,oplog同步實現了毫秒級的拷貝。

(6)全球多寫

由于復制集只解決了讀取的問題,寫入還是要在Primary上進行所以不能夠保證幾個國家的用戶體驗。

詳細介紹MongoDB

全球多寫本質上是一個特殊的分片集群。將集群中的分片節點分區域部署。要實現全球分片多寫,那么要實現以下三點條件:

  • 針對要分片的數據集合,模型中增加一個區域字段

  • 給集群中的每個分片添加區域標簽

    sh.addShardTag("shard0", "Asia");
  • 為每個區域指定屬于這個區域的分片塊范圍

    sh.addShardRange("tableName", {"location": "China"}, "Asia");

全球多寫的事務性問題:

  • 當海外用戶訪問讀取數據時,希望是從海外本地讀取,因此需要設置readPreference:"nearest"

  • 當海外用戶下單,那么需要寫到本地大部分節點才算成功,在國內的海外數據等待oplog同步,因此需要設置writeConcern:"majority"
  • 當需要讀取所有區域的數據進行匯總時,只需要設置讀取本地主從節點為:readPreference:"nearset"就會保證從本地讀取就近的數據。
  • 加入海外用戶在國內下單,那么就會導致需要寫入遠程海外節點,因為配置了writeConcern:"majority"需要寫入大部分節點。

當然,MongoDB也可以在國內和海外向Oracle那樣同時部署兩套集群,通過第三方工具實現同步,中間也需要處理數據沖突問題。常見的中間件有:Tapdata和MongoShake這兩個第三方中間件也是基于oplog的

八、連接與開發注意事項

  • 連接到復制集:mongodb://node1,node2/dbname?[option]
  • 連接到分片集:mongdb://mongos1,mongos2/dbname?[option]
  • 支持域名解析:mongodb+srv://mongos或者node地址
  • mongos前不可以使用負載均衡器,因為mongos自帶LB
  • 事務支持:
    • 使用4.2兼容驅動
    • 事務在60秒內完成,否則會被取消。
    • 涉及事務的分片不能使用仲裁節點
    • 事務會影響Chunk遷移效率
    • 正在遷移的Chunk可能造成事務失敗。
    • 多文檔事務必須在Primary節點進行
    • readConcern只應該在事務級別設置,不應該在每次讀寫上進行。
  • 其他:
    • 每一個查詢盡量對應一個索引。
    • 盡量使用覆蓋索引。
    • 使用projection來減少返回到Client的內容。
    • 處理分頁避免使用count,只是用limit。
    • 盡量控制在1000個更新文檔事務之內。
  • 系統上線時的必要檢查:
    • 禁用NUMA,否則在某些情況下可能導致突發的大量的SWAP交換。
    • 禁用Transparent Huge Page,否則會影響數據庫效率。
    • tcp_keepalive_time設置為120秒,容忍網絡問題。
    • 設置最大文件句柄打開數目。
    • 關閉文件系統的atime,提高訪問效率。

九、索引管理

MongoDB中的索引是特殊結構,索引存儲在易于遍歷的數據集合中,而且使用BTree結構。

(1)創建索引要考慮的問題

  • 每個索引至少需要8KB的空間
  • 添加索引會對寫操作性能產生影響,因為每個集合在插入時也必須更新索引
  • 索引處于Action狀態時,每個索引都會占用磁盤空間和內存

(2)索引的限制

  • 索引名稱超度不可以超過128字段
  • 復合索引不能超過32個屬性
  • 每個集合不能超過64個索引

(3)索引管理

  • 創建索引

    db.collection.createIndex(<key>, <option>);
    參數數據類型描述
    backgroundBoolean創建索引會阻塞數據庫操作,可以指定為后臺操作。
    uniqueBoolean是否建立唯一索引
    nameString索引的名稱
    dropDupsBoolean3.0版本廢棄,建立索引時是否刪除重復記錄
    sparseBoolean對文檔中不存在的字段數據不建立索引
    expireAfterSecondsInteger秒,設定索引的TTL
    vIndex version索引的版本號
    weightDocument索引權重值,數值在1-99999之間
    default_languageString對于文本類型的索引,決定了分詞器規則,默認為英語
    language_overrideString對于文本類型的索引,指定了包含在文檔中的字段名
  • 查看索引

    db.collection.getIndexs();
  • 刪除索引

    db.collection.dropIndexs();
    db.collection.dropIndex();
  • 查看創建過程和終止

    db.currentOp();
    db.killOp();
  • 使用情況

    // 獲取索引訪問信息
    $indexStats
    // 返回查詢計劃
    explain()
    // 控制索引, 強制MongoDB使用特定索引進行查詢
    hint()

(4)單值索引

MongoDB可以在任何字段上創建索引,默認情況下會在_id字段創建索引,_id索引時為了防止客戶端具有相同的值創建的索引,該索引無法刪除。在分片集群中使用_id索引。

(5)復合索引

將多個鍵組合到一起,這樣可以加速匹配多個鍵的查詢。

  • 無法創建具有Hash索引的復合索引
  • 復合字段的索引是有順序的
  • 復合索引支持前綴匹配查詢
db.collection.createIndex( { <field1>: <type>, <field2>: <type2>, ... } )

(6)多鍵索引

MongoDB使用多鍵索引為數組的每個元素創建索引,多鍵索引可以建立在字符串、數字、內嵌文檔類型的數組上。如果創建的字段包含數組的值,那么MongoDB將會自動確定是否創建索引。

db.coll.createIndex( { <field>: < 1 or -1 > } )

(7)全文索引

MongoDB機制提供了全文索引類型,支持在集合中搜索字符串。

db.collection.createIndex( { key: "text",key:"text" ..... } )

MongoDB提供權重以及通配符的創建方式。查詢方式多個字符串空格隔開,排除查詢使用“-”每個全文索引可以通過設置權重來分配不同的搜索程度,默認權重為1,對于文檔中的每個索引字段,MongoDB將匹配數乘以權重并將結果相加。 使用此總和,MongoDB然后計算文檔的分數

  • 每個集合最多只有一個全文索引
  • 如果查詢使用$text表達式就無法使用hint()函數

(8)Hash索引

散列索引使用散列函數來計算索引字段值的散列值。 散列函數會折疊嵌入的文檔并計算整個值的散列值,但不支持多鍵(即數組)索引。

db.collection.createIndex( { _id: "hashed" } )

散列索引支持使用散列分片鍵進行分片。 基于散列的分片使用字段的散列索引作為分片鍵來分割整個分片群集中的數據。

十、安全架構

通過在命令行方式加入--auth參數或者在配置文件添加authorization: enabled開啟安全選項。

使用命令行客戶端操作:mongo -uUsername -pPassword --authenticationDatabase DbName

(1)MongoDB支持的安全策略

  • 用戶名密碼
  • 證書
  • LDAP,企業版
  • Kerberos,企業版

(2)針對集群節點之間的認證

  • KeyFile,統一將Key拷貝到不同的節點,隨機的字符串
  • X.509,基于證書的模式,通過內部或者外部的CA服務器頒發,每個節點都有不同的證書

(3)MongoDB支持的用戶權限

MongoDB的Role建立在Action和Resource上,Action定義了一種動作,Resource表示某個動作可以操作的資源。MongoDB內置權限角色繼承關系圖如下:

詳細介紹MongoDB

自定義角色和用戶分別可以使用createRole()和createUser()。

(4)傳輸加密

MongoDB支持TLS/SSL來加密所有的網絡數據傳輸,不管是內部節點還是客戶端到服務器。

(5)落盤加密(企業版)

  • 生成master key,這是一個用來加密數據庫的key。每一個數據庫都對應不同的key。
  • 當落盤時,基于不同數據庫的key進行數據加密。
  • key的管理通過使用KMIP協議的秘鑰管理服務器完成。MongoDB也支持文件的方式進行管理。

(6)字段加密

  • MongoDB支持字段級別的加密。
  • 當向加密的數據發送請求的時候,MongoDB的驅動直接聯系秘鑰管理器,獲取秘鑰,然后根據查詢條件直接去數據庫查詢,將獲取的加密數據拉取過來然后使用秘鑰解密返回明文數據。數據的加密解密都發生在MongoDB的驅動程序。

(7)審計(企業版)

  • 記錄格式為JSON
  • 可以記錄到本地文件或者syslog
  • 記錄的內容有:DDL、DML、用戶認證

審計日志記錄到syslog:

--auditDestination syslog

審計日志記錄到指定文件:

--auditDestination file --auditFormat JSON --auditPath /path/to/auditLog.json

對刪除進行審計:

--auditDestination file --auditFormat JSON --auditPath /path/to/auditLog.json --auditFilter '{atype: {$in: ["dropCollection"]}}'

十一、性能優化

(1)mongostat

用于了解MongoDB運行狀態的工具。

  • insert、query、update、delete:最近一秒鐘有多少個操作
  • getmore:針對游標操作,最近一秒鐘的操作
  • command:創建索引等操作,最近一秒鐘的執行個數
  • dirty:超過20%的時候可能會阻塞新請求,因為這個參數表示還沒有刷盤數據占比
  • used:超過95%的時候可能會阻塞新請求,由于MongoDB基于內存緩存機制,當緩存超過80%時,就會執行LRU算法
  • qrw、arw:表示排隊的請求
  • conn:表示當前連接數

(2)mongotop

用于了解集合壓力的工具

  • ns:集合
  • total:總時間耗時
  • read:讀時間耗時
  • write:寫時間耗時

(3)mongod日志

MongoDB會記錄超過100ms的查詢,會將執行計劃輸出。

(4)mtools

pip install mtools

常用指令:

  • mplotqueries LogFile:將所有的慢查詢通過圖標展示。
  • mloginfo —queries LogFile:總結所有慢查詢模式和出現的次數,消耗時間等。

https://github.com/rueckstiess/mtools

十二、GridFS

GridFS是MongoDB的一個子模塊,主要用于在MongoDB中存儲文件,相當于MongoDB內置的一個分布式文件系統。本質上還是講文件的數據分塊存儲在集合中,默認的文件集合分為fs.filesfs.chunks。fs.files是存儲文件的基本信息,比如文件名,大小,上傳時間,MD5等。fs.chunks是存儲文件真正數據的地方,一個文件會被分割成多個chunk塊進行存儲,一般為256KB/個

GridFS的好處是你不用單獨去搭建一個文件系統,直接使用Mongodb自帶的即可,備份,分片都依賴MongoDB,維護起來也方便。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吴旗县| 青龙| 苍南县| 高邑县| 蒲江县| 于田县| 靖边县| 洱源县| 日照市| 凤台县| 佳木斯市| 湘乡市| 项城市| 东乡县| 富阳市| 武山县| 修水县| 城固县| 扶余县| 西丰县| 巫山县| 德令哈市| 武强县| 宁津县| 班戈县| 河津市| 章丘市| 遂平县| 翁源县| 丘北县| 兴仁县| 达日县| 永平县| 恩平市| 利津县| 晋中市| 赞皇县| 大足县| 博兴县| 乌拉特前旗| 子洲县|