8天学通MongoDB——第六天 分片技术
? ? ?在mongodb里面存在另一種集群,就是分片技術(shù),跟sql server的表分區(qū)類似,我們知道當(dāng)數(shù)據(jù)量達(dá)到T級別的時候,我們的磁盤,內(nèi)存
就吃不消了,針對這樣的場景我們該如何應(yīng)對。
?
一:分片
? ? ?mongodb采用將集合進(jìn)行拆分,然后將拆分的數(shù)據(jù)均攤到幾個片上的一種解決方案。
?
下面我對這張圖解釋一下:
? ? ?人臉: ? ? ? 代表客戶端,客戶端肯定說,你數(shù)據(jù)庫分片不分片跟我沒關(guān)系,我叫你干啥就干啥,沒什么好商量的。
? ? ?mongos: 首先我們要了解”片鍵“的概念,也就是說拆分集合的依據(jù)是什么?按照什么鍵值進(jìn)行拆分集合....
? ? ? ? ? ? ? ? ? ? ?好了,mongos就是一個路由服務(wù)器,它會根據(jù)管理員設(shè)置的“片鍵”將數(shù)據(jù)分?jǐn)偟阶约汗芾淼膍ongod集群,數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? 和片的對應(yīng)關(guān)系以及相應(yīng)的配置信息保存在"config服務(wù)器"上。
? ? mongod: ? 一個普通的數(shù)據(jù)庫實例,如果不分片的話,我們會直接連上mongod。
?
二: 實戰(zhàn)
? ? 首先我們準(zhǔn)備4個mongodb程序,我這里是均攤在C,D,E,F盤上,當(dāng)然你也可以做多個文件夾的形式。
1:開啟config服務(wù)器
? ? ? 先前也說了,mongos要把mongod之間的配置放到config服務(wù)器里面,理所當(dāng)然首先開啟它,我這里就建立2222端口。
?
2: 開啟mongos服務(wù)器
? ? 這里要注意的是我們開啟的是mongos,不是mongod,同時指定下config服務(wù)器,這里我就開啟D盤上的mongodb,端口3333。
?
3:啟動mongod服務(wù)器
? ? ?對分片來說,也就是要添加片了,這里開啟E,F盤的mongodb,端口為:4444,5555。
?
4: 服務(wù)配置
? ? 哈哈,是不是很興奮,還差最后一點配置我們就可以大功告成。
?<1> 先前圖中也可以看到,我們client直接跟mongos打交道,也就說明我們要連接mongos服務(wù)器,然后將4444,5555的mongod
? ? ? ? ?交給mongos,添加分片也就是addshard()。
這里要注意的是,在addshard中,我們也可以添加副本集,這樣能達(dá)到更高的穩(wěn)定性。
?
<2>片已經(jīng)集群了,但是mongos不知道該如何切分?jǐn)?shù)據(jù),也就是我們先前所說的片鍵,在mongodb中設(shè)置片鍵要做兩步
? ? ? ? ①:開啟數(shù)據(jù)庫分片功能,命令很簡單 enablesharding(),這里我就開啟test數(shù)據(jù)庫。
? ? ? ? ②:指定集合中分片的片鍵,這里我就指定為person.name字段。
?
5: 查看效果
好了,至此我們的分片操作全部結(jié)束,接下來我們通過mongos向mongodb插入10w記錄,然后通過printShardingStatus命令
查看mongodb的數(shù)據(jù)分片情況。
?這里主要看三點信息:
? ① shards: ? ? 我們清楚的看到已經(jīng)別分為兩個片了,shard0000和shard0001。
? ② databases: ?這里有個partitioned字段表示是否分區(qū),這里清楚的看到test已經(jīng)分區(qū)。
? ③ chunks: ? ? 這個很有意思,我們發(fā)現(xiàn)集合被砍成四段:
? ? ? ? ? ? ? ? ? ? ? ? ? ?無窮小 —— jack0,jack0 ——jack234813,jack234813——jack9999,jack9999——無窮大。
? ? ? ? ? ? ? ? ? ? ? ? ? ?分區(qū)情況為:3:1,從后面的 on shardXXXX也能看得出。
轉(zhuǎn)載于:https://www.cnblogs.com/huangxincheng/archive/2012/03/07/2383284.html
總結(jié)
以上是生活随笔為你收集整理的8天学通MongoDB——第六天 分片技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu 安装sun-java5-j
- 下一篇: struts2+kindeditor4.