0

ユーザーがリンクに投票するリンク アグリゲーション アプリがあるとします。リンクが投票されるたびに実行されるアルゴリズムによって生成されたホットネス スコアを使用して、リンクを並べ替えます。ただし、投票ごとに実行するのは過剰に思えます。たとえば、5分ごとに実行されるように制限するにはどうすればよいですか。

4

3 に答える 3

1

a) cron ジョブを使用する

b)手順が最後に実行されたときのタイムスタンプを追跡し、現在のタイムスタンプ(保存したタイムスタンプが5分を超える場合)を追跡してから、手順を実行してタイムスタンプを更新します。

于 2013-05-08T20:11:19.923 に答える
1
  • 最初に、すべてのリンク送信を受信するレシーバーを作成します。
  • 次に、レシーバーは (受信した) 各リンクをキューに push() します ( redisを強くお勧めします)
  • さらに、希望の時間間隔でループするアグリゲーターがあります。このループ内で、キューに入れられた各リンクを poll() して、ビジネス ロジックに進みます。

私はこのソリューションを本番レベルで使用しており、パフォーマンスだけでなく拡張性も優れていると言えます。

使用例;

var MIN = 5; // don't run aggregation for short queue, saves resources
var THROTTLE = 10; // aggregation/sec
var queue = [];
var bucket = [];
var interval = 1000; // 1sec

flow.on("submission", function(link) {
    queue.push(link);
});

___aggregationLoop(interval);
function ___aggregationLoop(interval) {
    setTimeout(function() {
        bucket = [];
        if(queue.length<=MIN) {
            ___aggregationLoop(100); // intensive
            return;
        }
        for(var i=0; i<THROTTLE; ++i) {
            (function(index) {
                bucket.push(this);
            }).call(queue.pop(), i);
        }
        ___aggregationLoop(interval);
    }, interval);
}

乾杯!

于 2013-05-08T21:53:31.280 に答える