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