如何在使用mongoDB和mongoid适配器的rails 3中批量查找mongo DB?我需要获取特定mongo DB集合中的所有记录并在solr中进行索引(用于搜索数据的初始索引)。
问题是,使用Model.all会将所有记录都读入内存中。当我遍历这些记录并在solr中进行索引时,我的内存被占满,进程停止运行。
我想要实现的是批量查找mongo,以便我可以每次迭代处理1,000条记录,将它们传递给solr进行索引,然后处理下一批1,000条记录。以下是我目前的代码:
Model.all.each do |r|
Sunspot.index(r)
end
对于一个大约有1.5百万条记录的集合,这将占用8GB以上的内存并杀死进程。 在ActiveRecord中,有一个find_in_batches方法,它允许我将查询分成可管理的批次来控制内存。 但是,我似乎找不到类似于mongoDB/mongoid的东西。
我希望能够做类似以下的事情:
Model.all.in_batches_of(1000) do |batch|
Sunpot.index(batch)
end
这将通过每次只处理可管理的问题集来缓解我的内存问题和查询困难。然而,在mongoDB中批量查找方面的文档很稀少。我看到很多关于批量插入的文档,但没有关于批量查找的文档。