Mongodb - этап $ group занимает больше времени, когда в базе данных больше документов - PullRequest
0 голосов
/ 01 мая 2020

Я вхожу в понедельник go в течение последних нескольких месяцев и недавно столкнулся с проблемой, на которую, похоже, не могу найти никаких ответов. Ситуация выглядит следующим образом -

  • База данных A - ~ 60 м документов - Средний размер документа 500 Б
  • База данных B - ~ 280 КБ документов - Средний размер документа 200 Б

Документы в базе данных B являются подмножеством некоторых документов из базы данных A, но с различными данными в них. Если я выполню $ match для обеих баз данных с указанными условиями c, то обе базы данных находят одинаковое количество документов ~ 50 000 за примерно одинаковое время (база данных B немного быстрее, но не массово).

Проблемы возникают на следующих этапах моей агрегации - $ group, оба документа группируются по одному и тому же полю и выводят счетчик для каждой группы, но время, которое требуется для этого, существенно отличается -

  • База данных A - ~ 50000 мс
  • База данных B - ~ 1000 мс

Из того, что я исследовал и понял сумму Mon go, оба этапа $ group должны занять гораздо больше сходства раз количество группируемых документов одинаково, хотя я понимаю, что средние размеры документов немного больше, что может добавить некоторую разницу во времени, но я думаю, что я что-то упускаю.

Любая помощь очень ценится!

Спасибо, Сэм.

1 Ответ

0 голосов
/ 04 мая 2020

Итак, я нашел исправление для увеличения скорости агрегации для базы данных A.

Я нашел поток, в котором говорилось, что если вы используете индексированную сортировку $ перед группой $, это должно резко увеличить скорость этап $ group.

Итак, я создал новый индекс с полем, сгруппированным в конце индекса.

Затем я снова запустил агрегацию, и это было так же быстро в качестве базы данных B, и это было фактически без добавления $ sort перед $ group.

Это немного странно для меня, поскольку из того, что я могу найти, $ group не использует индексы, но, похоже, в этом сценарий, надеюсь, это поможет кому-то.

...