提问者:小点点

如何正确调度一个节点js中的数百万个作业?


我正在使用nodejsmongodbnode-cronnpm模块来调度作业。对于10K的作业,它需要更少的时间和更少的内存。但是,当我调度10万个作业时,调度作业需要10分钟以上的时间,占用了将近1.5GB的RAM,并占用了一些内存。有没有什么最好的方法来实现这一点,比如使用activemq或RabbitMQ?


共1个答案

匿名用户

一种策略是只安排下一个要运行的作业。当它运行时,您查询数据库并找到下一个作业并对其进行排定。

如果添加一个新作业,则检查它是否希望比当前的下一个作业更早运行,如果是,则对它进行排定,并取消排定先前的下一个作业(在此新作业运行后,它将在稍后重新排定)。

如果删除作业,则检查它是否是当前的下一个作业。如果是,您将它取消调度,然后在数据库中找到下一个作业并对其进行调度。

如果您的数据库被配置为按作业运行时进行高效查询,那么这将非常高效,几乎不使用任何内存,并且可以扩展到无限多的作业。