《Mongodb 分片》要點(diǎn):
本文介紹了Mongodb 分片,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
相關(guān)主題:非關(guān)系型數(shù)據(jù)庫(kù)
分片是指將數(shù)據(jù)拆分,并分散放在多個(gè)服務(wù)器中組成一個(gè)集群,這可以將N臺(tái)服務(wù)器的性能集中到一起來(lái)處理數(shù)據(jù),這將很大水平的提高數(shù)據(jù)處理的速度.
在Mongodb的分片中必需具備三個(gè)角色:
路由服務(wù)器:用于處理和響應(yīng)哀求,并把各個(gè)分片服務(wù)器查詢到的結(jié)果處理合并然后返回.
配置服務(wù)器(configServer):存儲(chǔ)集群、數(shù)據(jù)的描寫(xiě)信息.
分片服務(wù)器:用于儲(chǔ)存拆分的數(shù)據(jù)服務(wù)器.
而這三個(gè)角色都是普通的數(shù)據(jù)庫(kù),只是飾演的角色不一樣.
它們的哀求流程、響應(yīng)就如下圖中表示一樣:
因?yàn)樗械膽?yīng)用程序都是通過(guò)路由進(jìn)行哀求,所以對(duì)于應(yīng)用程序來(lái)說(shuō),它沒(méi)有什么不同就如哀求一個(gè)普通數(shù)據(jù)服務(wù)器一樣:
首先我們需要搭建配置服務(wù)器,配置服務(wù)器如同分片的大腦,保留著集群和數(shù)據(jù)的描述信息.
因?yàn)镸ongodb3.4版本后需要配置服務(wù)器必需配置為副本集,所以需要給配置服務(wù)器配置副本集,如果你還清楚如何搭建副本集,你可以試著看看我的上一篇文章《Mongodb 副本集》.
首先建立三個(gè)空的數(shù)據(jù)庫(kù)目錄,用于搭建配置服務(wù)器的副本集,并分別啟動(dòng)它們,在啟動(dòng)的時(shí)候必要加上我們副本集的名稱和--configsvr來(lái)表示這是一個(gè)配置服務(wù)器,并分別指定不同的端口.
然后通過(guò)mongo隨意進(jìn)入一個(gè)副本集成員,并為設(shè)置裝備擺設(shè)服務(wù)器的副本集進(jìn)行設(shè)置裝備擺設(shè):
$ mongo --port 27020 --host localhost
至此我們的設(shè)置裝備擺設(shè)服務(wù)器設(shè)置裝備擺設(shè)完成.
官方建議我們的分片服務(wù)區(qū)至少在3個(gè)或以上能力發(fā)揮出更好的性能,我們這里也創(chuàng)建三個(gè)分片服務(wù)器.
因?yàn)榉制?wù)器沒(méi)有強(qiáng)制要求必需是副本集,所以下面就創(chuàng)建了三個(gè)單機(jī)分片服務(wù)器,但是Mongodb接受分片服務(wù)器為副本集.
下面創(chuàng)建三個(gè)空數(shù)據(jù)庫(kù)目錄,然后啟動(dòng)它們,在啟動(dòng)的時(shí)候必要加上--shardsvr以表示這是一個(gè)分片服務(wù)器:
至此我們的分片服務(wù)器也搭建完成.
mongodb提供了一個(gè)路由工具,它會(huì)隨著我們下載包一起下載,名字為mongos或mongos.exe,通過(guò)它配置路由功能.啟動(dòng)路由我們必要加上參數(shù)--configdb,它的語(yǔ)法為:
--configdb 設(shè)置裝備擺設(shè)服務(wù)器副本集名稱/設(shè)置裝備擺設(shè)服務(wù)器1地址端口,設(shè)置裝備擺設(shè)服務(wù)器1地址端口...
啟動(dòng)路由,并為路由指定一個(gè)端口,用于開(kāi)放給客戶端鏈接:
$ mongos --configdb conServer/localhost:27020,localhost:27021,localhost:27022 --port 27040
至此路由已經(jīng)搭建完成.
設(shè)置裝備擺設(shè)分片服務(wù)器
通過(guò)mongodb提供的mongo進(jìn)入到路由服務(wù)器中進(jìn)行配置,把我們開(kāi)始創(chuàng)建的三個(gè)分片服務(wù)器通過(guò)sh.addShard()辦法添加進(jìn)行,這個(gè)辦法接受一個(gè)字符串里面的格式為host:port.
如果你可以通過(guò)rs.status()辦法中返回的shards字段看是否添加成功.
設(shè)置裝備擺設(shè)片鍵
到目前為止,分片服務(wù)器已經(jīng)搭建完成,但是目前分片服務(wù)器無(wú)法正常工作,我們所有的操作都將在隨機(jī)的一個(gè)主分片上操作,這是因?yàn)榉制?wù)器不知道怎么進(jìn)行分片,所以我們還需要配置片鍵來(lái)告訴分片服務(wù)器依照什么來(lái)分片.
分片是基于數(shù)據(jù)庫(kù)集合中的文檔的一個(gè)鍵進(jìn)行分片的,好比選擇username鍵,那么會(huì)根據(jù)這個(gè)鍵的順序就行分片,而mongodb會(huì)自動(dòng)平衡分片的數(shù)據(jù).
Mongodb要求作為片鍵的鍵必需是索引過(guò)的,所以我們?cè)诮⑵I之前需要對(duì)鍵進(jìn)行索引,建立后片鍵就是集合中的最重要的索引.
在生產(chǎn)情況中建議先想好數(shù)據(jù)建構(gòu)建立索引和片鍵后開(kāi)始操作數(shù)據(jù),這樣會(huì)減輕分片服務(wù)器的負(fù)載.
首先我們?cè)谛枰M(jìn)行分片的數(shù)據(jù)庫(kù)上開(kāi)啟分片功能,通過(guò)sh.enableSharding辦法開(kāi)啟.
然后在開(kāi)啟分片的數(shù)據(jù)庫(kù)中的test集合插入測(cè)試數(shù)據(jù),注意此時(shí)我們還沒(méi)有進(jìn)行配置片鍵,所以所有的數(shù)據(jù)操作都在分片服務(wù)器隨機(jī)分派的一個(gè)主分片上面進(jìn)行的.
這時(shí)候以u(píng)sername為片鍵,通過(guò)sh.shardCollection辦法進(jìn)行建立,它的語(yǔ)法為:
sh.shardCollection(namespace, key, unique, options)
首先給我們要樹(shù)立的片鍵樹(shù)立索引:
> db.test.ensureIndex({'username': 1});
然后樹(shù)立片鍵:
> sh.shardCollection('test.test', {username:1});
等待幾分鐘后,可以通過(guò)sh.status辦法查看數(shù)據(jù)分片的情況了,可以從中很清楚的看見(jiàn)哪些數(shù)據(jù)在哪個(gè)分片服務(wù)器上面,并且通過(guò)explain辦法來(lái)查看我們查詢的過(guò)程中哪些分片服務(wù)器參與了查詢.
文章摘自博客園
更多干貨保舉:
IT教育專業(yè)培訓(xùn):http://www.ujiuye.com/
IT職業(yè)在線教育:http://xue.ujiuye.com/
0元進(jìn)修web前端集訓(xùn)營(yíng):http://www.ujiuye.com/zt/webqianduan/?wt.bd=lsh11tt
《Mongodb 分片》是否對(duì)您有啟發(fā),歡迎查看更多與《Mongodb 分片》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/10229.html