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

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

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

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

提示:單個MongoDB復(fù)制集中的節(jié)點不能超過12個節(jié)點。
因此復(fù)制集從本質(zhì)上并不能解決數(shù)據(jù)海量存儲的問題。

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

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

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

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

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

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

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

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

下面通過具體的步驟來演示如何部署一個MongoDB的分片。

(1)創(chuàng)建各個節(jié)點數(shù)據(jù)的存儲路徑。

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)建第一個配置服務(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,表示這是一臺配置服務(wù)器。

(4)創(chuàng)建第一個配置服務(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)建第一個分片服務(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,表示這是一臺分片服務(wù)器。

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

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

(7)啟動所有的MongoDB實例。

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)啟動前端路由服務(wù)器

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

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

mongo --port 37017

(10)將37017和37018端口上的MongoDB實例加入復(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:   			--> 此處還沒有添加任何的分片服務(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)添加一個分片數(shù)據(jù)庫。

> sh.enableSharding("myshardDB")

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

> 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})
注意:默認情況下,分片大?。╟hunk size)是64M。只有達到了分片的大小,才會進行分片。

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

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

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

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

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

> 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ù)存儲在了myshardtwo 的復(fù)制集上;而其他id值對應(yīng)的數(shù)據(jù)存儲在了myshardone的復(fù)制集上。因此可以得出結(jié)論,數(shù)據(jù)實現(xiàn)了分布式存儲但效果不是很好。為了實現(xiàn)更好的數(shù)據(jù)分布式存儲應(yīng)當合理地選擇片鍵。

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

相關(guān)文章

  • Mongodb啟動命令參數(shù)中文說明

    Mongodb啟動命令參數(shù)中文說明

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

    MongoDB存儲路徑的配置指南

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

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

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

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

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

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

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

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

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

    MongoDB 3.6.5常見的安裝失敗原因和解決辦法

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

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

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

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

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

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

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

最新評論

上饶县| 遂昌县| 巴彦县| 桂平市| 永福县| 新平| 银川市| 乌拉特中旗| 巴彦淖尔市| 临沂市| 嘉善县| 农安县| 横山县| 古蔺县| 修水县| 平山县| 达孜县| 新干县| 江华| 唐海县| 高台县| 会宁县| 绥德县| 蒙山县| 循化| 新野县| 新郑市| 台北市| 德兴市| 广河县| 中西区| 凤山县| 乐陵市| 德昌县| 左云县| 中方县| 巨鹿县| 嫩江县| 同心县| 澜沧| 龙井市|