2013-07-24 4 views
2

Je travaille sur une implémentation de test MongoDB dans laquelle j'essaie d'insérer en bloc 1 000 000 enregistrements dans une collection et de la répartir de façon égale entre deux fragments. Mes essais initiaux ont vu un fragment contenant 995760 enregistrements et l'autre fragment contenant seulement 4251 enregistrements. J'ai essayé de pré-séparer mais cela n'a rien changé. Je suis nouveau au concept de sharding et apprécierais n'importe quelle aide sur le sujet.Le partitionnement de MongoDB ne distribue pas de manière optimale

MISE À JOUR:

Ma clé tesson dans le champ "numéro" qui est un entier que j'ai de 1 - 999999

Statut:

{ 
"sharded" : true, 
"ns" : "test.test_collection", 
"count" : 999999, 
"numExtents" : 21, 
"size" : 43982976, 
"storageSize" : 210247680, 
"totalIndexSize" : 60396112, 
"indexSizes" : { 
    "_id_" : 32466896, 
    "number_1" : 27929216 
}, 
"avgObjSize" : 43.983019983019986, 
"nindexes" : 2, 
"nchunks" : 239, 
"shards" : { 
    "firstset" : { 
     "ns" : "test.test_collection", 
     "count" : 995754, 
     "size" : 43813176, 
     "avgObjSize" : 44, 
     "storageSize" : 123936768, 
     "numExtents" : 11, 
     "nindexes" : 2, 
     "lastExtentSize" : 37625856, 
     "paddingFactor" : 1, 
     "systemFlags" : 1, 
     "userFlags" : 0, 
     "totalIndexSize" : 60118128, 
     "indexSizes" : { 
      "_id_" : 32319728, 
      "number_1" : 27798400 
     }, 
     "ok" : 1 
    }, 
    "secondset" : { 
     "ns" : "test.test_collection", 
     "count" : 4245, 
     "size" : 169800, 
     "avgObjSize" : 40, 
     "storageSize" : 86310912, 
     "numExtents" : 10, 
     "nindexes" : 2, 
     "lastExtentSize" : 27869184, 
     "paddingFactor" : 1, 
     "systemFlags" : 1, 
     "userFlags" : 0, 
     "totalIndexSize" : 277984, 
     "indexSizes" : { 
      "_id_" : 147168, 
      "number_1" : 130816 
     }, 
     "ok" : 1 
    } 
}, 
"ok" : 1 
} 

MISE À JOUR 2:

Merci à @Sammaye pour la suggestion. Le problème avait à voir avec ma clé de partition. Lorsque j'ai haché la clé, l'encart en vrac a divisé les enregistrements uniformément. Merci pour votre aide!

+0

Nous allons avoir besoin de beaucoup d'informations ici, pouvez-vous commencer par éditer avec 'status()'? Dites-nous aussi quelle est la clé de votre tesson – Sammaye

+0

Une chose que j'ai notée est que votre clé de fragment est montonicienne, ce qui signifie qu'elle va de 1-999.999, cela pourrait signifier que sharding fonctionne comme prévu et que shard 1 est devenu plein et en tant que tel a débordé à 2. Si vous avez essayé les clés hachées, cela change-t-il la distribution de vos données? – Sammaye

+0

Quand vous dites hacher la clé de partition, je suppose que vous voulez dire hacher sur une clé qui a été hachée afin d'obtenir une répartition égale? Ou voulez-vous dire qu'il y a un drapeau sur la configuration de sharding qui vous permet d'activer le hachage? – Rich

Répondre

1

Il faut généralement du temps pour que le cluster devienne équilibré. Si vous avez entré tous ces documents dans un gros encart, ils seront d'abord tous écrits dans le fragment primaire et seront divisés en morceaux dès qu'ils atteindront la taille max. Les morceaux sont ensuite migrés vers l'autre fragment un par un, ce qui peut prendre un certain temps. D'après ce que je peux voir, vous avez environ 100 Mo de données, mais 429 morceaux, ce qui est un peu étrange? Qu'avez-vous défini comme taille de bloc? Une taille de bloc trop petite peut certainement ralentir la migration des morceaux vers l'autre fragment.

Questions connexes