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

MongoDB Aggregation virker meget langsom

Som allerede nævnt af @Blakes Seven, kan $group ikke bruge indekser. Se dette emne .

Din forespørgsel er således allerede optimal. En mulig måde at optimere denne usecase på er at forudberegne og bevare dataene i en sideindsamling.

Du kan prøve denne datastruktur:

{
  "_id" : ObjectId("560a5139b56a71ea60890201"),
  "ccy" : "USDNOK",
  "date_time_first" : ISODate("2007-01-01T00:00:07.904Z"),
  "date_time_last" : ISODate("2007-09-09T00:00:07.904Z")
}

Forespørgsel om dette kan gøres på millisekunder i stedet for 500+ sekunder, og du kan drage fordel af indekser.

Så hver gang du tilføjer, opdaterer eller sletter et dokument fra hovedsamlingen, skal du selvfølgelig opdatere sidesamlingen.

Afhængigt af hvor meget du har brug for, at dataene er "friske", kan du også vælge at springe denne "live opdateringsproces over" og kun regenerere sideindsamlingen en gang om dagen med en batch og huske på, at dine data muligvis ikke er " frisk".

Et andet problem, du kan løse:Din server har helt sikkert brug for mere RAM og CPU. Dit arbejdssæt passer sandsynligvis ikke i RAM, især med denne form for sammenlægninger.

Du kan sikkert også gøre god brug af en SSD, og ​​det ville jeg STÆRKT anbefaler at bruge et replikaset med 3 noder i stedet for en enkelt instans til produktion.



  1. Konfiguration af advarsler på MongoDB-metrics

  2. MongoDB - Begræns resultaterne af en forespørgsel

  3. hvordan forbinder man mongoDB til serveren?

  4. Hvad er tcp-backlog i redis.conf