【发布时间】:2014-04-16 21:23:14
【问题描述】:
我正在开发一个使用 XML 数据馈送的小型应用程序。我想要获取返回的 XML 数据并将其保存在我的 MongoDB 中,这样我就可以使用信息(分页等)填充模板。
获取 XML 数据不是问题,我只是不确定如何使信息过期,或者即使这是最好的选择
【问题讨论】:
我正在开发一个使用 XML 数据馈送的小型应用程序。我想要获取返回的 XML 数据并将其保存在我的 MongoDB 中,这样我就可以使用信息(分页等)填充模板。
获取 XML 数据不是问题,我只是不确定如何使信息过期,或者即使这是最好的选择
【问题讨论】:
丹尼斯,
在这种情况下,您有 2 个选项:
TTL索引每60秒运行一个后台任务删除过期文档,可以有效分散删除的影响。
有两种方法可以使用 TTL 到期:
第一种方法可能更适合您的用例。您可以使用类似于以下内容的方式设置 24 小时到期:
db.api.results.ensureIndex( { "createdAt": 1 }, { expireAfterSeconds: 86400 } )
【讨论】:
您可以为每个文档添加时间戳,然后定期删除超过一天的文档。在此示例中,我假设您的集合名为 Feed。
当您插入新文档时:
Feed.insert({data: '...', createdAt: new Date()});
然后你可以稍后在服务器上运行它:
var cleanupFeed = function() {
var now = new Date().valueOf();
var yesterday = new Date(now - 86400*1000);
Feed.remove({createdAt: {$lt: yesterday}});
};
让cleanupFeed 定期运行的简单方法就是使用setInterval。有关任务调度的更多想法,请查看this question。
【讨论】: