-1

我有一个 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 的一部分,所以很难模拟重负载。

这是在每 2 秒Runnable喂一次的 a 中运行的。ScheduledExecutorService scheduleAtFixedRate

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

4

1 回答 1

0

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

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

于 2013-01-28T09:10:38.420 回答