第一節分片的概念

  分片(sharding)是指根據片鍵,將資料進行拆分,使其落在不同的機器上的過程。如此一來,不需要功能,配置等強大的機器,也能儲存大資料量,處理更高的負載。

 

第二節分片的原理和思想

  MongoDB分片的基本思想就是將集合切分成小塊。這些塊分散到若干片裡面,每個片只負責總資料的一部分。

  對於客戶端來說,無需知道資料被拆分了,也無需知道服務端哪個分片對應哪些資料。資料在分片之前需要執行一個路由程序,程序名為mongos。這個路由器知道所有資料的存放位置,知道資料和片的對應關係。對客戶端來說,它僅知道連線了一個普通的mongod,在請求資料的過程中,通過路由器上的資料和片的對應關係,路由到目標資料所在的片上,如果請求有了迴應,路由器將其收集起來回送給客戶端

 

 

第三節分片的簡單實現

1.片鍵的概念

  設定分片時,需要從集合裡面選一個鍵,用該鍵的值作為資料拆分的依據。這個鍵稱為片鍵(shard key)。{department:"IT",name:"zhangsan"},{department:"HR",name:"lisi"},{department:"SUPPORT",name:"zhaowu"}

  以該資料為例,表示的是職員名字以及所在的部門,假若我們設定部門(department)為片鍵,那麼第一片可能存放名稱以字母A-F開頭的部門,第二片存放名稱以G~P開頭的部門,第三片存Q~Z,如此類推。隨著新增或者刪除片,MongoDB會重新平衡資料,使每片的流量都比較均衡,資料量也在合理範圍內。

 

2.本地模擬實現

  a.首先mongod開啟服務端3個節點,埠分別為8080,8081,8082

  b.開啟config伺服器 。mongos要把mongod之間的配置放到config伺服器裡面,所以首先開啟它,這裡就使用8083埠。 命令為:mongod --dbpath E:\sharding\config_node --port 8083

  c、開啟mongos伺服器 。埠8084,同時指定下config伺服器。命令為:mongos --port 8084 --configdb=127.0.0.1:8083

  d.路由指定服務端節點。客戶端直接跟mongos打交道,也就說明我們要連線mongos伺服器,然後將8080,8081,8082的mongod交給mongos,新增分片也就是addshard()。需要進到路由節點的admin資料庫進行配置。allowLocal表示該服務端節點,可被客戶端直接連線而無需經過路由。

    db.runCommand({"addshard":"127.0.0.1:8080",allowLocal:true})

        db.runCommand({"addshard":"127.0.0.1:8081",allowLocal:true})

        db.runCommand({"addshard":"127.0.0.1:8082",allowLocal:true})

  e.開啟資料庫分片功能,命令為enablesharding(),並指定資料庫名稱,如下指定每個mongod都有的test資料庫

db.runCommand({"enablesharding":"test"})

  f.指定集合中分片的片鍵,這裡就指定為company.department鍵.      db.runCommand({"shardcollection":"company.department","key":{"depatment":1}})

  g.通過向mongos節點插入100萬條資料,檢視各節點儲存的資料。

  h.通過向mongos插入一條資料,檢視資料被分配到哪個片