2016-11-25 45 views
1

我正在學習用MongoDB的分片,我有後續的結構:爲什麼當我添加新的集合只是一個碎片獲取數據? - MongoDB的

  • 1的mongod我ConfigServer只有1名成員在ReplicaSet每個
  • 2碎片有2名成員在ReplicaSet
  • 1 Mongos

我有一個名爲ERP的一個數據庫,3集,pessoas,produtos和contatos。

所以我必須使用加我的收藏:

sh.shardCollection("erp.<collection>", { id: 1 }, true) 

我收集pessoas開始,這個系列有2000個文檔和分佈是這樣的:

mongos> db.pessoas.getShardDistribution() 

Shard rs1 at rs1/desenv1:27019,desenv1:27020 
data : 57KiB docs : 1497 chunks : 36 
estimated data per chunk : 1KiB 
estimated docs per chunk : 41 

Shard rs3 at rs3/desenv1:27022,desenv1:27023 
data : 19KiB docs : 503 chunks : 36 
estimated data per chunk : 541B 
estimated docs per chunk : 13 

Totals 
data : 77KiB docs : 2000 chunks : 72 
Shard rs1 contains 75.27% data, 74.85% docs in cluster, avg obj size on  shard : 39B 
Shard rs3 contains 24.72% data, 25.15% docs in cluster, avg obj size on shard : 38B" 

在此之後我加入收藏產品,我給了她1001個寄存器,那麼爲什麼這個系列是這樣分配的:

mongos> db.produtos.getShardDistribution() 

Shard rs1 at rs1/desenv1:27019,desenv1:27020 
data : 67KiB docs : 1001 chunks : 1 
estimated data per chunk : 67KiB 
estimated docs per chunk : 1001 

Totals 
data : 67KiB docs : 1001 chunks : 1 
Shard rs1 contains 100% data, 100% docs in cluster, avg obj size on shard : 69B" 

問題:

  • 爲什麼只有replicaSet 「RS1」 越來越的數據?同樣的事情發生與採集contatos,只有replicaSet「RS1」獲取數據,我不能將數據分配到其他碎片。

  • 爲什麼出現這種情況,什麼我做錯了嗎?

  • 如何分配同樣的數據?例如,對於2000個寄存器,1000個寄存器位於一個分片中,1000個寄存器位於另一個分片中。

如果你們需要更多的信息,請告訴我。

感謝

回答

0

使用塊的數量,而不是文件(見https://docs.mongodb.com/v3.2/core/sharding-balancer-administration/)MongoDB的平衡碎片。因此,從您提供的輸出中,羣集是平衡的。碎片rs1包含36塊,並分片rs3還包含36塊爲pessoas集合。

如果文檔數量不平衡,這意味着您的插入將進入少量塊(甚至在最差情況下甚至是單個塊),而不是分佈在所有塊中。這通常是由於使用單調遞增的分片鍵造成的。

請參閱Shard Keys有關此主題的更多信息,以及如何避免這種情況。請注意,分片鍵選擇非常重要,因爲一旦選擇了分片鍵,它就不能再被改變。更改集合的分片鍵的唯一方法是轉儲集合,並在還原過程中更改分片鍵。

相關問題