Как обрабатывать документы партиями в конвейере Монго без использования $ skip? - PullRequest
0 голосов
/ 24 августа 2018

У меня и моей команды есть несколько вопросов, связанных с трубопроводом Монго.

У нас есть конвейер, используемый для обработки большого количества документов. В этом конвейере мы используем стадию $group. Однако этот этап имеет жестко заданный лимит в 100 МБ, что недостаточно для количества документов, которое у нас есть (https://docs.mongodb.com/manual/core/aggregation-pipeline-limits/#memory-restrictions).

Решение, которое мы внедрили, представляло собой комбинацию этапов $skip и $limit в начале конвейера для обработки документов партией из N (где N - это выбранное число, поэтому вес партии из N документов менее 100 МБ).

Однако у этого решения есть проблема с производительностью, так как этап $skip замедляется с увеличением количества пропускаемых документов (https://arpitbhayani.me/techie/mongodb-cursor-skip-is-slow.html).

Затем мы нашли эту статью: https://arpitbhayani.me/techie/fast-and-efficient-pagination-in-mongodb.html. Второй описанный подход, кажется, является хорошим решением для нашего варианта использования. Мы хотели бы реализовать этот подход. Однако, чтобы это работало, документы должны быть отсортированы по внутреннему идентификатору Mongo (_id) в начале конвейера. Мы заранее подумали об использовании этапа $sort, но этот этап также имеет жестко заданный предел в 100 МБ.

Какой метод мы могли бы использовать для обеспечения сортировки документов по _id в начале конвейера?

Возможно, есть другое решение для обработки документов с весом пакета менее 100 МБ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...