1

時々更新する必要があるアイテムのデータベースがあります。むしろ、単に実行する必要があります。これらのジョブの同時実行を処理するためにメッセージ キュー (Kue) を使用していますが、ジョブをキューに追加するプロセスは次のようになります。

setInterval(function () {
  feed.find({}, function (error, foundModels) {
    jobs.create('update feeds', {
      feeds: foundModels
    }).save()
  })
}, 6000)

このようなポーリングは、ジョブをキューに追加するための最良の方法だと思いますか? それとも、それぞれfeedが独自のタイマーを使用する必要がありますか (たとえば、すべてのジョブは、終了してから 6 秒後に別のジョブを生成します)?

4

1 に答える 1

1

私は通常、あなたがやった方法でそれを行います。あなたの場合、常に6秒間隔でジョブをプッシュします。ジョブに 6 秒以上かからない限り、これで問題ありません。ジョブに 6 秒以上かかる場合は、バックログが発生し始め、より大きな負荷を処理するためにリソースを増やす必要があります。リソース使用量が急上昇し、その急上昇を調整する準備ができておらず、自動化されたプロセスが導入されていない場合 (そうするべきです) は、問題になる可能性があります。

別の方法は、最後の呼び出しが返されてから 6 秒後にのみ関数を呼び出すことです。次のようにします。

function update() {
  feed.find({}, function (error, foundModels) {
    jobs.create('update feeds', {
      feeds: foundModels
    }).save(function() {
      setTimeout(update,6000);
    });
  });
}
setTimeout(update, 6000);

.save私は、すべての優れた非同期ライブラリと同様に、メソッドがコールバックを受け取ると仮定しました。:-)

于 2013-04-28T00:16:35.163 に答える