1

在集合中的任何文档达到一定年龄后运行数据库查询的最佳实践是什么?

假设这是一个带有 mongoDB 的 node.js Web 系统,带有一系列帖子。插入新帖子后,应在 60 分钟后更新一些数据。

每分钟或每两分钟检查一次(年龄<一小时)的所有帖子的 cron-job 会是最佳解决方案吗?如果该系统有超过 10.000 个活跃用户,那么压力最小的解决方案是什么?

4

1 回答 1

0

一些想法:

  • 创建第二个集合作为具有“更新时间”字段的队列,该字段将包含需要更新源记录的时间。索引它,并扫描查找“现在”更旧的值。
  • 在原始文档中包含上面提到的字段并以相同的方式对其进行索引
  • 您可以在完成后清除该值,或根据行为将其重置为接下来的 60 分钟(而不是在集合中插入/删除/插入文档)。
  • 通过保持更新集合不同,您有更好的机会始终将排队更新的整个工作集保存在内存中(与将更新信息存储在您的帖子中相比)。
  • 我不会将更新作为对同一 Node 实例的 Web 请求启动,而是作为一个单独的进程启动,以免阻止用户请求。

至于您如何安排它——这取决于您和您的架构以及最适合您的系统的方式。没有正确的“最佳”答案,尤其是当您有多个 Web 服务器或分片数据系统时。

您可能会使用上限集合,尽管您可能会面临丢失需要更新的记录的风险(尽管您会获得性能)

于 2013-01-27T15:06:49.517 回答