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

MongoDB Aggregation изглежда много бавно

Както вече беше споменато от @Blakes Seven, $group не може да използва индекси. Вижте тази тема .

Така вашето запитване вече е оптимално. Възможен начин за оптимизиране на този случай на използване е предварително изчисляване и запазване на данните в странична колекция.

Можете да опитате тази структура от данни:

{
  "_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")
}

Запитването за това може да се извърши за милисекунди вместо за 500+ секунди и можете да се възползвате от индексите.

Тогава, разбира се, всеки път, когато добавяте, актуализирате или изтривате документ от основната колекция, ще трябва да актуализирате страничната колекция.

В зависимост от това колко силно се нуждаете данните да бъдат „пресни“, можете също да изберете да пропуснете този „процес на актуализиране на живо“ и да регенерирате изцяло страничната колекция само веднъж на ден с партида и имайте предвид, че вашите данни може да не са „ прясно".

Друг проблем, който можете да коригирате:вашият сървър определено се нуждае от повече RAM и CPU. Вашият работен набор вероятно не се побира в RAM, особено с този вид агрегиране.

Също така, вероятно можете да използвате добре SSD и аз бих СИЛНО препоръчваме да използвате набор от реплики от 3 възела вместо един екземпляр за производство.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Заявка за колекция mongodb като динамична

  2. Как да премахнете празна база данни Mongo със същото име като попълнена база данни?

  3. MongoDB $push срещу $addToSet:Каква е разликата?

  4. Комбинирайте множество групи в агрегация в mongodb

  5. Можете ли да имате разрешения за ниво на събиране в MongoDB?