高效的方法,可以实时计算最后一分钟内服务器的点击次数

时间:2012-07-28 12:26:44

标签: algorithm data-structures

假设您有一台不断获取HTTP请求的服务器。你的老板需要一些统计数据,并要求你在任何特定时间计算最后一分钟内的命中数。

您将使用什么算法和数据结构来实现这一目标?

2 个答案:

答案 0 :(得分:6)

使用circular buffer

每当你必须保留一些内置过时的当前统计数据时,环形缓冲区是一个很好的候选者。在您的情况下,您可以通过在循环缓冲区的前面插入新数据包并在缓冲区中保留一分钟前指针或在请求时间执行二进制搜索,在最后一分钟轻松地保留请求的计数

答案 1 :(得分:1)

dynamic array,其中仅附加文件是磁盘上的副本。只需将每个匹配附加到数组,因此它按时间排序。追加采用摊销的常数时间。您可以进行二分搜索(或插值搜索)以找到最后一分钟开始的点,然后总结到O(lg n )中的结尾(或(O(lg lg ) n ))时间。

或者,从末端进行线性扫描而不是二进制搜索,如果文件变得非常大并且您只需要最后一分钟,这将更快。如果最后一分钟的预期命中数与时间无关,则只需要一段时间(但是向后读取旋转磁盘上的文件可能会很慢)。

如果您没有空间存储所有旧数据,那么使用双端队列是个更好的主意。在诸如C ++和Python的标准库中可以获得良好的deques实现。