#node.js #mongodb #cron
#node.js #mongodb #cron
Вопрос:
Я использую NodeJS
MongoDB
и node-cron
модуль npm для планирования заданий. Для 10 Тыс. заданий требуется меньше времени и меньше памяти. Но когда я планирую 100 Тыс. заданий, на планирование заданий уходит более 10 минут, и требуется почти 1,5 ГБ оперативной памяти, а иногда не хватает памяти. Есть ли лучший способ добиться этого, например, с помощью activemq или rabbitmq?
Комментарии:
1. Мы не все из Индии, поэтому, пожалуйста, избегайте использования здесь индийских сокращений и слов, таких как «L».
2. Это сильно зависит от вашей стратегии планирования. Например, если вы используете SJF, вы можете разделить свою базу данных на несколько таблиц и загружать задания, требующие от X до Y секунд, только когда таблица заданий, требующих менее X секунд, пуста … или, если вы выполняете RR, вы заранее знаете, что будет дальше,и ответ @jfriend00 полезен для этого
3. @malarres — Если в настоящее время они успешно используют node-cron, то, похоже, они выполняют планирование на основе времени, а не что-то вроде SJF.
4. @JamesZ, извините за это.
Ответ №1:
Одна из стратегий заключается в том, что вы планируете только выполнение следующего задания. Когда он запускается, вы запрашиваете базу данных, находите следующее задание и планируете его.
Если вы добавляете новое задание, вы проверяете, хочет ли оно выполняться раньше, чем текущее следующее задание, и, если да, вы планируете его и отменяете предыдущее следующее задание (оно будет перенесено позже после запуска этого нового задания).
Если вы удаляете задание, вы проверяете, является ли оно текущим следующим заданием. Если это так, вы отменяете его, находите следующее задание в базе данных и планируете его.
Если ваша база данных настроена для эффективного выполнения запросов во время выполнения заданий, это может быть очень эффективным, практически не требует памяти и масштабируется до бесконечно большого количества заданий.
Комментарии:
1. Спасибо, что ответили на мой вопрос. ваша стратегия абсолютно работает для меня. Я постараюсь это реализовать
2. @anil — Это ответило на ваш вопрос? Если это так, вы можете сообщить об этом сообществу, нажав на галочку слева от ответа, и это также принесет вам несколько очков репутации здесь за соблюдение надлежащей процедуры.