1

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

我的用例:

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

问题:

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

问题:

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

1 回答 1

3

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

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

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

于 2014-04-17T18:24:16.410 回答