如何在MongoDB上安排索引只在特定时间内使用它?

时间:2013-09-10 13:58:16

标签: mongodb

我们正在将MongoDB用于我们的应用程序。 我们有一些工作在每个月的第一天运行(报告工作),在crontab的帮助下安排。

该脚本负责查询特定集合,生成Excel工作表并发送该结果的邮件。

由于脚本每个月运行一次,我认为每次在该集合上都不需要索引除了在该作业预定时间之外。

那么有可能的是,我只能在那个时候对特定集合有一个索引吗?

我已经看过mtodb的ttl功能,但我没有看到任何这样的选项(可能是我过度使用)

请告诉我,如果可能的话,我只能在当时(每个月的第一天)创建一个集合的索引,并且每次都删除它。

1 个答案:

答案 0 :(得分:6)

通过db.collection.ensureIndex构建索引是您可以使用MongoDB运行的最昂贵的操作之一。我不建议您在使用它时销毁索引并重建它。

即使您没有使用索引,在集合上创建索引也有很少的缺点。如果你非常非常需要空间,索引确实占用了磁盘上的一小部分额外空间。如果您担心这一点,可以使用db.collection.stats()查看索引的大小。此外,当您有索引时,对db的写入将在marginally longer上进行插入,删除和更新。但实际上,对于典型的用例,这种开销可能微不足道。

如果您确实希望确保此索引不用于月度脚本以外的查询,则可以使用$hint operator强制使用特定的不同索引,或者运行$natural订单不使用索引。