嘿伙计们,所以我正在构建一个使用mongo数据库的Meteor应用程序。
我有一个可能有1000个文档需要在不同时间更新的集合......
我是在创建时运行setTimeouts还是每秒运行一次的cron作业并循环遍历每个文档?
每个人的优点和缺点是什么?
将其置于上下文中:
我正在建立一个在线锦标赛系统。我可以参加100场比赛,这意味着我可以有1000场比赛。
每场比赛需要在特定时间绝对结束,并且可以在条件下提前结束。
答案 0 :(得分:3)
使用操作系统级别的cron作业不会起作用,因为您只能使用60秒的分辨率进行检查。所以,通过" cron job",我认为你的意思是一个setTimeout
(或synced-cron)。以下是一些想法:
策略:每秒唤醒并检查大量匹配,更新完成的匹配。如果您有多个服务器,则可以阻止其中一个服务器通过synced-cron进行检查。
这种策略的优点是它可以直接实现。缺点是:
如果您确信可以控制运行时,我建议您使用此策略。例如,如果您可以在endTime
上为匹配编制索引,那么在每个周期中只需要检查几个匹配项。
策略:在创建时或服务器启动时为每个匹配添加setTimeout
。当每个超时到期时,更新相应的匹配。
此策略的优点是可能会删除大量不必要的数据库流量。缺点是:
如果您认为在可预见的将来使用单一服务器,我建议您使用此策略。
鉴于您提出的选择,这些是我发生的权衡。更强大的解决方案可能涉及流星/ mongo堆栈之外的技术。例如,将匹配时间存储在redis中,然后监听keyspace notifications。
答案 1 :(得分:1)
老实说,这是一个偏好的问题。
我非常喜欢编写小型独立程序,每个程序都做一件事,做得好。如果您也是这样,那么编写单独的程序以通过cron定期运行可能会更好。
通过这种方式,您可以获得当时OS控制的精度,以及在Web应用程序环境之外易于调试的小型简单程序。
这只是一个偏好。