sql >> Databáze >  >> NoSQL >> MongoDB

Agregace MongoDB se zdá být velmi pomalá

Jak již zmínil @Blakes Seven, $group nemůže používat indexy. Viz toto téma .

Váš dotaz je tedy již optimální. Možným způsobem, jak optimalizovat tento případ použití, je předem vypočítat a uchovat data ve vedlejší kolekci.

Můžete zkusit tuto datovou strukturu:

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

Tento dotaz lze provést v milisekundách namísto 500+ sekund a můžete těžit z indexů.

Potom samozřejmě pokaždé, když přidáte, aktualizujete nebo odstraníte dokument z hlavní kolekce, budete muset aktualizovat vedlejší kolekci.

V závislosti na tom, jak moc potřebujete, aby byla data „čerstvá“, můžete se také rozhodnout tento „proces aktualizace v reálném čase“ přeskočit a zcela znovu vygenerovat postranní sbírku pouze jednou denně s dávkou a mějte na paměti, že vaše data nemusí být „ čerstvé".

Další problém, který byste mohli vyřešit:Váš server rozhodně potřebuje více RAM a CPU. Vaše pracovní sada se pravděpodobně nevejde do RAM, zvláště s tímto druhem agregací.

Také pravděpodobně můžete dobře využít SSD a já bych SILNĚ doporučovat použití 3uzlové replikační sady namísto jediné instance pro produkci.



  1. Problém s používáním a spouštěním služeb vaření [email protected]

  2. Jak aktualizuji všechny dokumenty v mongodb PHP

  3. Jak povolit distribuovanou/clusterovou mezipaměť při použití redis s mezipamětí jarních dat

  4. Chyba Mongo DB:neplatný operátor:$search při $textovém vyhledávání