【问题标题】:MeteorJS: Save API call results for up to 24 hoursMeteorJS:保存 API 调用结果长达 24 小时
【发布时间】:2014-04-16 21:23:14
【问题描述】:

我正在开发一个使用 XML 数据馈送的小型应用程序。我想要获取返回的 XML 数据并将其保存在我的 MongoDB 中,这样我就可以使用信息(分页等)填充模板。

获取 XML 数据不是问题,我只是不确定如何使信息过期,或者即使这是最好的选择

【问题讨论】:

    标签: xml mongodb meteor


    【解决方案1】:

    丹尼斯,

    在这种情况下,您有 2 个选项:

    1. 基于应用程序的过期(添加时间戳字段并定期查询这些文档并删除它们)。我通常不建议这样做,因为它会给您的应用程序增加很多开销。
    2. 如果您使用的是 MongoDB 2.2 或更新版本,最好的选择是使用Time-To-Live (TTL) index

    TTL索引每60秒运行一个后台任务删除过期文档,可以有效分散删除的影响。

    有两种方法可以使用 TTL 到期:

    1. expire documents after a certain number of seconds
    2. use a custom expiry time per document

    第一种方法可能更适合您的用例。您可以使用类似于以下内容的方式设置 24 小时到期:

    db.api.results.ensureIndex( { "createdAt": 1 }, { expireAfterSeconds: 86400 } )
    

    【讨论】:

      【解决方案2】:

      您可以为每个文档添加时间戳,然后定期删除超过一天的文档。在此示例中,我假设您的集合名为 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

      【讨论】:

        猜你喜欢
        • 2016-10-06
        • 1970-01-01
        • 2020-12-28
        • 1970-01-01
        • 2021-01-09
        • 2019-07-01
        • 1970-01-01
        • 2019-02-28
        • 1970-01-01
        相关资源
        最近更新 更多