nodejsを使用してSQLデータベースのテーブルをクエリおよび更新するCronJobを処理するにはどうすればよいですか?

Dhruv Shah

CronJob構成に記載されている特定の間隔で、相互に依存する3つの非同期タスクを実行するCronJobを実行する必要があります。

非同期タスク-1:特定の基準で結果をフェッチするためのクエリテーブル

非同期タスク-2:タスク-1でフェッチされた結果に対して非同期操作を実行します

非同期タスク3:タスク2で実行された操作で、対応するIDのテーブルエントリを更新します。

最初の間隔のタスクが終了する前に、CronJobの次の間隔が開始された場合どうなるかわかりません。そして、これをどのように管理することができますか。

より具体的な質問: SQLテーブルと実行中のタスクの間の同期を維持してUPDATE TASK、あるサイクルで保留中の場合、次のサイクルで同じタスクを実行しないようにする方法はありますか?

node-cronCronJobの開発にnpmモジュールを使用しています。

ビクターバプティスタ

残念ながら、cronジョブ間の依存関係はサポートされていないため、これは自分で処理する必要があります。基本的に2つのオプションがあります。

  • タスクを1つにマージする
  • Task-n-1が正常に終了したかどうかをTask-nに知らせるフラグをどこかに置く

JavaScriptで使い慣れたツールを使用できるため、タスクをマージできれば、作業ははるかに簡単になります。そうでない場合は、次のようなことを行うことができます。

  • 非同期タスク-1はDBにクエリを実行し、結果を既知の場所に保存します(例2018-08-31-task-1-results.csv
  • 非同期タスク-2は2018-08-31-task-1-results.csv存在するかどうかをチェックします。成功した場合は、前のタスクが成功したことを認識し、ファイルを処理して出力を別のファイルに保存できます(例2018-08-31-task-2-results.csv)。
  • 非同期タスク-3は非同期タスク-2と同様に進行します。

つまり、タスクは相互に直接依存しているのではなく、前のタスクによって生成された出力に依存しています。これにより、タスクを再実行し、それらの出力にログを記録できます。私の例ではファイルを使用していましたが、中間テーブルなど、すべてのタスクがアクセスできるものであれば何でもかまいません。

将来、これらの依存関係チェーンを手書きし続ける必要がある場合は、LuigiAirflowなどの多くのタスクパイプラインフレームワークの1つを検討することをお勧めします。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ