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

MongoDB-skår og ubalancerede aggregeringsbelastninger

Aggregeringsrammen er et vigtigt tandhjul i MongoDB-infrastrukturen. Det hjælper dig med at analysere, opsummere og aggregere de data, der er gemt i MongoDB. Se dette blogindlæg for flere oplysninger om aggregeringsrammen i MongoDB 2.6.

I 2.6-udgivelsen lavede MongoDB en subtil, men væsentlig ændring i den måde, hvorpå de underliggende aggregeringspipelines udføres i et sharded miljø. Når du arbejder med sharded samlinger, opdeler MongoDB pipelinen i to faser. Den første fase eller "$match"-fasen kører på hvert shard og vælger de relevante dokumenter. Hvis forespørgselsplanlæggeren bestemmer, at et shard ikke er relevant baseret på shard-nøglerne, udføres denne fase ikke på det shard.

De efterfølgende trin kører kun på det "primære" shard for samlingen. Dette shard fletter dataene fra de andre shards og kører resten af ​​pipelinen. Dette resulterer i, at en betydelig mere belastning af samlingens primære skærv bliver aggregeret. Her er et eksempel fra en af ​​vores kunder, der kører tre shards og primært bruger aggregeringsforespørgsler:

Som du kan se, er belastningen på det første shard konsekvent 3-4 gange den anden årsag. Dette er et ekstremt eksempel, da dette i tilfælde af, at det andet og tredje skår blev tilføjet senere, derfor er det primære skår for alle samlingerne det første skår. Så i det væsentlige kører de efterfølgende faser af alle vores aggregeringsjob kun på Shard1. Hvis du undersøger logfilerne på det primære shard, vil du se en række "flet"-kommandoer, der henter data fra de andre shards.

Før 2.6 brugte de efterfølgende trin af aggregeringspipelinen til at køre på dine MongoDB-servere og ikke på det primære shard.

Hvordan håndterer du denne ujævne belastningsfordeling? Du har et par muligheder:

  1. Hvis du kører sammenlægninger på flere samlinger, skal du sikre dig, at samlingernes "primære skærver" er jævnt fordelt på tværs af dine skærver.
  2. Hvis du kun har en høj aggregeringsbelastning på én samling, skal du muligvis bruge lidt større maskiner til dit primære shard.

Som altid, hvis du har spørgsmål eller kommentarer, bedes du sende os en e-mail på [email protected].


  1. Hvordan fortæller du Mongo om at sortere en samling, før du begrænser resultaterne?

  2. DIY Cloud Database på Amazon Web Services - Ny hvidbog

  3. Hvordan opdaterer man, hvis der findes, ellers indsæt nyt dokument?

  4. ClusterControl - Advanced Backup Management - MongoDB