sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB-skärvor och obalanserade aggregationsbelastningar

Aggregeringsramverket är en viktig kugge i MongoDB-infrastrukturen. Det hjälper dig att analysera, sammanfatta och aggregera data som lagras i MongoDB. Se det här blogginlägget för mer information om aggregeringsramverket i MongoDB 2.6.

I version 2.6 gjorde MongoDB en subtil men betydande förändring av hur de underliggande aggregeringspipelinesna körs i en sönderdelad miljö. När man arbetar med fragmenterade samlingar delar MongoDB upp pipelinen i två steg. Det första steget eller "$match"-fasen körs på varje skärva och väljer de relevanta dokumenten. Om frågeplaneraren fastställer att en shard inte är relevant baserat på shard-nycklarna så exekveras inte denna fas på den shard.

De efterföljande stegen körs endast på den "primära" skärpan för samlingen. Denna shard slår samman data från de andra shards och kör resten av pipelinen. Detta resulterar i att avsevärt mer belastning på samlingens primära skärva aggregeras. Här är ett exempel från en av våra kunder som kör tre shards och främst använder aggregeringsfrågor:

Som du ser är belastningen på den första skärpan konsekvent 3-4 gånger den andra orsaken. Detta är ett extremt exempel eftersom detta i fall den andra och tredje skärvan lades till senare, därför är den primära skärvan för alla samlingarna den första skärvan. Så i huvudsak körs de efterföljande stadierna av alla våra aggregeringsjobb endast på Shard1. Om du undersöker loggarna på det primära fragmentet kommer du att se ett antal "sammanfoga"-kommandon som hämtar data från de andra fragmenten.

Före 2.6 användes de efterföljande stegen i aggregeringspipelinen på dina MongoDB-servrar och inte på den primära fragmenten.

Så hur hanterar du denna ojämna belastningsfördelning? Du har ett par alternativ:

  1. Om du kör sammanställningar på flera samlingar, se till att samlingarnas "primära skärvor" är jämnt fördelade över dina skärvor.
  2. Om du har en hög aggregeringsbelastning på bara en samling kan du behöva använda lite större maskiner för din primära skärva.

Som alltid, om du har några frågor eller kommentarer, vänligen maila oss på [email protected].


  1. MongoDB Single Documents storleksgräns är 16 MB

  2. ScaleGrid Hosting för Redis™ på ditt eget AWS-konto

  3. Hur man säkerhetskopierar din Open edX MongoDB-databas

  4. Hur man hanterar dokument i MongoDB