实时趋势算法

3
我正在开发一个系统,该系统必须实时返回最流行的“文章”,这是基于每篇文章获得的点击量。 我的第一个想法是为每篇文章存储点击量与时间。 然后我将规范化此函数,并计算其一阶导数,以返回增长率。 然后使用二阶导数,我将能够知道它增长了多少,如果达到一定阈值,则将其标记为“流行”。问题在于:例如在一天结束时,我可以做到这一点“离线”,但我不知道如何持续进行... 我知道存在诸如Storm之类的东西,但我正在寻找像这样特定的解决方案(伪代码中的书面算法或涉及此问题而不是常规问题的文章)。

你解决了吗?如果是的,那你做了什么? - GadaaDhaariGeek
1个回答

0

跟踪热门文章的简单方法是使用LRU缓存。这可以有效地跟踪最近访问的元素。频繁访问将使热门文章保留在LRU中,而不经常访问的文章则会被删除。如果您想要精确排名,可以修改LRU以跟踪文章接收到的点击次数。

当然,还有更复杂的方法,但这种方法易于实现,具有良好的计算性能,并且可能提供类似的响应。

您还可以尝试为每篇文章使用循环缓冲区。一旦缓冲区填满,可以使用对文章的每次访问来更新指示文章上最旧的点击的变量。由于您知道最新和最旧的点击,因此可以估计每个时间单位的点击次数。缺点:大量内存使用,对于经常访问的文章统计数据不够精确。

同样地,你可以将每篇文章与一个包含<时间,计数>对的链表关联起来。每当发生点击时,如果距离时间不到一秒(或者其他设定的时间),则在链表顶部的计数上加一。如果时间过长,则在链表前面添加一个新的对。然后,你可以将这个链表视为一个数据序列,用于计算导数。在遍历链表时,删除过旧的元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接