加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

算法 – 如何计算最后的秒,分和小时的请求数

发布时间:2020-12-14 21:25:31 所属栏目:资源 来源:网络整理
导读:有一个假设的Web服务器,它只支持一个非常简单的API – 在最后一小时,分钟和秒钟收到的请求数。 该服务器在世界上非常受欢迎,每秒接收数千个请求。 目的是找到如何准确地返回这3个计数到每个请求? 请求一直在进行,所以一个小时,一分钟和一秒钟的窗口是
有一个假设的Web服务器,它只支持一个非常简单的API – 在最后一小时,分钟和秒钟收到的请求数。
该服务器在世界上非常受欢迎,每秒接收数千个请求。

目的是找到如何准确地返回这3个计数到每个请求?

请求一直在进行,所以一个小时,一分钟和一秒钟的窗口是不同的。
每个请求如何管理不同的窗口,以便每个请求的计数是正确的?

解决方法

如果需要100%的精度:

拥有所有请求的链接列表和3个计数 – 最后一小时,最后一分钟和最后一秒。

一分钟前和之前,你将有2个指针到链表中。

一小时前将列在名单的末尾。无论何时最后一次请求的时间超过当前时间之前的一个小时,将其从列表中删除并减少小时数。

分和秒指针将分别指出分别在一秒钟之后发生的第一个请求。无论何时请求时间超过当前时间之前的一分钟以上,请向上移动指针并减小分/秒计数。

当新的请求进入时,将其添加到所有3个计数,并将其添加到链表的前面。

对计数的请求只需要返回计数。

所有上述操作都是恒定的时间。

如果小于100%的准确度是可以接受的:

由于上面已经是不变的时间了,所以你不能得到任何东西比这更快。然而,空间复杂性可能会有所不同,这取决于你通常会得到的每秒的请求数量;您可以通过以下方式轻微牺牲精度来减少此事:

具有如上所述的链接列表,但仅在最后一秒。也有3个计数。

然后具有60个元素的圆形数组,指示最近60秒的每个的计数。每当第二次通过时,从分钟计数中减去数组的最后(最旧的)元素,并将最后一个第二个计数添加到数组。

在过去60分钟内有一个类似的圆形阵列。

精确度损失:一秒钟内所有请求都可以关闭分钟计数,一分钟内所有请求都可以关闭小时计数。

显然,如果您每秒只能有一个请求,那么这并不真实。在这种情况下,您可以在链表中保留最后一分钟,最后60分钟只能有一个圆形数组。

还有其他变化 – 空间使用率的精度可以根据需要进行调整。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读