MongoDB學習筆記系列:(九) 分片

一、概念:分片是指將數據拆分,分散到不一樣的數據庫實例上進行「負載分流」的作法。
      咱們常說的「分表」、「分庫」、「分區」等概念都屬於分片的實際體現。
二、片鍵
 2.一、概念:
  設置分片時,須要從集合裏面選一個鍵,用該鍵的值做爲數據拆分的依據。
  這個鍵稱爲片鍵(shard key)。片鍵就是分片的依據。
 2.二、片鍵的選擇:
 (1)、遞增片鍵:連續、不均勻、寫入集中、分流較差。
 (2)、隨機片鍵:不連續、均勻、寫入分散、分流較好。
 2.三、普通的集合,利用key爲片鍵進行自動分片後的結果,以下圖所示:
         mongodb

三、分片架構圖,以下所示:數據庫

        

    用戶:表明客戶端。
    路由:表明路由服務器,它會根據管理員設置的「片鍵」,將數據分攤到本身管理的mongod集羣。
    配置服務器:它將存儲數據和片的對應關係以及相應的配置信息,即分片集羣的配置信息。 
    Shard01片區: 一個普通的數據庫實例,若是不分片,咱們會直接連上mongod數據庫。服務器

四、自動分片
 傳統的分片作法是手工分表、分庫。
 自動分片技術是根據指定的「片鍵」,自動拆分數據並維護數據,請求路由的過程。架構

五、什麼時候使用分片?
 (1)、機器的磁盤空間不足。
 (2)、單個的mongodb服務器已經不能知足大量的插入操做。
 (3)、想把大量數據放到內存中提升性能。
六、創建分片
(1)、建立一個配置服務器
(2)、建立路由服務器,而且鏈接配置服務器
  路由器是調用mongos命令
(3)、添加兩個分片數據庫
  1111和2222
(4)、利用路由爲集羣添加分片(容許本地訪問)
 切記以前不能使用任何數據庫語句。
 db.runCommand({addshard:"127.0.0.1:1111",allowLocal:true});
 db.runCommand({addshard:"127.0.0.1:2222",allowLocal:true});
(5)、打開數據庫分片功能(必須使用admin用戶執行命令語句)
 注意:必定要在打開分片功能以後,才建立數據庫和集合,不然分片不起做用。
 爲業務數據庫foobar打開分片功能,示例以下:
 db.runCommand({"enablesharding":"foobar"});
(6)、對集合進行分片(必須使用admin用戶執行命令語句)
   db.runCommand({"shardcollection":"foobar.persons","key":{"_id":1}})
(7)、利用大量數據進行測試(800000條)
 function add(){
 for(var i=0;i<800000;i++)
 {
  db.persons.insert({"number":i,"age":10,"name":"Jim"+i})
 }
 }
七、管理分片
7.一、配置集合
 如下命令,須要在配置服務器中config數據庫中執行。
 (1)、分片:db.shards.find();
 (2)、數據庫:db.databases.find();
 (3)、塊:db.chunks.find();

7.二、分片命令
 (1)、得到概要:db.printShardingStatus();
 (2)、刪除片:db.runCommand({"removeshard":"127.0.0.1:1111"});ide

八、生產配置
 8.一、配置服務器集羣
性能

 8.二、分片和副本集測試

相關文章
相關標籤/搜索