gpt4 book ai didi

javascript - 每 10 秒查询一次 sqlite vs 使用超时 vs node-cron

转载 作者:行者123 更新时间:2023-12-03 04:39:24 25 4
gpt4 key购买 nike

我有一个 sqlite 风格的数据库,其中包含一个表,它有大约 10k 个项目,5 列。在其中一列中,我有一个“计时器”,基本上是我给出的一个数字,其目的是随着时间(最好是每秒)的流逝而减少它,直到达到零。当它达到零时我想执行一个操作。

思考过程

第一:我可以每 10 秒(setInternal)为所需的每个项目(可能是 10k 中的 2k)更新我的数据库 - 为了不强调它 - 并检查是否有任何项目达到零。我不太愿意这种方式,因为我觉得它可能不是那么有效。

第二:因为我使用的是nodejs,所以我可以使用超时。一旦我的数据库获得所有想要的用户,并为每个用户创建一个 setTimeout 方法,请阅读。一分钟左右更新数据库后,nested-setInternal 由于每个 setTimeout 占用 Nodejs 堆的大约 35 个字节,因此这是一个不错的方法。 -现在我认为这是该去的地方。

第三:我发现了这个https://github.com/kelektiv/node-cron github,它基本上是一个任务调度程序。在查看了它的代码之后,我认为它还不错,但我真的不认为我必须在这里使用外部包。

注意:无论我使用上述哪种方法,以防进程崩溃,它们都会被重置(完全失去意义),而无需定期更新我的数据库,所以我想我无法避免这种情况。

问题:我应该怎样做才能每隔几秒有效地更新数据库中的计时器(以便我的进程始终处于事件状态)而不耗尽我的资源?

对那些读完整篇文章并觉得自己浪费了时间的人表示歉意。

最佳答案

不要将剩余时间存储在数据库中。相反,存储操作的绝对时间戳。

然后您可以简单地请求需要处理的任何操作:

SELECT *
FROM actions
WHERE timestamp > (last handled timestamp)
AND timestamp <= (current timestamp);

(如果 timestamp 列已建立索引,则此查询非常高效。)

您还可以获取下一个事件之前的时间,以设置超时:

SELECT timestamp
FROM actions
WHERE timestamp > (last handled timestamp)
ORDER BY timestamp ASC
LIMIT 1;

关于javascript - 每 10 秒查询一次 sqlite vs 使用超时 vs node-cron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43146901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com