想要批量检索mongodb中的记录

时间:2013-03-25 13:45:11

标签: mongodb morphia

我正在尝试从Mongodb中检索记录,其数量大约为50,000,但是当我执行查询时,Java会耗尽堆空间并且服务器崩溃。

以下是我的代码;

 List<FormData> forms = ds.find(FormData.class).field("formId").equal(formId).asList();

任何人都可以从语法上帮助我从mongodb批量获取记录。

提前致谢

2 个答案:

答案 0 :(得分:1)

我不确定Java实现是否有这个,但在c#版本中有一个setBatchSize方法。

使用我可以做的

foreach(coll.find(...)中的var项.setBatchSize(1000)){

}

这将获取查找匹配的所有项目,但不会一次获取所有项目,而是在每批次中获取1000。您的代码将不会看到此“批处理”,因为它都在枚举中处理。一旦循环尝试获取1001项,将从mongodb服务器获取另一个批处理。

这应该可以减少堆空间问题。

http://docs.mongodb.org/manual/reference/method/cursor.batchSize/

根据你在循环中的操作,你仍然可能有其他问题,但这将由你掌控。

答案 1 :(得分:0)

获取50k条目对任何数据库来说都不是一个好主意。 根据您的使用情况,您可能希望更改查询或使用limit and offset

ds.find(FormData.class)
   .field("formId").equal(formId)
   .limit(20).offset(0)
   .asList();

请注意,基于范围的查询比使用限制和偏移更有效。