【问题标题】:Can individual fields be set to expire in MongoDB?单个字段可以在 MongoDB 中设置为过期吗?
【发布时间】:2014-11-08 11:43:36
【问题描述】:

我想知道是否可以使文档中的单个字段而不是整个文档过期。

阅读TTL Indexes and Expiring Data 上的文档后,似乎只能根据字段使文档过期,但我想确认一下。

这个问题的背景是我有一个统计集合,每个文档中都有每月、每周、每天和每小时统计的字段。我可以将其分解为 4 个单独的集合,以便每个集合中的文档可以使用不同的 TTL,但是我相信这也意味着我需要相应地将批量更新分解为每个集合的一个批量更新。如果可能的话,我想保留一次批量操作的效率优势。

【问题讨论】:

  • 这里为什么需要不同的 TTL?天真地,我认为你可以只拥有一个。您也可以只存储最细粒度的统计数据并使用聚合导出其他统计数据。这取决于您的用例。
  • 所以更具体地说明我的用例,我实际上只对保留当前时间段的统计信息(在每个粒度)感兴趣。我的计划是只更新时间戳仍然与每个时间段粒度相关的事件的统计信息,并让 TTL 自动过期旧值。在这种情况下,您会期望聚合获得更好的性能吗?我也会研究这种方法。
  • 将每小时统计的文档保存在 TTL 索引中。每天、每周和每月的统计数据只需要分别每天、每周和每月计算一次,因此可以使用聚合框架来执行此操作(我可以通过有关统计信息/文档结构的更多详细信息来帮助您执行此操作,如果需要的话)。每小时文档将在超过 1 个月大的标记后过期。那有意义吗?另请查看time series modeling

标签: mongodb ttl


【解决方案1】:

目前是不可能的。

如果不是写入繁重的数据库,您的解决方案是可以的。而如果你想降低写入频率,还有一个解决方案:在某个服务器上运行一个定时器,用于每隔 1 分钟从从属 mongo 实例(或几分钟,取决于你需要的精度)查询过期文档。然后手动更新这些文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多