我正在尝试实时处理不同链接的点击流。每次单击都会记录到数据库中。对于大多数链接,点击次数/分钟或多或少是恒定的(例如,<50)。然而,其中一小部分得到1000-2000 / min,但只是很短的一段时间。
我想检测何时开始看到如此高流量的点击流,因为我想推迟并批量处理这些流的数据库更新,而不是实时执行。
我一直在玩很多方法但没有很好的结果。这看起来像是标准的数学问题或队列管理问题。
有什么建议吗?
答案 0 :(得分:0)
在您插入每次点击时,还会计算过去一分钟的点击次数并插入。然后,您可以查询速率足够高的事件。
例如(伪代码):
proc record_click
insert into click_log (current_time, event_info)
insert into click_rates (current_time,
(select count(*) from click_log where time > current_time - 1 minute))
如果你不想在插入点击时这样做,你可以稍后计算这个值,但这将是一个可能很大的数据集来咀嚼,而不是每次点击时只有50个记录时间。
create view click_rates as
select event_time, count(*) as rate
from click_events e1, click_events e2
where e2.event_time between e1.event_time - interval '1 minute' and e1.event_time
group by e1.event_time