当前位置: 首页 > 知识库问答 >
问题:

实时计算最后一分钟内服务器命中次数的有效方法

斜和硕
2023-03-14

假设您有一个不断收到HTTP请求的服务器。您的老板需要一些统计数据,并要求您计算任何给定时间最后一分钟内的点击数。

你会用什么算法和数据结构来实现这个目标?

共有2个答案

崔宇
2023-03-14

一个动态数组,其中仅追加文件是磁盘上的对应项。只需在数组进入时将每个命中追加到数组中,即可按时间排序。追加需要摊销的常数时间。您可以执行二进制搜索(或插值搜索)来查找最后一分钟开始的点,然后在 O(lg n)(或 (O(lg lg n))时间内求和到终点。

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

如果您没有空间存储所有旧数据,那么使用deque是一个更好的主意。deques的良好实现可在标准库中使用,例如C和Python。

巫马泰
2023-03-14

使用循环缓冲区。

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

 类似资料:
  • 您为 Zynga 工作,并希望计算不同游戏的当前活跃玩家数量。您的 Web 服务器处理来自许多不同游戏的 ping,并且每个用户都有一个唯一的 GUID。必须能够一次查询一个游戏的活跃用户数。活跃用户是那些在最后一刻得到ping的用户。 日志行不断进入 Web 服务器: 统计活跃用户最快/最简单的方法是什么?请建议一个45分钟的回答与一些代码。 我的版本

  • 我想计算一个二次型:in Julia 在这些情况下,最有效的计算方法是什么: 没有假设 是对称的 和是相同的() 和都是对称的 我知道朱莉娅有。但是我想知道它是否比BLAS呼叫更快。

  • 我正在尝试获取每分钟出现数据的次数。日期看起来是这样的。第一个数字是一个整数,表示自Unix纪元以来的秒数,我将其转换为ISO 8601时间。第二个数字是双精度的。以“00”结尾的时间代表第0分钟,以“60”结尾的时间代表第1分钟。 代码: 我的输出是这样的: 但我正在寻找类似下面的东西(忽略新的分钟找到的文本) 我如何调整它,以便我跟踪当前分钟并添加到计数器,而不会过早地打印出计数器?

  • 我有一个Web服务器,它只支持一个非常简单的API -计算在最后一小时,每分钟和每秒收到的请求数。该服务器在世界上非常受欢迎,每秒接收数千个请求。 目标是找到如何准确地将这3个值返回到每个请求? 请求一直在到来,因此每个请求的一小时、一分钟和一秒的窗口是不同的。如何管理每个请求的不同窗口,以便每个请求的计数都是正确的?

  • 大家好,耶稣受难节, 我知道这似乎是一个重复的问题,但事实并非如此,我将向您解释原因: 有几种方法可以在计划的时间执行任务,如TimerTask或ScheduleExecutorService,但它们都不适合我要做的事情,因为这些方法都是这样工作的: -- 但我不希望我的代码在计划时间后一次又一次地运行,我希望我的代码总是在每个计划时间执行,即使是第一次。 还有一个问题:如果android停止后台

  • 嗨,我从以下网站获得了倒计时代码: https://codepen.io/SitePoint/pen/MwNPVq, 并已修改为: 我所做的更改是,我检查了分钟和秒是否都为0,然后变量“deadline”应该用新时间更新。倒计时计时器工作正常,但当它达到0:0时,它进入该功能,一切停止。