Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么时候使用setTimeout与Cron比较合适?_Javascript_Node.js_Meteor_Cron_Settimeout - Fatal编程技术网

Javascript 什么时候使用setTimeout与Cron比较合适?

Javascript 什么时候使用setTimeout与Cron比较合适?,javascript,node.js,meteor,cron,settimeout,Javascript,Node.js,Meteor,Cron,Settimeout,我正在使用mongo数据库构建Meteor应用程序 我有一个集合,可能有1000个文档需要在不同时间更新 我是在创建时运行设置超时,还是每秒运行一次并在每个文档上循环的cron作业 每种方法的优缺点是什么 要将此置于上下文中: 我正在建立一个在线比赛系统。我可以有100场比赛,这意味着我可以有1000场比赛 每一场比赛都必须在特定的时间结束,并且可以在特定的条件下提前结束。老实说,这完全是一个偏好问题 我非常喜欢编写小型、独立的程序,每个程序都做一件事,而且都做得很好。如果您也是这样,那么最好编

我正在使用mongo数据库构建Meteor应用程序

我有一个集合,可能有1000个文档需要在不同时间更新

我是在创建时运行设置超时,还是每秒运行一次并在每个文档上循环的cron作业

每种方法的优缺点是什么

要将此置于上下文中:

我正在建立一个在线比赛系统。我可以有100场比赛,这意味着我可以有1000场比赛


每一场比赛都必须在特定的时间结束,并且可以在特定的条件下提前结束。

老实说,这完全是一个偏好问题

我非常喜欢编写小型、独立的程序,每个程序都做一件事,而且都做得很好。如果您也是这样,那么最好编写单独的程序,通过cron定期运行

通过这种方式,您可以保证操作系统控制的精度,并且可以在webapp环境之外轻松调试小型、简单的程序


不过,这只是一个首选项。

使用操作系统级的cron作业将不起作用,因为您只能以60秒的分辨率进行检查。所以说“cron作业”,我想你指的是单个
setTimeout
(或)。以下是一些想法:

单设置超时 策略:每秒钟醒来检查大量匹配项,更新已完成的匹配项。如果您有多台服务器,则可以通过同步cron阻止除其中一台之外的所有服务器进行检查

这种策略的优点是易于实现。缺点是:

  • 您最终可能会进行大量不必要的数据库读取
  • 您必须非常小心,确保您的处理时间不超过两次检查之间的时间长度(1秒)
  • 如果您确信运行时是可以控制的,我建议您使用这种策略。例如,如果您可以在
    endTime
    上索引匹配项,那么在每个周期中只需要检查几个匹配项

    多次设置超时 策略:在创建或服务器启动时为每个匹配添加一个
    设置超时
    。当每个超时过期时,更新相应的匹配项

    此策略的优点是,它可能会删除大量不必要的数据库通信量。缺点是:

  • 实现起来可能有点棘手。例如,您必须考虑服务器重新启动时发生的事情。
  • 朴素的实现无法扩展到单个服务器(请参见1)
  • 如果您认为在可预见的未来将使用单一服务器,我建议您采用这种策略



    考虑到你提出的选择,这些是我想到的权衡。更强大的解决方案可能涉及meteor/mongo堆栈之外的技术。例如,在redis中存储匹配时间,然后监听。

    谢谢!我实际上是在引用同步cron,我的错!你把我的问题说对了!所以我按照你在超时中的建议继续执行,但不可伸缩的想法可能会带来潜在的伤害!我曾想过像这样使用同步cron:创建一个每x时间运行一次的同步cron,将其设置为回合结束时,只搜索特定回合。完成后,请将其删除或关闭。aka运行多个同步的cron!运行1000个同步的cron有问题吗?简单的回答是我不知道,所以你应该模拟一下。Synched cron设计为周期性地运行一些任务,而不是一次运行很多任务,因此您可能会觉得自己在尝试将一个方形的钉子塞进一个圆形的孔中。考虑研究包是如何工作的,只使用您需要的部分——即一个检查重复密钥错误的插入(参见<代码> SythCron .NoTyrWrasPer-< /Case>函数)。实际上,节点CRON()具有第二粒度而不是分钟。