MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

La collection fragmentée MongoDB ne se rééquilibre pas

Dans MongoDB, lorsque vous accédez à un système partagé et que vous ne voyez aucun équilibrage, cela peut être l'une des choses suivantes.

  1. Vous ne disposez peut-être pas de suffisamment de données pour déclencher l'équilibrage. Ce n'était certainement pas votre situation, mais certaines personnes ne se rendent peut-être pas compte qu'avec une taille de bloc par défaut de 64 Mo, l'insertion de données peut prendre un certain temps avant qu'il n'y en ait assez pour en diviser et en équilibrer une partie avec d'autres blocs.

  2. L'équilibreur n'a peut-être pas fonctionné - puisque vos autres collections étaient en cours d'équilibrage, ce qui était peu probable dans votre cas, à moins que cette collection n'ait été fragmentée en dernier après l'arrêt de l'équilibreur pour une raison quelconque.

  3. Les morceaux de votre collection ne peuvent pas être déplacés. Cela peut se produire lorsque la clé de partition n'est pas suffisamment précise pour diviser les données en morceaux suffisamment petits. Il s'avère que c'était votre cas car votre clé de partition s'est avérée ne pas être suffisamment granulaire pour cette grande collection - vous avez 105 morceaux (ce qui correspond probablement au nombre de valeurs job_id uniques) et plus de 30 Go de données. Lorsque les morceaux sont trop volumineux et que l'équilibreur ne peut pas les déplacer, il les marque comme "jumbo" (afin qu'il ne fasse pas tourner ses roues en essayant de les migrer).

Comment se remettre d'un mauvais choix de clé shard ? Normalement, il est très pénible de changer la clé de partition - puisque la clé de partition est immuable, vous devez faire l'équivalent d'une migration complète des données pour l'intégrer à une collection avec une autre clé de partition. Cependant, dans votre cas, la collection est toujours sur une seule partition, il devrait donc être relativement facile de "décomposer" la collection et de la repartitionner avec une nouvelle clé de partition. Parce que le nombre de job_ids est relativement petit, je recommanderais d'utiliser un index régulier pour shard sur job_id,customer_code puisque vous interrogez probablement à ce sujet et je suppose qu'il est toujours défini au moment de la création du document.