• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于MongoDB 分片集群的海量數(shù)據(jù)存儲(chǔ)設(shè)計(jì)

      2022-07-11 01:17:06劉云漢郭繼光
      電子技術(shù)與軟件工程 2022年7期
      關(guān)鍵詞:分片副本路由

      劉云漢 郭繼光

      (中國電子科技集團(tuán)公司電子科學(xué)研究院 北京市 100041)

      1 引言

      衛(wèi)星影像數(shù)據(jù)文件大小不一,具有多時(shí)態(tài)、大數(shù)據(jù)量,且隨時(shí)間延長(zhǎng),數(shù)據(jù)量不斷增加的特點(diǎn),單臺(tái)服務(wù)器內(nèi)存、CPU 資源難以支撐海量數(shù)據(jù)的存儲(chǔ)和高效訪問。MongoDB分片復(fù)制集群,將數(shù)據(jù)分散到不同的MongoDB 節(jié)點(diǎn),具有負(fù)載均衡、故障切換和故障恢復(fù)等特點(diǎn),適合存儲(chǔ)衛(wèi)星影像等海量小文件數(shù)據(jù),能夠提供更大的讀寫吞吐量。

      2 MongoDB分片復(fù)制集群

      MongoDB 高可用集群有主從復(fù)制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式三種部署模式。如表1 所示。

      表1:分片、副本集集群對(duì)比

      主從復(fù)制(Master-Slaver)模式不推薦使用,主節(jié)點(diǎn)宕機(jī)不能自動(dòng)恢復(fù)。

      Replica Set 模式取代了 Master-Slaver 模式,是一種互為主從的關(guān)系。Replica Set 將數(shù)據(jù)復(fù)制多份保存,不同服務(wù)器保存同一份數(shù)據(jù),在出現(xiàn)故障時(shí)自動(dòng)切換,實(shí)現(xiàn)故障轉(zhuǎn)移,在實(shí)際生產(chǎn)中非常實(shí)用。Replica Set 是mongod 的實(shí)例集合,它們有著同樣的數(shù)據(jù)內(nèi)容。包含主節(jié)點(diǎn)(Primary)、副本節(jié)點(diǎn)(Secondary)和仲裁者(Arbiter)三類角色。一個(gè)復(fù)制集群只有一個(gè)主節(jié)點(diǎn),主節(jié)點(diǎn)接收所有寫請(qǐng)求,讀請(qǐng)求可以通過配置均衡分配到主節(jié)點(diǎn)和副本節(jié)點(diǎn)。通過數(shù)據(jù)復(fù)制實(shí)現(xiàn)副本節(jié)點(diǎn)和主節(jié)點(diǎn)的數(shù)據(jù)同步,當(dāng)主節(jié)點(diǎn)掛掉時(shí),會(huì)從副本節(jié)點(diǎn)中選取一個(gè)作為主節(jié)點(diǎn),復(fù)制集群中節(jié)點(diǎn)的數(shù)量應(yīng)為奇數(shù)。

      Sharding 模式適合處理大量數(shù)據(jù),它將數(shù)據(jù)分開存儲(chǔ),不同服務(wù)器保存不同的數(shù)據(jù),所有服務(wù)器數(shù)據(jù)的總和即為整個(gè)數(shù)據(jù)集。

      Sharding 模式追求的是高性能,而且是三種集群中最復(fù)雜的。在實(shí)際生產(chǎn)環(huán)境中,通常將 Replica Set 和 Sharding兩種技術(shù)結(jié)合使用。

      MongoDB Sharding 分片復(fù)制集群適用于存儲(chǔ)海量數(shù)據(jù)、瞬間并發(fā)讀寫高的場(chǎng)景。其主要有以下特性:

      (1)故障切換:Sharding 集群中每個(gè)分片節(jié)點(diǎn)采用ReplicaSet 集群來實(shí)現(xiàn)高可用性,當(dāng)某個(gè)分片節(jié)點(diǎn)的復(fù)制節(jié)點(diǎn)出現(xiàn)故障時(shí),可自動(dòng)切換至副本節(jié)點(diǎn),從而避免單點(diǎn)故障造成數(shù)據(jù)丟失或影響數(shù)據(jù)庫服務(wù)。

      (2)負(fù)載均衡:分片復(fù)制集群會(huì)將不同分片部署到不同服務(wù)器上,Sharding 集群通過數(shù)據(jù)分片機(jī)制將數(shù)據(jù)均勻分布到多個(gè)數(shù)據(jù)節(jié)點(diǎn)上,減少了單機(jī)數(shù)據(jù)存儲(chǔ)量,提高數(shù)據(jù)存儲(chǔ)總量。通過設(shè)置多個(gè)mongos 節(jié)點(diǎn),通過mongos 節(jié)點(diǎn)上配置的負(fù)載均衡機(jī)制,促使每個(gè) shard 節(jié)點(diǎn)上的數(shù)據(jù)塊大小趨于平衡,減小單一節(jié)點(diǎn)的讀寫壓力。

      (3)故障恢復(fù):Sharding集群中,每一個(gè)數(shù)據(jù)分片(shard)被部署成 ReplicaSet 模式,分片復(fù)制集群具有備份、自動(dòng)容錯(cuò)轉(zhuǎn)移、自動(dòng)恢復(fù)能力,能夠?qū)崿F(xiàn)數(shù)據(jù)存儲(chǔ)服務(wù)的高可用。

      如圖 1 所示,mongodb 的集群架構(gòu)主要由3 部分組成:配置服務(wù)服務(wù)器集群,路由節(jié)點(diǎn)服務(wù)器集群,分片+復(fù)制服務(wù)器集群。

      圖1:Mongodb 集群的分布式架構(gòu)

      (1)路由進(jìn)程 (Route Process):路由進(jìn)程是一個(gè)mongos 實(shí)例,是數(shù)據(jù)庫集群請(qǐng)求的入口,負(fù)責(zé)將數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的Shard 服務(wù)器上。實(shí)際部署時(shí),通常配置多個(gè)Mongos 節(jié)點(diǎn),防止其中一個(gè)掛掉導(dǎo)致整個(gè)集群無法響應(yīng)的情況。

      (2)配置服務(wù)器(Config Server):存儲(chǔ)所有數(shù)據(jù)庫元信息(路由、分片)的配置。Mongos 節(jié)點(diǎn)本身不存儲(chǔ)分片服務(wù)器和數(shù)據(jù)路由信息,只是緩存在內(nèi)存里。Mongos 第一次啟動(dòng)或重啟后會(huì)從配置服務(wù)器加載配置信息,如果配置信息變化,配置服務(wù)器會(huì)將變化信息通知路由服務(wù)器。實(shí)際部署時(shí),為防止配置信息的數(shù)據(jù)丟失,通常配置多個(gè)配置服務(wù)器。

      (3)分片服務(wù)器(Shard Server):分片服務(wù)器是存儲(chǔ)實(shí)際數(shù)據(jù)的地方,也稱為分片節(jié)點(diǎn)。每個(gè)分片節(jié)點(diǎn)可以是一個(gè) mongod 實(shí)例,也可以是一組 mongod 實(shí)例構(gòu)成的復(fù)制集。

      3 數(shù)據(jù)存儲(chǔ)管理

      3.1 文件統(tǒng)一存儲(chǔ)

      MongoDB 基于MongoDB 文檔數(shù)據(jù)庫和其內(nèi)置的GridFS 實(shí)現(xiàn)文件數(shù)據(jù)的統(tǒng)一管理。

      (1)對(duì)于<16M 的數(shù)據(jù)文件,轉(zhuǎn)換為二進(jìn)制,直接插入數(shù)據(jù)庫,使用Binary數(shù)據(jù)類型存儲(chǔ)。MongoDB的操作如下:

      (2)對(duì)于≥16M 的大文件,使用GridFS 文件系統(tǒng)存儲(chǔ)。GridFS 將大文件對(duì)象分割成多個(gè)小的chunk(256K 文件片段),以兩個(gè)集合配合的方式存儲(chǔ)。其中fs.files 集合存儲(chǔ)文件名稱、文件大小、文件片段數(shù)量、文件存儲(chǔ)時(shí)間等文件元數(shù)據(jù)信息;fs.chunks 集合存儲(chǔ)文件實(shí)際內(nèi)容。GridFS 文件操作如下:

      通過MongoDB 存儲(chǔ)文件將數(shù)據(jù)庫與文件綁定,可通過檢索數(shù)據(jù)庫獲取文件,避免文件位置變化導(dǎo)致文件丟失。

      3.2 數(shù)據(jù)分片

      海量數(shù)據(jù)存儲(chǔ)需要通過數(shù)據(jù)分片來應(yīng)對(duì)高吞吐量和大數(shù)據(jù)量,當(dāng)集群主機(jī)性能到達(dá)瓶頸時(shí)可以通過水平擴(kuò)展提高存儲(chǔ)容量和吞吐量。

      MongoDB 的自動(dòng)分片是將數(shù)據(jù)庫中的集合數(shù)據(jù)按照一定的規(guī)則切分成若干小塊,這些分片的數(shù)據(jù)寫入和讀取統(tǒng)一由mongos 管理,路由會(huì)依據(jù)shard key 的分片規(guī)則找到對(duì)應(yīng)的分片。

      3.2.1 片鍵選擇方式

      最常用的數(shù)據(jù)分片方式有三種:升序片鍵、隨機(jī)分發(fā)的片鍵和基于位置的片鍵。

      (1)升序片鍵:升序片鍵通常有點(diǎn)類似于"date"字段或者是ObjectId,是一種隨著時(shí)間穩(wěn)定增長(zhǎng)的字段。缺點(diǎn):例如ObjectId 可能會(huì)導(dǎo)致接下來的所有的寫入操作都在同一塊分片上。

      (2)隨機(jī)分發(fā)的片鍵:隨機(jī)分發(fā)的片鍵可以是用戶名,郵件地址,UDID,MD5 散列值或者數(shù)據(jù)集中其他一些沒有規(guī)律的鍵。缺點(diǎn):MongoDB 在隨機(jī)訪問超出RAM 大小的數(shù)據(jù)時(shí)效率不高。

      (3)基于位置的片鍵:基于位置的片鍵可以是用戶的IP、經(jīng)緯度、或者地址。這里的"位置"比較抽象,不必與實(shí)際的物理位置字段相關(guān)。

      3.2.2 片鍵選取規(guī)則

      (1)片鍵限制:片鍵不可以是數(shù)組。文檔一旦插入,其片鍵就無法修改了。要修改文檔的片鍵值,就必須先刪除文檔。

      (2)片鍵的勢(shì):選擇一個(gè)值會(huì)變化的鍵非常重要,即值很多,隨著數(shù)據(jù)量的增大可以分出更多的片鍵。分片在勢(shì)比較高的字段上性能更佳。

      綜上所述,衛(wèi)星影像數(shù)據(jù)存儲(chǔ)采用衛(wèi)星編號(hào)作為分片鍵。分片的語句定義如下:

      對(duì)數(shù)據(jù)庫啟用分片:sh.enableSharding (“satsjdb”);

      4 應(yīng)用分析

      4.1 測(cè)試環(huán)境搭建

      為驗(yàn)證MongoDB 分片集群的性能,通過3 臺(tái)機(jī)器搭建MongoDB 分片集群,機(jī)器的配置如表2 所示。

      表2:配置表

      4.2 集群高可用和擴(kuò)容測(cè)試

      4.2.1 MongoDB 高可用測(cè)試

      基于上述搭建的高可用集群,測(cè)試分片復(fù)制集群的負(fù)載均衡和故障切換性能。

      (1)執(zhí)行插入程序插入千萬級(jí)數(shù)據(jù),執(zhí)行db.test.getShardDistribution()指令查看集合數(shù)據(jù)的分布情況。如圖2所示。

      圖2

      (2)執(zhí)行指令停掉21 服務(wù)器上分片1 的服務(wù),查看分片狀態(tài)如下:21 上分片1 的節(jié)點(diǎn)狀態(tài)變成not reachable;22上分片1 的節(jié)點(diǎn)狀態(tài)變成PRIMARY;執(zhí)行分片1 上數(shù)據(jù)的讀寫操作,能夠正常響應(yīng)。如圖3 所示。

      圖3

      結(jié)論:數(shù)據(jù)能夠根據(jù)分片鍵均勻分布到分片節(jié)點(diǎn)上;當(dāng)某個(gè)分片的主節(jié)點(diǎn)宕機(jī)時(shí),副本節(jié)點(diǎn)能夠自動(dòng)切換為主節(jié)點(diǎn);某個(gè)路由服務(wù)或配置服務(wù)器停止時(shí),客戶端能夠正常訪問數(shù)據(jù)庫,整個(gè)集群在測(cè)試過程中均穩(wěn)定無差錯(cuò)運(yùn)行。

      4.2.2 MongoDB 集群擴(kuò)容測(cè)試

      新增三臺(tái)服務(wù)器,組成分片4,執(zhí)行指令為admin 數(shù)據(jù)庫綁定shard4,執(zhí)行操作如下:

      db.runCommand({addshard:"shard4/10.17.2.24:22004,10.17.2.25: 22004,10.17.2.26:22004"});

      通過指令查看集合數(shù)據(jù)的分布情況如圖4 所示。

      圖4

      結(jié)論:新加分片后,數(shù)據(jù)會(huì)根據(jù)分片鍵將數(shù)據(jù)遷移至分片4,并實(shí)現(xiàn)數(shù)據(jù)在4 個(gè)分片的均勻分布;可通過擴(kuò)充服務(wù)器實(shí)現(xiàn)集群存儲(chǔ)容量的水平擴(kuò)展。

      5 結(jié)論

      MongoDB 分片復(fù)制集群基于自動(dòng)分片機(jī)制,不同的分片之間可以負(fù)載均衡,具有高并發(fā)、高可靠性和高效擴(kuò)展存儲(chǔ)等特點(diǎn)。能夠?qū)崿F(xiàn)海量小文件和大文件的統(tǒng)一存儲(chǔ)管理,數(shù)據(jù)的訪問效率優(yōu)于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,能夠滿足遙感影像數(shù)據(jù)的存儲(chǔ)訪問需求。

      猜你喜歡
      分片副本路由
      上下分片與詞的時(shí)空佈局
      詞學(xué)(2022年1期)2022-10-27 08:06:12
      分片光滑邊值問題的再生核方法
      CDN存量MP4視頻播放優(yōu)化方法
      面向流媒體基于蟻群的副本選擇算法①
      基于模糊二分查找的幀分片算法設(shè)計(jì)與實(shí)現(xiàn)
      探究路由與環(huán)路的問題
      副本放置中的更新策略及算法*
      樹形網(wǎng)絡(luò)中的副本更新策略及算法*
      PRIME和G3-PLC路由機(jī)制對(duì)比
      WSN中基于等高度路由的源位置隱私保護(hù)
      固镇县| 民勤县| 望江县| 高雄市| 平邑县| 临汾市| 桐梓县| 宿松县| 榆中县| 宝山区| 元江| 兰西县| 辉南县| 兴安县| 白水县| 岳西县| 黑水县| 松滋市| 灯塔市| 安义县| 冀州市| 台安县| 大安市| 上杭县| 甘洛县| 延长县| 巢湖市| 台东县| 光泽县| 安乡县| 泰和县| 界首市| 丹寨县| 乃东县| 西峡县| 天长市| 延安市| 邵武市| 富锦市| 大英县| 白玉县|