我有一个拥有实时数据的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
我无法将它们记在内存中。
答案 0 :(得分:0)
重负荷记录,生命周期短,我会选择上限集合。在这种情况下,您无法删除上限集合中的文档。
另一方面,如果你想选择正常的日志集合并进行定时清理,你的查找和删除循环很慢。如果您的代码是foreach item in collection.find(query) {collection.remove({_id:item._id};}
,请使用collection.remove(query)
方法。