Используя rails 3 и mongoDB с адаптером mongoid, как я могу загружать данные в базу данных mongo? захватить все записи в конкретной коллекции БД mongo и проиндексировать их в solr (начальный индекс данных для поиска).
Проблема, с которой я столкнулся, заключается в том, что выполнение Model.all захватывает все записи и сохраняет их в памяти. Затем, когда я обрабатываю их и индексирую в solr, моя память съедается, и процесс умирает.
Я пытаюсь выполнить пакетную операцию поиска в mongo, чтобы я мог перебирать более 1000 записей за раз, передать их нужно преобразовать в индекс, а затем обработать следующие 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 скудна. Я вижу много документации по выполнению пакетной вставки, но не пакетного поиска.