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

Fremskynd MongoDB-aggregation

Der er i øjeblikket nogle begrænsninger i, hvad aggregeringsrammeværk kan gøre for at forbedre ydeevnen af ​​din forespørgsel, men du kan hjælpe den på følgende måde:

db.my_collection.aggregate([
    { "$sort" : { "LOG_TYPE" : 1 } },
    { "$group" :{ 
        "_id": "$LOG_TYPE",
        "COUNT": { "$sum":1 }
    }}
])

Ved at tilføje en sortering på LOG_TYPE vil du "tvinge" optimeringsværktøjet til at bruge et indeks på LOG_TYPE for at få dokumenterne i orden. Dette vil forbedre ydeevnen på flere måder, men forskelligt afhængigt af den anvendte version.

På rigtige data, hvis du har de data, der kommer ind i $gruppestadiet sorteret, vil det forbedre effektiviteten af ​​akkumulering af totalerne. Du kan se de forskellige forespørgselsplaner, hvor den med $sort vil bruge shard nøgleindekset. Den forbedring, dette giver i den faktiske ydeevne, vil afhænge af antallet af værdier i hver "spand" - generelt gør LOG_TYPE, der kun har syv forskellige værdier, det til en ekstremt dårlig shard-nøgle, men det betyder, at den følgende kode med stor sandsynlighed vil være en meget hurtigere end selv optimeret aggregering:

db.my_collection.distinct("LOG_TYPE").forEach(function(lt) {
   print(db.my_collection.count({"LOG_TYPE":lt});
});


  1. Mongoose:Cast til dato mislykkedes for værdi ved opdatering af et dokument

  2. MongoDB:Får Client Cursor::yield kan ikke låse op b/c af rekursiv låseadvarsel, når du bruger findAndModify i to procesforekomster

  3. kan ikke hente data fra databasen efter flere skemaer erklæret (mongoose + express + mongodb

  4. Hvordan konfigurerer jeg min MongoDB til at tage hensyn til UTF-8?