sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB sharded samling rebalancerer ikke

I MongoDB, når du går til et fragmenteret system, og du ikke ser nogen balancering, kan det være en af ​​flere ting.

  1. Du har muligvis ikke nok data til at udløse balancering. Det var bestemt ikke din situation, men nogle mennesker er måske ikke klar over, at med standard chunk-størrelse på 64 MB kan det tage et stykke tid at indsætte data, før der er nok til at opdele og balancere noget af det til andre chunks.

  2. Balanceren har muligvis ikke kørt - da dine andre samlinger var ved at blive balanceret, var det usandsynligt i dit tilfælde, medmindre denne samling blev sønderdelt sidst, efter at balanceren af ​​en eller anden grund blev stoppet.

  3. Klumperne i din samling kan ikke flyttes. Dette kan ske, når shard-nøglen ikke er granulær nok til at opdele dataene i små nok bidder. Som det viser sig, var dette din sag, fordi din shard-nøgle viste sig ikke at være granulær nok til denne store samling - du har 105 bidder (hvilket sandsynligvis svarer til antallet af unikke job_id-værdier) og over 30 GB data. Når bidderne er for store, og balanceren ikke kan flytte dem, mærker den dem som "jumbo" (så den vil ikke dreje sine hjul, når de forsøger at migrere dem).

Hvordan kommer man sig efter et dårligt valg af en shard-nøgle? Normalt er det meget smertefuldt at ændre shard-nøglen - da shard-nøglen er uforanderlig, skal du udføre det svarende til en fuld datamigrering for at få det ind i en samling med en anden shard-nøgle. Men i dit tilfælde er samlingen stadig på ét shard, så det burde være relativt nemt at "afskære" samlingen og omskære den med en ny shard-nøgle. Da antallet af job_id'er er relativt lille, vil jeg anbefale at bruge et almindeligt indeks til at skære på job_id,customer_code, da du sandsynligvis forespørger på det, og jeg gætter på, at det altid er indstillet på tidspunktet for oprettelse af dokumenter.




  1. Angivelse af samlingsnavn med MongoEngine

  2. Hvordan tæller man forekomsten af ​​hver værdi i array?

  3. find id for seneste underdokument indsat i mongoose

  4. Hvordan indlejrer jeg et løfte i en anden løftefunktion i node.js?