Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures 用于流式数据的数据结构_Data Structures_Time - Fatal编程技术网

Data structures 用于流式数据的数据结构

Data structures 用于流式数据的数据结构,data-structures,time,Data Structures,Time,您应该使用什么样的数据结构,以便服务器能够在任何时间点告诉您过去一小时内处理的请求数 例如,在10:20:23,您询问处理了多少请求;它必须告诉你从9:20:23到现在的总数。同样,在10:00时,它必须告诉您9:00的总数。一个选项是将所有数据存储在按时间排序的标准动态数组中。每当有传入请求时,都将其附加到数组的末尾 要查找过去一小时内发生的请求数,可以对数组进行二进制搜索,以查找一小时内发生的第一个请求。将此数组元素的索引与元素总数进行比较,将得到该时间窗口中的请求总数 为了防止阵列变得太大

您应该使用什么样的数据结构,以便服务器能够在任何时间点告诉您过去一小时内处理的请求数


例如,在10:20:23,您询问处理了多少请求;它必须告诉你从9:20:23到现在的总数。同样,在10:00时,它必须告诉您9:00的总数。

一个选项是将所有数据存储在按时间排序的标准动态数组中。每当有传入请求时,都将其附加到数组的末尾

要查找过去一小时内发生的请求数,可以对数组进行二进制搜索,以查找一小时内发生的第一个请求。将此数组元素的索引与元素总数进行比较,将得到该时间窗口中的请求总数

为了防止阵列变得太大,一种选择是将阵列视为一个不断增长的环形缓冲区。每当数组中的空间用完时,对数组中在过去一小时内出现的第一个元素进行二进制搜索。之前的所有元素都可以丢弃。如果将数组存储为环形缓冲区,只需调整起始位置,从逻辑上将它们从缓冲区中删除,就可以在O(1)时间内有效地删除所有这些元素。如果您仍然需要更多的空间,那么您可以将环形缓冲区的大小增加一倍,并将旧元素复制到上一页。如果在删除旧元素(例如75%)后填充了超过一定比例的缓冲区,则强制执行始终复制所有内容的策略,那么每次插入需要摊销O(1)时间

简言之,您将得到过去一小时内有多少个请求的摊销O(1)插入和O(logn)最坏情况查找

希望这有帮助