sql >> Databáze >  >> NoSQL >> MongoDB

Sdílená kolekce MongoDB se nerebalancuje

Když v MongoDB přejdete na střežený systém a nevidíte žádné vyvážení, může to být jedna z několika věcí.

  1. Možná nemáte dostatek dat ke spuštění vyvažování. To rozhodně nebyla vaše situace, ale někteří lidé si možná neuvědomují, že s výchozí velikostí části 64 MB může vkládání dat chvíli trvat, než bude dostatek k rozdělení a vyvážení některých z nich na jiné části.

  2. Balancér možná neběžel – protože se vaše ostatní sbírky vyrovnávaly, bylo to ve vašem případě nepravděpodobné, pokud tato sbírka nebyla z nějakého důvodu rozbita jako poslední poté, co byl balancer zastaven.

  3. Kousky ve vaší sbírce nelze přesunout. K tomu může dojít, když není shard klíč dostatečně zrnitý, aby rozdělil data na dostatečně malé části. Ukázalo se, že to byl váš případ, protože se ukázalo, že váš úlomkový klíč není pro tuto velkou sbírku dostatečně zrnitý – máte 105 kusů (což pravděpodobně odpovídá počtu jedinečných hodnot job_id) a více než 30 GB dat. Když jsou kusy příliš velké a vyvažovačka s nimi nemůže pohnout, označí je jako „jumbo“ (takže se nebude točit svými koly při pokusu o jejich migraci).

Jak se zotavit ze špatného výběru střepinového klíče? Normálně je velmi bolestivé měnit shard klíč – protože je shard klíč neměnný, musíte provést ekvivalent úplné migrace dat, abyste je dostali do kolekce s jiným shard klíčem. Ve vašem případě je však sbírka stále na jednom úlomku, takže by mělo být relativně snadné sbírku „odtrhnout“ a předělat ji novým úlomkovým klíčem. Protože počet job_ids je relativně malý, doporučoval bych použít běžný index pro fragmentaci job_id,customer_code, protože na to pravděpodobně dotazujete a hádám, že je to vždy nastaveno při vytváření dokumentu.




  1. automatické zvýšení ID v mongoose

  2. Jak převést BSON Timestamp z Mongo changestream na datum?

  3. Dotaz mongo pro zjištění změn hodnot v časových řadách

  4. Mongodb, sharding a služby pro více oken