Как обработать CronJob, который запрашивает и обновляет таблицу в базе данных SQL с помощью nodejs? - PullRequest
0 голосов
/ 31 августа 2018

Мне нужно запустить CronJob, который выполняет три взаимозависимые асинхронные задачи с определенным интервалом, который указан в конфигурации CronJob.

Async Task-1: таблица запросов для получения результатов по определенным критериям

Асинхронная задача-2: Выполнить асинхронную операцию с результатами, полученными в Задаче-1

Асинхронное задание 3: обновить записи таблицы для соответствующих идентификаторов с помощью операции, выполненной в задании 2.

Я не могу понять, что произойдет, если следующий следующий интервал CronJob начнется раньше, чем завершатся задачи первого интервала. И как это можно сделать.

Более конкретный вопрос: Есть ли способ, которым я могу поддерживать синхронизацию между таблицей sql и выполняемыми задачами, чтобы, если UPDATE TASK ожидает в одном цикле, он не выполняет та же задача в следующем цикле.

Я использую модуль node-cron npm для разработки CronJob.

1 Ответ

0 голосов
/ 31 августа 2018

К сожалению, cron не поддерживает зависимость между заданиями, поэтому вы должны справиться с этим самостоятельно. У вас есть в основном два варианта:

  • Объединение задач в одну
  • Наличие флага где-нибудь, который позволяет Task-n знать, успешно ли выполнено Task-n-1

Ваша жизнь станет намного проще, если вы сможете объединить задачи, поскольку вы можете использовать инструменты, к которым вы привыкли в JavaScript. Если нет, вы можете сделать что-то вроде:

  • Async Task-1 запрашивает базу данных и сохраняет результат в известном месте (например, 2018-08-31-task-1-results.csv)
  • Async Task-2 проверяет, существует ли 2018-08-31-task-1-results.csv. Если это так, он знает, что предыдущая задача была выполнена успешно, и может обработать файл и сохранить вывод в другой файл (например, 2018-08-31-task-2-results.csv)
  • Async Task-3 работает так же, как Async Task-2.

Другими словами, задачи не зависят друг от друга напрямую, а зависят от результатов предыдущих задач. Это позволяет вам повторно запускать задачи и регистрировать их результаты. В моем примере использовались файлы, но это может быть что угодно, к чему могут обращаться все задачи, например, промежуточная таблица.

В будущем, если вам по-прежнему придется писать эти цепочки зависимостей вручную, я бы предложил рассмотреть одну из многих структур конвейера задач, таких как Luigi и Airflow .

...