gba*_*hik 5 javascript cron settimeout node.js meteor
我正在构建一个使用 mongo 数据库的 Meteor 应用程序。
我有一个集合,可能有数千个文档需要在不同时间更新。
我是在创建时运行 setTimeouts 还是每秒运行一次并循环遍历每个文档的 cron 作业?
每种做法的优点和缺点是什么?
将此放在上下文中:
我正在构建一个在线锦标赛系统。我可以举办 100 场锦标赛,这意味着我可以举办 1000 场比赛。
每场比赛都需要绝对在特定时间结束,并且可以在一定条件下提前结束。
使用操作系统级别的 cron 作业不起作用,因为您只能以 60 秒的分辨率进行检查。因此,通过“cron job”,我认为你的意思是单个setTimeout(或同步cron)。以下是一些想法:
战略:每秒醒来并检查大量匹配,更新那些完整的。如果您有多个服务器,您可以阻止除其中一台服务器之外的所有服务器通过synced-cron 进行检查。
该策略的优点是易于实施。缺点是:
如果您确信可以控制运行时间,我会推荐此策略。例如,如果您可以将匹配项索引到endTime,那么每个周期中只需要检查几个匹配项。
策略:添加一个setTimeout在创建时或服务器启动时为每场比赛添加一个。当每个超时到期时,更新相应的匹配。
此策略的优点是它可能消除大量不必要的数据库流量。缺点是:
如果您认为在可预见的将来将使用单个服务器,我会推荐此策略。
这些是我在考虑到您提出的选择后所做出的权衡。更强大的解决方案可能会涉及meteor/mongo 堆栈之外的技术。例如,将匹配时间存储在redis中,然后监听keyspace通知。