我正在尝试找到一种更好的方法来确保在特定时间从mongo集合中删除某些文档,这对每个文档都是唯一的。我还需要在删除项目时运行一些方法。我已经研究了TTL索引,但似乎它们不允许任何类型的回调,并且从我读到的删除文档的过程每分钟只运行一次,这对我所需要的不够具体。以下是我提出的建议:
Meteor.setTimeout()
我担心的是我不确定。任何人都可以推荐一种更好的方法来实现这一目标吗?importHref(href, onload, onerror).
如何使用线程,所以如果我有数百或数千个这些调用,我想知道它是否会导致问题
提前致谢。
编辑:使用Meteor或cron运行后台作业不是我唯一关注的问题。我意识到我可以用cron工作完成同样的事情,但我宁愿每秒查询一次我的数据库只能找到3个到期项目而不是每30秒查询一次数据库,并找出哪些元素将在下一期。
答案 0 :(得分:3)
似乎更简单的解决方案是将删除日期存储在每个文档中,而不是TTL中。想象一下,您有一个名为removeAt
的集合,每个文档都有一个var timeout = 500;
Meteor.setInterval((function() {
// remove any messages that should have been removed in the past
Messages.remove({removeAt: {$lte: new Date}});
}), timeout);
字段。然后你可以做类似以下的事情:
removeAt
注意:
remove
编制索引,以便15/11/11 11:25:18 INFO mapred.LocalJobRunner: map task executor complete.
15/11/11 11:25:18 WARN mapred.LocalJobRunner: job_local194018022_0001
java.lang.Exception: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class device not found
at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class device not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195)
at org.apache.sqoop.mapreduce.db.DBConfiguration.getInputClass(DBConfiguration.java:403)
at org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.createDBRecordReader(DataDrivenDBInputFormat.java:237)
无需扫描整个馆藏。