如何一次性查找和删除MongoDb Collection Entity并节省系统资源

时间:2013-01-27 23:08:55

标签: java mongodb morphia

我有一个拥有实时数据的mongodb集合,生命周期很短。 当我需要它们时,我也想删除一次找到的,

这里使用morphia包装器的伪代码:

for(LogEntity log: mongo.find(LogEntity.class, "grabMe", true)){
    mongo.delete(mongo.createQuery(LogEntity.class).filter("logId", log.id));
    //Do work and dispose the log
}

我正在对此进行一些测试,而且很难模拟重负荷,因为这是Google GCM的一部分。

这是在Runnable中运行,每2秒从ScheduledExecutorService scheduleAtFixedRate投放。

这会起作用还是有更好的方法来做到这一点。 find()如何在这种情况下工作。我是否会通过删除它来搞乱find()的内部数组。如果有很多LogEntity我无法将它们记在内存中。

1 个答案:

答案 0 :(得分:0)

重负荷记录,生命周期短,我会选择上限集合。在这种情况下,您无法删除上限集合中的文档。

另一方面,如果你想选择正常的日志集合并进行定时清理,你的查找和删除循环很慢。如果您的代码是foreach item in collection.find(query) {collection.remove({_id:item._id};},请使用collection.remove(query)方法。