MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Die fragmentierte MongoDB-Sammlung wird nicht neu ausgeglichen

Wenn Sie in MongoDB zu einem Shard-System gehen und keinen Ausgleich sehen, könnte dies eines von mehreren Dingen sein.

  1. Möglicherweise haben Sie nicht genügend Daten, um den Ausgleich auszulösen. Das war definitiv nicht Ihre Situation, aber einige Leute wissen vielleicht nicht, dass es bei einer Standard-Chunk-Größe von 64 MB eine Weile dauern kann, bis Daten eingefügt werden, bevor genug vorhanden ist, um einige davon aufzuteilen und auf andere Chunks auszugleichen.

  2. Der Ausgleicher wurde möglicherweise nicht ausgeführt - da Ihre anderen Sammlungen ausgeglichen wurden, war dies in Ihrem Fall unwahrscheinlich, es sei denn, diese Sammlung wurde zuletzt aufgeteilt, nachdem der Ausgleicher aus irgendeinem Grund gestoppt wurde.

  3. Die Chunks in Ihrer Sammlung können nicht verschoben werden. Dies kann passieren, wenn der Shard-Schlüssel nicht granular genug ist, um die Daten in ausreichend kleine Blöcke aufzuteilen. Wie sich herausstellte, war dies Ihr Fall, weil sich herausstellte, dass Ihr Shard-Schlüssel für diese große Sammlung nicht granular genug war – Sie haben 105 Chunks (was wahrscheinlich der Anzahl eindeutiger job_id-Werte entspricht) und über 30 GB an Daten. Wenn die Chunks zu groß sind und der Balancer sie nicht bewegen kann, markiert er sie als „Jumbo“ (damit die Räder beim Versuch, sie zu migrieren, nicht durchdrehen).

Wie kann man sich von einer schlechten Wahl eines Shard-Schlüssels erholen? Normalerweise ist es sehr schmerzhaft, den Shard-Schlüssel zu ändern – da der Shard-Schlüssel unveränderlich ist, müssen Sie eine vollständige Datenmigration durchführen, um ihn in eine Sammlung mit einem anderen Shard-Schlüssel zu bringen. In Ihrem Fall befindet sich die Sammlung jedoch immer noch auf einem Shard, sodass es relativ einfach sein sollte, die Sammlung zu „unsharden“ und sie mit einem neuen Shard-Schlüssel neu zu erstellen. Da die Anzahl der job_ids relativ gering ist, würde ich empfehlen, einen regulären Index zum Shard auf job_id,customer_code zu verwenden, da Sie wahrscheinlich danach fragen und ich vermute, dass er immer zum Zeitpunkt der Dokumenterstellung festgelegt wird.