1. 程式人生 > >mongoDB——自動分片介紹及簡單實現

mongoDB——自動分片介紹及簡單實現

      分片,是指將資料拆分,將其分散到不同的機器上。這樣的好處就是,不需要功能強大的大型計算機也可以儲存更多的資料,處理更大的負載。
      mongoDB的分片,是將collection的資料進行分割,然後將不同的部分分別儲存到不同的機器上。當collection所佔空間過大時,我們需要增加一臺新的機器,分片會自動將collection的資料分發到新的機器上。
     

      mongoDB分片的原理:

     

       mongos:客戶端只需要對mongos進行操作就行了,至於如何進行分片,不需要客戶端參與,由mongos和config來完成。

       mongod:一個普通的資料庫例項,如果不分片的話,我們直接連線的就是mongod。

        例項演示:

       首先準備四個mongodb伺服器,F:\mongos\     F:\mongodb1    F:\mongodb2   F:\mongodbConfig

       1. 開啟config伺服器

        因為mongos要把mongod之間的配置放到config伺服器裡面,所以,首先應該開啟config伺服器。

       

       2. 開啟mongos伺服器

         在開啟mongos時,指定config伺服器。

       

      3. 開啟mongod1,mongod2伺服器,對於分片來說,也就是要新增片了。

          

        

      4. 將27022和27023兩臺伺服器交給mongos管理

      runCommand執行新增分片

        

     下一步就是設定片鍵,也就是告訴mongos如何切分資料。首先用enablesharding()開啟資料庫分片功能,然後指定集合中分片的鍵。

        

      5. 執行資料,檢視效果

        通過mongos向資料庫中插入10w條資料,通過printShardingStatus命令檢視mongodb的資料分佈情況。

        

      shards:已分為了兩個片shard0000,shard0001

      databases:顯示admin未分片,test資料已分片,對user這個集合進行了分片,片鍵為name。

      chunks:顯示user集合被分成三塊:從無窮小到0,從0到9999,從9999-maskey。

分片機制增強了mongoDB的寫擴充套件性。使用分片機制能夠很好的解決下面幾個問題:

  •      儲存的資料接近或者超過一個單獨節點的儲存能力。
  •      系統有效工作集的大小將要超過系統的最大RAM
  •      系統有大量的寫操作。
     在之前介紹RDBNS和NoSql時,曾經說過,RDBMS並不擅長大資料量的寫入處理,因為資料之間存在關聯,為了進行join處理,RDBMS不得不把資料儲存在同一個伺服器內,這樣不利於資料的分散。而非關係型資料,原本就不支援join處理,各個資料之間是獨立設計的,很容易將資料分散到多個伺服器上。由於資料被分散到了多個伺服器上,減少了每個伺服器上的資料量,即使要進行大量資料的寫入操作,處理起來也是很容易的。