MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Ускорете агрегирането на MongoDB

Понастоящем има някои ограничения в това, което рамката за обобщаване може да направи, за да подобри ефективността на вашата заявка, но можете да й помогнете по следния начин:

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

Чрез добавяне на сортиране на LOG_TYPE вие ще "принудите" оптимизатора да използва индекс на LOG_TYPE, за да подреди документите. Това ще подобри производителността по няколко начина, но различно в зависимост от използваната версия.

При реални данни, ако имате сортирани данните, идващи в етап $group, това ще подобри ефективността на натрупване на общите суми. Можете да видите различните планове за заявки, където с $sort ще използва индекса на shard key. Подобрението, което това дава в действителната производителност, ще зависи от броя на стойностите във всяка "кофа" - като цяло LOG_TYPE има само седем отделни стойности, което го прави изключително лош shard ключ, но това означава, че е много вероятно следният код да бъде много по-бързо дори от оптимизираното агрегиране:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Актуализация на Aggregate в Mongodb

  2. Как да дефинирам методи в модел Mongoose?

  3. Ефективен формат на документ за съхраняване на гласове в Mongo DB?

  4. MongoDB изтегля елемент от масив две нива дълбоко

  5. Mongoid изтрива много с ограничение