MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Strasznie obniżona wydajność z innymi warunkami łączenia w $ lookup (przy użyciu potoku)

Druga wersja dodaje wykonanie potoku agregacji dla każdego dokumentu w połączonej kolekcji .

Dokumentacja mówi:

Potok jest wykonywany dla każdego dokumentu w kolekcji, a nie dla każdego dopasowanego dokumentu.

W zależności od tego, jak duża jest kolekcja (zarówno liczba dokumentów, jak i rozmiar dokumentu), może to zająć przyzwoitą ilość czasu.

Ma to sens - wszystkie dodatkowe dokumenty ze względu na usunięcie limitu również muszą mieć wykonany dla nich potok agregacji.

Możliwe, że wykonanie potoku agregacji na dokument nie jest tak zoptymalizowane, jak mogłoby być. Na przykład, jeśli potok jest konfigurowany i wyłączany dla każdego dokumentu, z tym może być więcej narzutu. niż w warunkach $match.

Wykonywanie potoku agregacji na połączony dokument zapewnia dodatkową elastyczność. Jeśli potrzebujesz tej elastyczności, sensowne może być wykonanie potoku, chociaż wydajność należy wziąć pod uwagę niezależnie od tego. Jeśli nie, rozsądnie jest zastosować bardziej wydajne podejście.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jaka jest różnica między limitem a rozmiarem partii w MongoCursor?

  2. Zapytanie oparte na polach obliczeniowych za pomocą Mongoid

  3. Mongoose Promise z bluebirdem i maszynopisem

  4. Przechowywanie głębokiego drzewa katalogów w bazie danych

  5. Przechowywanie System.Type za pomocą MongoDb