【问题标题】:mongodb - does expire data ttl settings actually index and deletes source collection when all docs expiremongodb - 当所有文档过期时,是否过期数据 ttl 设置实际上索引并删除源集合
【发布时间】:2014-04-17 17:52:10
【问题描述】:

我对文档的过期 TTL 设置有疑问。

我的用例:

我的应用程序是一种聚合服务。它为每个源创建一个新集合。来源可能来来去去(读死)。我的数据访问模式是更少的读取次数和更多的写入次数。虽然某些核心集合(不会更改)已编入索引,但应用程序根据源创建的集合未编入索引。通常会从该集合中获取整个数据或数据的部分子集(例如仅 10 条记录),因此实际上不需要索引。

问题:

那些来自源的动态集合越来越大,经过一段时间后,我们不需要这些集合中的旧文档。所以我正在考虑申请“expire TTL settings”。但是,我对此几乎没有任何疑问。

问题:

  1. 它是否真的创建了有助于搜索的索引。我的意思是我不希望这些文档被索引。目前,我只是从集合中获取所有内容。那是我们的用例。
  2. 当集合中的所有文档都过期时,它是否也会删除集合。这可能是内部细节,但我认为对此有所了解会有所帮助

【问题讨论】:

  • 这不会减少写入次数,但是您可以将所有这些源存储在同一个集合中,使用“upsert”来“存储”它们并有一个删除旧的后台作业.看看aggregate reports use case

标签: mongodb ttl


【解决方案1】:

文档的过期 TTL 设置是通过设置了 expireAfterSeconds 标志的 BSON 日期对象上的索引来实现和强制执行的。因此,您必须在该字段上有一个索引才能使 TTL 工作。不确定为什么您在索引文档时遇到问题,但这是 TTL 工作的唯一方式。

关于创建的索引是否有助于搜索 - 是的。您可以通过使用 expireAfterSeconds 在日期对象上创建索引来测试这一点,然后对该字段运行查询并使用 explain() - 您会看到它确实使用索引进行搜索。

关于删除集合,它不会这样做 - 它只是删除过期的文档。

【讨论】:

  • 感谢您的回答。我想避免索引,因为就应用程序而言,没有必要这样做。我担心它可能会对我的应用程序产生负面影响。
  • @AmeyJah:如果 not 拥有索引在您的应用程序中不是问题,那么 拥有 索引不太可能成为问题。 .. 如果您每分钟编写数以万计的对象,也许,但如果您需要这个加上非常短的生命周期,您可能需要一个有上限的集合或一个非常低开销的消息队列来处理您正在做的事情。
  • @mnemosyn 感谢您的意见。我不能使用上限集合,因为我已经删除了过期的文档,而上限集合适用于每个集合的固定大小的文档。我会试一试,通过负载测试,我肯定能够查看使用 ttl expiry 是否存在任何性能问题。
  • @mnemosyn 你能告诉我如何从 mongodb 中删除 TTL,以便以后不会删除更多数据
猜你喜欢
  • 2019-09-23
  • 2016-03-22
  • 2017-10-13
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 2019-11-16
  • 2014-05-05
  • 1970-01-01
相关资源
最近更新 更多