У меня и моей команды есть несколько вопросов, связанных с трубопроводом Монго.
У нас есть конвейер, используемый для обработки большого количества документов. В этом конвейере мы используем стадию $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 МБ?