假设我有一个链接聚合应用程序,用户可以对链接进行投票。我使用一个算法生成的热度分数对链接进行排序,该算法在链接投票时运行。然而,在每一次投票中运行它似乎都太过分了。我如何限制它,使其不超过,比如说,每5分钟运行一次。
发布于 2013-05-09 04:11:20
a)使用cron作业
b)跟踪过程最后一次运行时的时间戳,以及当前时间戳-您存储的时间戳>5分钟时,然后运行过程并更新时间戳。
发布于 2013-05-09 04:46:46
var yourVoteStuff = function() {
...
setTimeout(yourVoteStuff, 5 * 60 * 1000);
};
yourVoteStuff();在询问为什么不使用setTimeinterval之前,请阅读下面的评论。
为什么是“为什么是setTimeinterval”而不是“为什么是cron作业?”,我错了吗?
发布于 2013-05-09 05:53:31
我已经将此解决方案用于生产级别,我可以告诉您,它的伸缩性很好,因为它也执行得很好。
使用示例;
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);
}干杯!
https://stackoverflow.com/questions/16449312
复制相似问题