2016-11-25 2 views
1

J'étudie sharding avec MongoDB et j'ai la structure suivante:Pourquoi quand j'ajoute de nouvelles collections, un seul fragment obtient les données? - MongoDB

  • 1 Mongod à mon ConfigServer avec seulement 1 membre en replicaSet
  • 2 Shards chacun avec 2 membres replicaSet
  • 1 Mongos

J'ai une base de données nommée erp et 3 collections, pessoas, produtos et contatos.

J'ai ajouté mes collections en utilisant:

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

Je commence par Pessoas de collecte, cette collection ont 2000 documents et sont distribués ainsi:

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" 

Après cela, je dois ajouter la collection produtos, et je lui ai donné 1001 registres, alors pourquoi cette collection sont distribués de cette façon:

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" 

Questions:

  • Pourquoi ne replicaSet "RS1" obtiennent des données? La même chose se produit avec les contatos de collection, seul le fichier "rs1" de replicaSet obtient les données et je ne peux pas distribuer les données à l'autre fragment. Pourquoi cela arrive-t-il et qu'est-ce que je fais de mal?

  • Comment puis-je répartir également les données? Par exemple avec 2000 registres, 1000 registres dans un fragment et 1000 dans l'autre fragment.

Si vous avez besoin de plus d'informations, dites-le moi.

Merci

Répondre

0

MongoDB équilibrent les tessons en utilisant le nombre de morceaux, pas de documents (voir https://docs.mongodb.com/v3.2/core/sharding-balancer-administration/). Par conséquent, à partir de la sortie que vous avez fournie, le cluster est équilibré. Le fragment rs1 contient 36 blocs et le fragment rs3 contient également 36 blocs pour la collection pessoas.

Si le nombre de documents n'est pas équilibré, cela signifie que vos insertions se retrouvent dans un petit nombre de segments (ou même un seul morceau dans le pire des cas), et non répartis sur tous les segments. Cela est généralement dû à l'utilisation d'une clé de partitionnement monotone.

S'il vous plaît voir Shard Keys pour plus d'informations sur ce sujet, et comment éviter cette situation. Notez que la sélection de la clé shard est très importante, car une fois qu'une clé shard est sélectionnée, elle ne peut plus être modifiée. La seule façon de modifier la clé de partition d'une collection consiste à vider la collection et à modifier la clé de partition pendant le processus de restauration.