gpt4 book ai didi

perl - 随机查找方法

转载 作者:行者123 更新时间:2023-11-29 11:57:43 25 4
gpt4 key购买 nike

我有一个带有表的 postgres 数据库,其中包含我想以伪随机间隔查找的行。有些我想每小时看一次,有些一天一次,有些一周一次。我希望查找在他们的时间窗口内以伪随机间隔进行。因此,我想每天执行一次的查找应该在每次运行时发生在不同的时间。

我怀疑有更简单的方法可以做到这一点,但这是我的粗略计划:每个查找项都有一个设置列。当脚本启动时,它会随机化每次查找的纪元时间并将其设置在设置列中,以确定下一次查找的时间。然后,我运行一个带有 wait 1 的连续循环,以查看纪元时间是否与任何请求的查找相匹配。运行查找后,它会重新计算下一次查找的时间。

我的问题:即使在设计阶段,这看起来也像是胶带和麻线的例行程序。执行此操作的正确方法是什么?

如果碰巧我的想法是正确的方法,那么我用 wait 1 重复循环的想法是正确的方法吗?如果我连续进行 2 次查找,我可能会错过一次,但我可以接受。

感谢您的帮助!

最佳答案

为 NextCheckTime 添加一列到表中。您可以使用时间戳或仅使用带有原始纪元时间的整数。在 NextCheckTime 上添加(非唯一)索引。

当您向数据库中添加一行时,通过获取当前时间、添加基本间隔并添加/减去一个随机因子(可能是基本间隔的 25%,或任何适合您的情况的因素)来填充 NextCheckTime。例如:

my $interval   = 3600; # 1 hour in seconds
my $next_check = time + int($interval * (0.75 + rand 0.5));

然后在您的循环中,只需SELECT * FROM table ORDER BY NextCheckTime LIMIT 1。然后休眠直到它返回的 NextCheckTime(假设它还没有过去),执行查找,并如上所述更新 NextCheckTime。

如果您需要处理一些其他进程新添加的行,您可能会限制 sleep 。如果 future NextCheckTime 超过 10 分钟,则休眠 10 分钟并重复 SELECT 以查看是否添加了任何新行。 (同样,确切的限制取决于您的情况。)

关于perl - 随机查找方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6542551/

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