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)最坏情况查找 希望这有帮助