sql >> Databasteknik >  >> NoSQL >> MongoDB

Räckviddsstöd över tid samlad analys

Låt oss komma till din fråga en efter en:

Att titta på prestandamått från bara en enda exekvering är verkligen inte hur det fungerar. Du bör ta genomsnittet över flera körningar innan du drar slutsatsen eftersom det finns flera faktorer som spelar in. Med det sagt cachar MongoDB de vanligaste dokumenten i minnet och behåller det där såvida det inte måste ge minne för något annat dokument. Så om en fråga får åtkomst till dokument som redan är cachade från en tidigare fråga borde den gå snabbare.

Även i MongoDB använder aggregering endast index i början om några. Till exempel $match och $sort faser kan använda index. I ditt fall $match är det första pipelinesteget så det är en vinst.

I MongoDB lagras data i BSON , så datum är i grunden siffror när de jämförs. Så det är ingen skillnad.

Även om jag inte har testat det tvivlar jag verkligen på att tillvägagångssättet time_bucket kommer att ge snabbare svar. Sedan created_at kommer alltid att öka, indexet, i det här fallet, kommer också att läggas till i slutet utan time_bucket. Dessutom kommer indexstorleken att vara relativt stor när den skapas på en array än på ett enkelt datumfält. Kommer det inte att orsaka problemet med att anpassa indexet i RAM.

Att använda en time_bucket är meningsfullt när du använder någon funktion i datumfältet innan matchning. Om du bara extraherar år från datumfältet innan du matchar, kommer det att göra det befintliga indexet på datumet värdelöst.

Det är alltid bättre att casta dina parametrar för att matcha datatypen i databasen istället för tvärtom.

Ja det är möjligt. Om det är $and , du anger bara alla dina filter separerade med kommatecken i $match fas. Om det är $or använd $or operatör.

Om du har två $macth faser en efter en MongoDB kombinerar den till en . Så du behöver inte oroa dig för att lägga till resultat från flera matchfaser.

Nu är din Optimering Poäng

Ja, täckta frågor är mycket snabbare.

Om storleken på dokument minskas i $gruppen steg med hjälp av $project , då ja det är sant.

Det är inte nödvändigtvis sant, men det är i allmänhet fallet. Du kan kolla det här svaret .




  1. Det gick inte att ansluta till server 127.0.0.1:27017

  2. Sortera efter arraylängd

  3. logga alla frågor som mangust eldar i programmet

  4. Python + Memcached:Effektiv cachelagring i distribuerade applikationer