我正在使用nodejs
,mongodb
和node-cron
npm模块来调度作业。对于10K的作业,它需要更少的时间和更少的内存。但是,当我调度10万个作业时,调度作业需要10分钟以上的时间,占用了将近1.5GB的RAM,并占用了一些内存。有没有什么最好的方法来实现这一点,比如使用activemq或RabbitMQ?
一种策略是只安排下一个要运行的作业。当它运行时,您查询数据库并找到下一个作业并对其进行排定。
如果添加一个新作业,则检查它是否希望比当前的下一个作业更早运行,如果是,则对它进行排定,并取消排定先前的下一个作业(在此新作业运行后,它将在稍后重新排定)。
如果删除作业,则检查它是否是当前的下一个作业。如果是,您将它取消调度,然后在数据库中找到下一个作业并对其进行调度。
如果您的数据库被配置为按作业运行时进行高效查询,那么这将非常高效,几乎不使用任何内存,并且可以扩展到无限多的作业。