Используя рельсы 3 и mongoDB с адаптером Mongoid, как я могу выполнить пакетное нахождение в DB Mongo?Мне нужно собрать все записи в конкретной коллекции БД mongo и проиндексировать их в solr (начальный индекс данных для поиска).
Проблема, с которой я сталкиваюсь, состоит в том, что, делая Model.all, собирает все записи исохраняет их в памяти.Затем, когда я обрабатываю их и индексирую в solr, моя память съедается, и процесс умирает.
Я пытаюсь сделать так, чтобы пакет находился в монго, чтобы я мог перебрать более 1000 записей за раз.время, передайте их solr в index, а затем обработайте следующую 1000 и т. д. *
Код, который у меня сейчас есть, делает это:
Model.all.each do |r|
Sunspot.index(r)
end
Для коллекции, имеющей около 1,5миллион записей, это съедает 8+ ГБ памяти и убивает процесс.В ActiveRecord есть метод find_in_batches, который позволяет мне разбивать запросы на управляемые пакеты, что предотвращает выход памяти из-под контроля.Тем не менее, я не могу найти ничего подобного для mongoDB / mongoid.
Мне бы хотелось иметь возможность сделать что-то вроде этого:
Model.all.in_batches_of(1000) do |batch|
Sunpot.index(batch)
end
Это бы облегчило мои проблемы с памятьюи справляться с трудностями, выполняя только управляемые задачи, установленные каждый раз.Однако документации по выполнению пакетных поисков в mongoDB немного.Я вижу много документации о выполнении пакетных вставок, но не о пакетных поисках.