婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 深入了解MongoDB 分布式集群

深入了解MongoDB 分布式集群

熱門標簽:智能外呼系統官網 呼和浩特外呼系統原理是什么 長沙電銷外呼防封卡是什么 內蒙古營銷智能外呼系統哪個好 河南電話外呼系統招商 青白江400企業電話申請 外呼線路資源屬于電信業務嗎 crm外呼系統聯系方式 小裙科技電銷機器人怎樣

在分布式應用系統中,mongodb 已經成為 NoSQL 經典數據庫。要想很好的使用 mongodb,僅僅知道如何使用它是不夠的。只有對其架構原理等有了充分認識,才能在實際運用中使其更好地服務于應用,遇到問題知道怎么處理,而不是抓瞎抹黑。這篇文章就帶你進入 mongodb 集群的大門。

集群概覽

mongodb 相關的進程分為三類:

  • mongo 進程 – 該進程是 mongodb 提供的 shell 客戶端進程,通過該客戶端可以發送命令并操作集群;
  • mongos 進程 – mongodb 的路由進程,負責與客戶端連接,轉發客戶端請求到后端集群,對客戶端屏蔽集群內部結構;
  • mongod 進程 – 提供數據讀寫的 mongodb 實例進程。

類比銀行服務,mongo 進程相當于客戶,mongos 進程是柜臺服務員,mongod 進程是銀行后臺實際處理業務的人員或者流程。客戶只需要和柜臺服務員溝通,告知辦什么業務,柜臺服務員將業務轉往后臺,后臺實際處理。

下圖是 mongodb 集群的一般拓撲結構。

如圖,mongodb 集群的節點分為三類:

  • mongos 路由節點:處理客戶端的連接,扮演存取路由器的角色,將請求分發到正確的數據節點上,對客戶端屏蔽分布式的概念;
  • config 配置節點:配置服務,保存數據結構的元數據,比如每個分片上的數據范圍,數據塊列表等。配置節點也是 mongod 進程,只是它存儲的數據是集群相關的元數據;
  • shard 分片節點:數據存儲節點,分片節點由若干個副本集組成,每個副本集存儲部分全體數據,所有副本集的數據組成全體數據,而副本集內部節點存放相同的數據,做數據備份與高可用。

還是拿銀行業務類比,當客戶辦理保單保存業務時,

  1. 柜臺服務員接受客戶的保單業務請求(mongos 路由節點接收客戶端的操作請求);
  2. 柜臺服務員查詢文件目錄系統查看該保單應該保存到哪個倉庫(mongos 節點與 config 配置節點通信,查詢相關操作數據在哪個分片節點);
  3. 知道哪個倉庫后,柜臺服務員將保單給倉庫管理員,倉庫管理員將保單放到指定倉庫中(mongos 節點將請求發送給數據所在分片節點,分片節點進行讀寫處理)。

mongos 路由服務

mongos 服務類似網關,連接 mongodb 集群與應用程序,對外屏蔽 mongodb 內部結構,應用程序只需要將請求發送給 mongos,而無需關心集群內部副本分片等信息。

mongos 本身不保存數據與索引信息,它通過查詢 config 配置服務來獲取,所以可以考慮將 mongos 與應用程序部署在同一臺服務器上,當服務器宕機時 mongos 也一起失效,防止出現 mongos 閑置。

mongos 節點也可以是單個節點,但為了高可用,一般部署多個節點。就像柜臺服務員一樣,可以有多個,相互之間沒有主備關系,都可以獨立處理業務。

需要注意的是,在開啟分片的情況下,應用程序應該避免直接連接分片節點進行數據修改,因為這種情況下很可能造成數據不一致等嚴重后果,而是通過 mongos 節點來操作。

config 配置服務

config 配置節點本質也是一個副本集,副本集中存放集群的元數據,如各個分片上的數據塊列表,數據范圍,身份驗證等信息。如下,可以看到數據庫 config,數據庫中集合保存了集群的重要元數據。

mongos> use config;
switched to db config
mongos> show collections;
changelog
chunks
collections
databases
lockpings
locks
migrations
mongos
shards
tags
transactions
version

一般情況下,用戶不應該直接變更 config 的數據,否則很可能造成嚴重后果。

shard 分片服務

分布式存儲要解決的是兩個問題:

隨著業務不斷發展,數據量越來越大,單機存儲受限于物理條件,必然要通過增加服務器來支持不斷增大的數據。所以分布式下,不可能全部數據存儲在一個節點上,必然是將數據劃分,部分數據放到這個節點,另外部分數據放到另外的節點上。也就是數據的伸縮性。
考慮高可用。如果同一份數據只存在一個節點上,當這個節點發生異常時,數據不可用。這就要求分布式下同一份數據需要存儲在多個節點上,以達高可用效果。
在 mongodb 集群中,數據的伸縮性通過分片集來實現,高可用通過副本集來實現。

如圖,全部數據為1-6,將其劃分為3部分,1-2為一個分片,3-4為一個分片,5-6為一個分片。每個分片存儲在不同的節點上。而每個分片有3個副本,組成副本集,每個副本都是獨立的 mongod 實例。

所以副本集是一個縱向概念,描述的是相同的數據存儲在多個節點上;而分片是一個橫向概念,描述的是全量數據被切成不同的片段,每個片段獨立存儲。這個片段就是分片,而分片通過副本集進行存儲。

副本集

副本集包含三種角色:

  • 主節點(Primary)
  • 副節點(Secondary)
  • 仲裁節點(Arbiter)

一個副本集由一個主節點,多個副節點,0或多個仲裁節點組成。

主節點與副節點是數據節點。主節點提供數據的寫操作,數據寫到主節點后,會通過同步機制同步到副節點上。默認讀操作也由主節點提供,但是可以手動設置 read preference,優先從副節點讀取。

仲裁節點不是數據節點,不存儲數據,也不提供讀寫操作。仲裁節點是作為投票者存在,當主節點異常需要進行切換時,仲裁節點有投票權,但沒有被投票權。仲裁節點可以在資源有限的情況下,依然支持故障恢復。比如只有2個節點的硬盤資源,在這種情況下可以增加一個不占存儲的仲裁節點,組成“一主一副一仲裁”的副本集架構,當主節點宕掉時,副節點能夠自動切換。

節點間通過“心跳”進行溝通,以此知道彼此的狀態。當主節點異常不可用時,從其他有被投票權的節點中投票選出一個升級為主節點,繼續保持服務高可用。這里投票采取“大多數”原則,即需要多于總節點數一半的節點同意,才能被選舉成主節點。也因此不建議采用偶數個節點組成副本集,因為偶數情況下,如果發生半數節點網絡隔離,隔離的半數節點達不到“大多數”的要求,無法選舉產生新的主節點。

通過 rs.status() 可以查看副本集,參考《教你快速搭建 mongodb 集群》

分片集

分片就是將全部數據根據一定規則劃分成沒有交集的數據子集,每個子集就是一個分片,不同分片存放在不同節點上。這里有幾個問題:

  • 劃分規則也就是分片策略是什么?
  • 分片數據是如何存放的?
  • 數據量越來越大,分片如何動態調整?

數據塊 Chunk

chunk 由多個文檔組成,一個分片中包含多個 chunk。chunk 是分片間數據遷移的最小單位。實際上,文檔是通過分片策略計算出應該存儲在哪個 chunk,而 chunk 存放在分片上。

如圖,假設按照文檔的 x 字段值來進行分片,根據不同取值范圍存放在不同的數據塊,如25-175在 chunk 3上。

把書比作 mongodb 中的文檔,書柜比作數據塊,房間比作分片。每本書根據一定規則放到某書柜上,房間中有很多書柜。當某個房間的書柜太多,就需要以書柜為單位,遷移到相對比較寬松的房間。

chunk 的大小默認為 64MB,也可以自定義。chunk 的存在有兩個意義:

  • 當某個 chunk 超過大小時,會觸發 chunk 分裂。
  • 當分片間的 chunk 數不均衡時,會觸發 chunk 遷移。

chunk 遷移由 mongodb 的平衡器來操作,默認平衡器是開啟的,是運行在后臺的一個進程,也可以手動關閉。

可以通過下面命令來查看平衡器狀態:

sh.getBalancerState()

chunk 的大小對集群的影響:

  • 比較小時,chunk 數比較多,數據分布比較均勻,但會引起頻繁的數據塊分裂與遷移;
  • 比較大時,chunk 數比較少,數據容易分散不均勻,遷移時網絡傳輸量大。

所以要自定義數據塊大小時,一定要考慮完備,否則將大大影響集群與應用程序的性能。

片鍵 Shard Key

mongodb 集群不會自動將數據進行分片,需要客戶端告知 mongodb 哪些數據需要進行分片,分片的規則是什么。

某個數據庫啟用分片:

mongos> sh.enableSharding(database>)

設置集合的分片規則:

mongos> sh.shardCollection(database.collection>,key>,unique>,options>)
# unique 與 options 為可選參數

例如,將數據庫 mustone 開啟分片,并設置庫中 myuser 集合的文檔根據 _id 字段的散列值來進行劃分分片。

sh.enableSharding("mustone")
sh.shardCollection("mustone.myuser",{_id: "hashed"})

這里劃分規則體現在 上, 定義了分片策略,分片策略由片鍵 Shard Key 與分片算法組成。片鍵就是文檔的某一個字段,也可以是復合字段。分片算法分為兩種:

  • 基于范圍。如 設置為 id:1 表示基于字段 id 的升序進行分片,id:-1 表示基于字段 id 的倒序進行分片,字段 id 就是 shard key(片鍵)。當集合中文檔為空時,設置分片后,會初始化單個 chunk,chunk 的范圍為(-∞,+∞)。當不斷往其中插入數據到達 chunk 大小上限后,會進行 chunk 分裂與必要遷移。
  • 基于hash。如上面的栗子, 設置為 _id:”hashed”,表示根據字段 _id 的哈希來分片,此時片鍵為 _id。初始化時會根據分片節點數初始化若干個 chunk,如3個分片節點會初始化6個 chunk,每個 shard 2個 chunk。

每個數據庫會分配一個 primary shard,初始化的 chunk 或者沒有開啟分片的集合都默認放在這個 primary shard 上。

分片策略的選擇至關重要,等數據量大了再更改分片策略將會很麻煩。分片策略的原則:

  1. 均勻分布原則。分片的目標就是讓數據在各個分片上均勻分布,數據的存取壓力也分解到各個分片上。比如以自增長的 id 升序為片鍵,會導致新數據永遠都寫在最后的 chunk 上,且 chunk 分裂與遷移也會落在該 chunk 所在分片上,造成該分片壓力過大。
  2. 大基數原則。集合的片鍵可能包含的不同值的個數,稱為基數。基數越大,數據就能劃分得更細。基數越小,chunk 的個數就有限。比如性別,只有男女,如果作為片鍵,最多兩個 chunk,等數據越來越大后,便無法橫向擴展。
  3. 就近原則。盡可能讓一次查詢的數據分布在同一個 chunk 上,這樣提升磁盤讀取性能。避免毫無意義的隨機片鍵,雖然分布均勻了,但每次查詢都要跨多個 chunk 才能完成,效率低下。

需要說明的是,mongodb 分片集群雖然比較完備,但是存在一些限制,如備份相對困難,分片集合無法做關聯查詢等。所以要根據實際業務來評估,如果副本集已經夠用了,不一定要進行分片存取。

以上就是深入了解MongoDB 分布式集群的詳細內容,更多關于MongoDB 分布式集群的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • MongoDB實現基于關鍵詞的文章檢索功能(C#版)
  • 開源 5 款超好用的數據庫 GUI 帶你玩轉 MongoDB、Redis、SQL 數據庫(推薦)
  • JAVA代碼實現MongoDB動態條件之分頁查詢
  • MongoDB設計方法以及技巧示例詳解
  • MongoDB數據庫基礎操作總結
  • express+mongoose實現對mongodb增刪改查操作詳解
  • win7平臺快速安裝、啟動mongodb的方法
  • 使用Mongodb實現打卡簽到系統的實例代碼
  • 淺析MongoDB 全文檢索

標簽:楚雄 白山 菏澤 黃石 舟山 呼倫貝爾 安順 池州

巨人網絡通訊聲明:本文標題《深入了解MongoDB 分布式集群》,本文關鍵詞  深入,了解,MongoDB,分布式,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入了解MongoDB 分布式集群》相關的同類信息!
  • 本頁收集關于深入了解MongoDB 分布式集群的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产欧美综合色| 亚洲同性gay激情无套| 成人免费看视频| 久久精品99国产国产精| 免费成人av在线播放| 三级影片在线观看欧美日韩一区二区 | 国产亚洲精品超碰| 久久久亚洲高清| 国产精品久久久久久久久免费丝袜| 亚洲国产精品激情在线观看| 亚洲444eee在线观看| 另类小说综合欧美亚洲| 国产精品一区二区在线播放| 色天使色偷偷av一区二区| 欧美日韩一区不卡| 日韩欧美一区二区不卡| 国产精品私人自拍| 一区二区三区四区不卡视频| 亚洲成年人影院| 国产成人精品一区二区三区网站观看| 韩国三级电影一区二区| 国产91露脸合集magnet | 99riav一区二区三区| 91精品综合久久久久久| 国产日韩欧美一区二区三区综合 | 六月丁香婷婷久久| 成人国产亚洲欧美成人综合网| 国产91丝袜在线播放| 欧美一级理论性理论a| 久久精品水蜜桃av综合天堂| 久久久精品人体av艺术| 日本亚洲视频在线| av在线不卡电影| 一本大道久久精品懂色aⅴ| 久久久久久一二三区| 一区二区三区中文字幕电影 | 色婷婷国产精品| 欧美国产日韩亚洲一区| 亚洲国产日日夜夜| 奇米精品一区二区三区在线观看一| 99精品视频一区| 在线播放一区二区三区| 国产免费观看久久| 欧美aⅴ一区二区三区视频| caoporn国产一区二区| 日韩精品一区二区三区在线观看| 一二三区精品视频| 国产精品一区二区果冻传媒| 99在线视频精品| 欧美国产亚洲另类动漫| 蜜臀久久99精品久久久久久9| 福利电影一区二区三区| 亚洲精品一区二区三区精华液| 亚洲精品国产第一综合99久久| 日本在线不卡视频| 777欧美精品| 亚洲一区二区精品视频| 欧美吞精做爰啪啪高潮| 中文字幕一区二区三区蜜月| 国产裸体歌舞团一区二区| 久久精品夜夜夜夜久久| 激情图片小说一区| 欧美大胆一级视频| 国产乱子伦视频一区二区三区 | 国产精品美女久久福利网站| 成人亚洲一区二区一| 精品久久久久久久一区二区蜜臀| 亚洲图片欧美综合| 91精品国产91久久综合桃花| 亚洲韩国精品一区| 国产精品18久久久久| 国产欧美一区在线| 国产电影一区在线| 国产亚洲成年网址在线观看| 国产在线精品免费| 精品电影一区二区三区| 北条麻妃国产九九精品视频| 国产精品丝袜在线| 91在线视频官网| 日韩精品91亚洲二区在线观看 | 亚洲国产aⅴ天堂久久| 成人的网站免费观看| 一区二区欧美视频| 欧美视频你懂的| 国产乱淫av一区二区三区| 亚洲欧美一区二区视频| 在线影视一区二区三区| 捆绑调教一区二区三区| 欧美老肥妇做.爰bbww| 性做久久久久久久免费看| 在线不卡的av| 狠狠色丁香婷综合久久| 国产日产精品1区| 91首页免费视频| 丝袜诱惑制服诱惑色一区在线观看| 久久久久久亚洲综合影院红桃| 成人午夜精品在线| 亚洲视频1区2区| 久久久久9999亚洲精品| 成人久久久精品乱码一区二区三区| 国产精品亲子伦对白| 欧美美女喷水视频| 精品亚洲国内自在自线福利| 91精品国产一区二区| 五月激情丁香一区二区三区| 精品国产凹凸成av人导航| 欧美日韩一级二级| 国产麻豆精品theporn| 国产精品色呦呦| 欧美电影免费观看高清完整版在| 处破女av一区二区| 国产又黄又大久久| 强制捆绑调教一区二区| 国产午夜精品一区二区| 国产成人av福利| 一区二区日韩电影| 2021中文字幕一区亚洲| 日韩午夜在线播放| 91免费在线播放| 成人午夜短视频| 日韩高清不卡在线| 国产精品久久久久久久久搜平片 | 婷婷中文字幕综合| 亚洲乱码国产乱码精品精小说| 7777女厕盗摄久久久| 成人午夜电影久久影院| 丁香亚洲综合激情啪啪综合| 香蕉成人伊视频在线观看| 亚洲一区二区三区自拍| 国产精品美日韩| 日韩视频在线永久播放| 日韩一级视频免费观看在线| 日本精品裸体写真集在线观看 | 日韩经典中文字幕一区| 一区二区日韩av| 国产亚洲人成网站| 久久久久久97三级| 久久婷婷综合激情| 欧美日韩亚洲综合一区 | 久久久青草青青国产亚洲免观| 911精品国产一区二区在线| www.激情成人| 国产乱人伦偷精品视频免下载| 国产精品自拍三区| 免费精品视频在线| 国产精品久久久久久亚洲伦| 亚洲乱码日产精品bd| 精品三级av在线| 国产网红主播福利一区二区| 欧美午夜一区二区| 91色综合久久久久婷婷| 色先锋aa成人| 成人午夜激情影院| 久久69国产一区二区蜜臀| 国产在线播精品第三| 国产自产视频一区二区三区| 狠狠色丁香九九婷婷综合五月| 日本大胆欧美人术艺术动态| 亚洲午夜久久久久中文字幕久| 亚洲欧美偷拍卡通变态| 国产色婷婷亚洲99精品小说| 91小视频免费看| 国产精品亚洲成人| 国产成人丝袜美腿| 色就色 综合激情| 色综合久久久网| 国产激情视频一区二区三区欧美| 91在线视频在线| 久久精品亚洲麻豆av一区二区| 亚洲精品一区二区精华| 精品人在线二区三区| 精品动漫一区二区三区在线观看| 亚洲欧美一区二区视频| 久久久久久毛片| 国产日韩av一区二区| 国产免费久久精品| 亚洲欧美激情小说另类| 捆绑变态av一区二区三区| 免费成人深夜小野草| 高清国产午夜精品久久久久久| 91香蕉视频污在线| 在线中文字幕不卡| 国产日韩综合av| 国产精品传媒在线| 国产精品久久久久久久久图文区 | 日韩一卡二卡三卡国产欧美| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品毛片久久久久久| 亚洲色图第一区| 国产精品亚洲人在线观看| 成av人片一区二区| 日韩午夜电影av| 亚洲欧洲精品天堂一级| 亚洲福中文字幕伊人影院| 懂色av中文字幕一区二区三区| 色噜噜狠狠一区二区三区果冻| 99久久婷婷国产精品综合| 日韩欧美在线综合网| 国产视频一区二区在线观看| 美日韩一区二区三区|