sql >> Database >  >> NoSQL >> MongoDB

Versnel MongoDB-aggregatie

Er zijn momenteel enkele beperkingen in wat het aggregatieraamwerk kan doen om de prestaties van uw zoekopdracht te verbeteren, maar u kunt het op de volgende manier helpen:

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

Door een sortering op LOG_TYPE toe te voegen, "dwingt" u de optimizer om een ​​index op LOG_TYPE te gebruiken om de documenten op orde te krijgen. Dit zal de prestaties op verschillende manieren verbeteren, maar verschillend afhankelijk van de versie die wordt gebruikt.

Op echte gegevens, als u de gegevens die in de $groepsfase komen gesorteerd hebt, zal dit de efficiëntie van de accumulatie van de totalen verbeteren. U kunt de verschillende queryplannen zien waarbij met $sort de Shard-sleutelindex wordt gebruikt. De verbetering die dit geeft in de werkelijke prestaties hangt af van het aantal waarden in elke "bucket" - in het algemeen maakt LOG_TYPE met slechts zeven verschillende waarden het een extreem slechte shard-sleutel, maar het betekent wel dat de volgende code waarschijnlijk een veel sneller dan zelfs geoptimaliseerde aggregatie:

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


  1. Mongodb-tekst zoeken in meerdere velden

  2. SailsJS:Verkrijg Resonse of Ajax-Form of SailsJS in de ingediende functie

  3. Als redis al deel uitmaakt van de stapel, waarom wordt Memcached dan nog steeds naast Redis gebruikt?

  4. Voor let, niet ophogen als er hetzelfde item in de array staat