最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MongoDB的分布式存儲(chǔ)架構(gòu)詳解

 更新時(shí)間:2025年12月19日 09:13:28   作者:趙渝強(qiáng)老師  
MongoDB分片技術(shù)通過(guò)將數(shù)據(jù)分割存儲(chǔ)在多臺(tái)服務(wù)器上,實(shí)現(xiàn)數(shù)據(jù)的分布式存儲(chǔ),滿足大數(shù)據(jù)量的需求,分片架構(gòu)包括前端路由服務(wù)器、配置服務(wù)器和分片服務(wù)器,本文介紹MongoDB的分布式存儲(chǔ)架構(gòu),感興趣的朋友跟隨小編一起看看吧

在MongoDB存在另一種集群就是MongoDB的分片技術(shù)。通過(guò)使用分片可以滿足MongoDB數(shù)據(jù)量大量增長(zhǎng)的需求。當(dāng)MongoDB存儲(chǔ)海量的數(shù)據(jù)時(shí),一臺(tái)MongoDB服務(wù)器可能不能滿足存儲(chǔ)數(shù)據(jù)的要求,也可能不足以提供可接受的讀寫(xiě)吞吐量。MongoDB為了解決這一系列的問(wèn)題提出了將數(shù)據(jù)分割存儲(chǔ)在多臺(tái)服務(wù)器上,使得數(shù)據(jù)庫(kù)系統(tǒng)能存儲(chǔ)和處理更多的數(shù)據(jù),以實(shí)現(xiàn)數(shù)據(jù)的分布式存儲(chǔ)。這就是MongoDB的分片。

提示:?jiǎn)蝹€(gè)MongoDB復(fù)制集中的節(jié)點(diǎn)不能超過(guò)12個(gè)節(jié)點(diǎn)。
因此復(fù)制集從本質(zhì)上并不能解決數(shù)據(jù)海量存儲(chǔ)的問(wèn)題。

一、 MongoDB分片的架構(gòu)

MongoDB分片的架構(gòu)需要依賴MongoDB的復(fù)制集為基礎(chǔ)來(lái)實(shí)現(xiàn),下圖展示了分片的體系架構(gòu)。

從圖中可以看出,MongoDB的分片主要包含以下幾個(gè)組成的部分:

  • 前端路由服務(wù)器:Router,客戶端應(yīng)用程序從Router接入MongoDB分片集群。Router可以讓分片集群看上去像一個(gè)單一的數(shù)據(jù)庫(kù)。Router通過(guò)mongos的命令來(lái)啟動(dòng)。
  • 配置服務(wù)器:Config Server,負(fù)責(zé)存儲(chǔ)MongoDB分片的元信息以及后端的分片服務(wù)器信息。從MongoDB 3.4的版本開(kāi)始,Config Server必須配置成一個(gè)復(fù)制集的形式。
  • 分片服務(wù)器:Shard Server,負(fù)責(zé)存儲(chǔ)實(shí)際的數(shù)據(jù)塊。在實(shí)際生產(chǎn)環(huán)境中一個(gè)Shard Server可以由幾臺(tái)服務(wù)器組成一個(gè)復(fù)制集,從而防止主機(jī)單點(diǎn)故障造成數(shù)據(jù)的丟失。分片服務(wù)器也必須是一個(gè)復(fù)制集的形式。

點(diǎn)擊這里查看視頻講解:【趙渝強(qiáng)老師】MongoDB的分布式存儲(chǔ)架構(gòu)

二、 【實(shí)戰(zhàn)】部署MongoDB分片

在了解到了MongoDB分片的架構(gòu)與組成以后,下表列舉了MongoDB分片中的各個(gè)節(jié)點(diǎn)信息。

提示:表中列舉的的信息是MongoDB分片架構(gòu)的最簡(jiǎn)信息。
例如這里的前端路由服務(wù)器只使用了一個(gè)節(jié)點(diǎn)來(lái)實(shí)現(xiàn),
在實(shí)際的生產(chǎn)環(huán)境中可以搭建多個(gè)節(jié)點(diǎn)前端路由服務(wù)器。

下面通過(guò)具體的步驟來(lái)演示如何部署一個(gè)MongoDB的分片。

(1)創(chuàng)建各個(gè)節(jié)點(diǎn)數(shù)據(jù)的存儲(chǔ)路徑。

mkdir -p /data/27017
mkdir -p /data/37017
mkdir -p /data/37018
mkdir -p /data/47017
mkdir -p /data/47018

(2)創(chuàng)建前端路由服務(wù)器的配置信息文件/data/27017/mongos.conf

port=27017
fork=true
logpath=/data/27017/mongos.log
configdb=myshardingconfig/127.0.0.1:37017,127.0.0.1:37018
其中:configdb用于指定配置服務(wù)器的地址。

(3)創(chuàng)建第一個(gè)配置服務(wù)器的配置信息文件/data/37017/mongo_configsvr_37017.conf

dbpath=/data/37017 
port=37017 
fork=true
logpath=/data/37017/configsvr37017.log
replSet=myshardingconfig
configsvr=true
其中:configsvr=true,表示這是一臺(tái)配置服務(wù)器。

(4)創(chuàng)建第一個(gè)配置服務(wù)器的配置信息文件/data/37018/mongo_configsvr_37018.conf

dbpath=/data/37018
port=37018 
fork=true
logpath=/data/37018/configsvr37018.log
replSet=myshardingconfig
configsvr=true

(5)創(chuàng)建第一個(gè)分片服務(wù)器的配置信息文件/data/47017/mongo_shardsvr_47017.conf

dbpath=/data/47017
port=47017 
fork=true
logpath=/data/47017/shardsvr47017.log
shardsvr=true
replSet=myshardone
其中:shardsvr=true,表示這是一臺(tái)分片服務(wù)器。

(6)創(chuàng)建第二個(gè)分片服務(wù)器的配置信息文件/data/47018/mongo_shardsvr_47018.conf

dbpath=/data/47018
port=47018
fork=true
logpath=/data/47018/shardsvr47018.log
shardsvr=true
replSet=myshardtwo

(7)啟動(dòng)所有的MongoDB實(shí)例。

mongod --config /data/37017/mongo_configsvr_37017.conf
mongod --config /data/37018/mongo_configsvr_37018.conf
mongod --config /data/47017/mongo_shardsvr_47017.conf
mongod --config /data/47018/mongo_shardsvr_47018.conf

(8)啟動(dòng)前端路由服務(wù)器

mongos --config /data/27017/mongos.conf

(9)使用mongoshell連接37017端口上的MongoDB實(shí)例完成配置服務(wù)器復(fù)制集的初始化。

mongo --port 37017

(10)將37017和37018端口上的MongoDB實(shí)例加入復(fù)制集中。

> cfg = {"_id":"myshardingconfig",
	   "members":[{"_id":0,"host":"127.0.0.1:37017"},
				  {"_id":1,"host":"127.0.0.1:37018"}]}
> rs.initiate(cfg)

(11)查看復(fù)制集myshardingconfig的狀態(tài)信息。

> rs.status()
# 輸出的信息如下:
......
"members" : [
	{
		"_id" : 0,
		"name" : "127.0.0.1:37017",
		"health" : 1,
		"state" : 1,
		"stateStr" : "PRIMARY",
		......
	},
	{
		"_id" : 1,
		"name" : "127.0.0.1:37018",
		"health" : 1,
		"state" : 2,
		"stateStr" : "SECONDARY",
		......
	}
],
......

(12)使用mongoshell連接前端路由服務(wù)器。

mongo

(13)查看MongoDB分片服務(wù)器的信息。

> sh.status()
# 輸出的信息如下:
--- Sharding Status --- 
  sharding version: {
  	"_id" : 1,
  	"minCompatibleVersion" : 5,
  	"currentVersion" : 6,
  	"clusterId" : ObjectId("624d60d6675d42fb9b900362")
  }
  shards:   			--> 此處還沒(méi)有添加任何的分片服務(wù)器地址信息。
  active mongoses:
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled: yes
        Currently running: no
        Failed balancer rounds in last 5 attempts: 0
        Migration results for the last 24 hours: 
                No recent migrations
  databases:
        { "_id" : "config", "primary" : "config","partitioned" :true}

(14)初始化47017上的復(fù)制集。

> cfg = {"_id":"myshardone", 
       "members":[{"_id":0,"host":"127.0.0.1:47017"}]}
> rs.initiate(cfg)

(15)初始化47018上的復(fù)制集。

> cfg = {"_id":"myshardtwo", 
       "members":[{"_id":0,"host":"127.0.0.1:47018"}]}
> rs.initiate(cfg)

(16)添加分片服務(wù)器

> sh.addShard("myshardone/127.0.0.1:47017")
> sh.addShard("myshardtwo/127.0.0.1:47018")

(17)重新查看MongoDB分片的信息。

> sh.status()
# 輸出的信息如下:
--- Sharding Status --- 
  sharding version: {
  	"_id" : 1,
  	"minCompatibleVersion" : 5,
  	"currentVersion" : 6,
  	"clusterId" : ObjectId("624d60d6675d42fb9b900362")
  }
  shards:  --> 分片中的服務(wù)器地址。
		{"_id":"myshardone","host":"myshardone/127.0.0.1:47017",
"state":1,"topologyTime":Timestamp(1649238845,3)}
		{"_id":"myshardtwo","host":"myshardtwo/127.0.0.1:47018",
"state":1,"topologyTime":Timestamp(1649238865,3)}
  active mongoses:
        "5.0.6" : 1
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled: yes
        Currently running: no
        Failed balancer rounds in last 5 attempts: 0
        Migration results for the last 24 hours: 
                No recent migrations
  databases:
        {"_id":"config","primary":"config","partitioned" : true }

(18)添加一個(gè)分片數(shù)據(jù)庫(kù)。

> sh.enableSharding("myshardDB")

(19)查看分片數(shù)據(jù)庫(kù)的信息。

> sh.status()
# 輸出的信息如下:
......
databases:
	{  "_id" : "config",  "primary" : "config",  "partitioned" : true }
			config.system.sessions
					shard key: { "_id" : 1 }
					unique: false
					balancing: true
					chunks:
					myshardone	992
					myshardtwo	32
			too many chunks to print, use verbose if you want to force print
	{  "_id" : "myshardDB",  "primary" : "myshardtwo",  
"partitioned" : true,  
"version":{"uuid": UUID("4c640f1f-77fe-45a6-92b4-b7c90692b845"), 
	 "timestamp" : Timestamp(1649239126, 36),
  "lastMod" : 1 } }

(20)修改數(shù)據(jù)分片的大小。

> use config
> db.settings.save( { _id:"chunksize", value:1})
注意:默認(rèn)情況下,分片大?。╟hunk size)是64M。只有達(dá)到了分片的大小,才會(huì)進(jìn)行分片。

(21)開(kāi)啟集合上數(shù)據(jù)的分片。

> sh.shardCollection("myshardDB.table1",{"_id":1})
提示:這里使用了插入文檔的_id作為片鍵來(lái)實(shí)現(xiàn)文檔的分布式存儲(chǔ)。

(22)在數(shù)據(jù)庫(kù)myshardDB中創(chuàng)建集合,并插入10萬(wàn)條文檔

> use myshardDB
> for(var i = 1; i <= 100000; i++)
{db.table1.insert({"_id":i,"action":"write","iteration no:":i});}

(23)再次查看分片數(shù)據(jù)庫(kù)的信息。

> sh.status()
# 輸出的信息如下:
......
myshardDB.table1
		shard key: { "_id" : 1 }
		unique: false
		balancing: true
		chunks:
				myshardone	6
				myshardtwo	1
{"_id":{"$minKey":1}}-->>{"_id":2} on:myshardone Timestamp(2,0)
{"_id":	   2}-->>{"_id":20241} on:myshardtwo Timestamp(3,1)
{"_id":20241}-->>{"_id":37933} on:myshardone Timestamp(3,2)
{"_id":37933}-->>{"_id":55627} on:myshardone Timestamp(3,4)
{"_id":55627}-->>{"_id":74150} on:myshardone Timestamp(3,6)
{"_id":74150}-->>{"_id":91829} on:myshardone Timestamp(3,8)
{"_id":91829}-->>{"_id":{"$maxKey":1}}on:myshardoneTimestamp(3,9)
......

從輸出的信息可以看出,id值在{2,20241}的數(shù)據(jù)存儲(chǔ)在了myshardtwo 的復(fù)制集上;而其他id值對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)在了myshardone的復(fù)制集上。因此可以得出結(jié)論,數(shù)據(jù)實(shí)現(xiàn)了分布式存儲(chǔ)但效果不是很好。為了實(shí)現(xiàn)更好的數(shù)據(jù)分布式存儲(chǔ)應(yīng)當(dāng)合理地選擇片鍵。

到此這篇關(guān)于MongoDB的分布式存儲(chǔ)架構(gòu)的文章就介紹到這了,更多相關(guān)MongoDB分布式存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mongodb啟動(dòng)命令參數(shù)中文說(shuō)明

    Mongodb啟動(dòng)命令參數(shù)中文說(shuō)明

    這篇文章主要介紹了Mongodb啟動(dòng)命令參數(shù)中文說(shuō)明,本文包括基本配置、主/從參數(shù)、Sharding(分片)選項(xiàng)等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • MongoDB存儲(chǔ)路徑的配置指南

    MongoDB存儲(chǔ)路徑的配置指南

    文章介紹了如何在不同操作系統(tǒng)(Ubuntu、Windows、macOS)上配置MongoDB的存儲(chǔ)路徑,包括通過(guò)修改配置文件和使用啟動(dòng)參數(shù)兩種方法,需要的朋友可以參考下
    2026-02-02
  • SpringBoot?整合mongoDB并自定義連接池的示例代碼

    SpringBoot?整合mongoDB并自定義連接池的示例代碼

    這篇文章主要介紹了SpringBoot?整合mongoDB并自定義連接池?,整合mongoDB的目的就是想用它給我們提供的mongoTemplate,它可以很容易的操作mongoDB數(shù)據(jù)庫(kù),對(duì)整合過(guò)程及實(shí)例代碼感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • MongoDB使用自帶的命令行工具進(jìn)行備份和恢復(fù)的教程

    MongoDB使用自帶的命令行工具進(jìn)行備份和恢復(fù)的教程

    這篇文章主要介紹了MongoDB使用自帶的命令行工具進(jìn)行備份和恢復(fù)的教程,我們只需要在命令行界面中用簡(jiǎn)單的命令操作mongorestore和mongodump工具就可以實(shí)現(xiàn),需要的朋友可以參考下
    2016-06-06
  • MongoDB中查詢(find操作符)詳細(xì)指南

    MongoDB中查詢(find操作符)詳細(xì)指南

    MongoDB是領(lǐng)先的NoSQL數(shù)據(jù)庫(kù)之一,以其快速的性能,靈活的模式,可伸縮性和強(qiáng)大的索引功能而聞名,下面這篇文章主要給大家介紹了關(guān)于MongoDB中查詢(find操作符)的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • mongodb的安裝使用和pymongo基本使用教程

    mongodb的安裝使用和pymongo基本使用教程

    這篇文章主要介紹了mongodb的安裝使用和pymongo基本使用教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-07-07
  • MongoDB 3.6.5常見(jiàn)的安裝失敗原因和解決辦法

    MongoDB 3.6.5常見(jiàn)的安裝失敗原因和解決辦法

    在開(kāi)發(fā)過(guò)程中,可能會(huì)用到 MongoDB 數(shù)據(jù)庫(kù),在進(jìn)行MongoDB的安裝過(guò)程中,可能會(huì)遇到各種各樣的問(wèn)題導(dǎo)致安裝失敗,本文將針對(duì)常見(jiàn)的安裝失敗情況(,例如端口占用、系統(tǒng)文件問(wèn)題和版本兼容問(wèn)題等)進(jìn)行分析,并提供解決方案和相應(yīng)的代碼示例
    2024-03-03
  • MongoDB查詢字段沒(méi)有創(chuàng)建索引導(dǎo)致的連接超時(shí)異常解案例分享

    MongoDB查詢字段沒(méi)有創(chuàng)建索引導(dǎo)致的連接超時(shí)異常解案例分享

    這篇文章主要介紹了MongoDB查詢字段沒(méi)有創(chuàng)建索引導(dǎo)致的連接超時(shí)異常解案例分享,本文是生產(chǎn)環(huán)境下總結(jié)而來(lái),需要的朋友可以參考下
    2014-10-10
  • MongoDB 數(shù)據(jù)庫(kù)的命名、設(shè)計(jì)規(guī)范詳解

    MongoDB 數(shù)據(jù)庫(kù)的命名、設(shè)計(jì)規(guī)范詳解

    隨著MongoDB的普及和使用量的快速增長(zhǎng),為了規(guī)范使用,便于管理和獲取更高的性能,整理此文檔
    2020-02-02
  • 把MongoDB作為循環(huán)隊(duì)列的方法詳解

    把MongoDB作為循環(huán)隊(duì)列的方法詳解

    這篇文章主要給大家介紹了關(guān)于把MongoDB作為循環(huán)隊(duì)列的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

宿松县| 海城市| 内黄县| 海安县| 吉木乃县| 依安县| 伊金霍洛旗| 冷水江市| 广汉市| 息烽县| 孙吴县| 梓潼县| 凤翔县| 宽城| 龙门县| 佛坪县| 岳普湖县| 正安县| 隆化县| 灌云县| 罗城| 屏南县| 始兴县| 河南省| 烟台市| 湖州市| 商河县| 肥城市| 荣成市| 松潘县| 永康市| 灵石县| 鲜城| 延长县| 钦州市| 沾化县| 海宁市| 谷城县| 浑源县| 雅安市| 青田县|