CN111241146B - 一种统计TopK-Frequency信息的方法和系统 - Google Patents
一种统计TopK-Frequency信息的方法和系统 Download PDFInfo
- Publication number
- CN111241146B CN111241146B CN201811441696.6A CN201811441696A CN111241146B CN 111241146 B CN111241146 B CN 111241146B CN 201811441696 A CN201811441696 A CN 201811441696A CN 111241146 B CN111241146 B CN 111241146B
- Authority
- CN
- China
- Prior art keywords
- data structure
- occurrence
- elements
- data
- stored
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种统计TopK‑Frequency信息的方法和系统。该方法包括:获取一元素及对应的出现次数;判断所述元素是否存在于用于存储元素及出现次数的数据结构中,若存在,则用获取的出现次数更新所述数据结构中已记录的所述元素的出现次数;若不存在,则将获取的所述元素及所述出现次数存储至所述数据结构中;从所述数据结构中选择出现次数最高的k个元素,k为大于等于1的正整数。该方法在频率统计更新速度、TopK‑Frequency信息查询速度、内存使用量、以及统计精确性等四个方面取得平衡。
Description
技术领域
本申请涉及互联网技术领域,尤其涉及一种统计TopK-Frequency信息的方法及系统。
背景技术
基于实时流处理的统计监控引擎最主要的工作是分析客户实时输入的日志流,发现是否有威胁行为,同时还需要对客户的业务指标如每分钟访问量、访问用户数(UV)、访问次数最高的用户、url等信息(TopK-Frequency信息)等进行实时计算,从而实时监控客户业务的变化,并能与识别出的威胁行为之间建立关联。不同客户之间业务特征各有差别,各种业务指标的特征也是各不相同,特别是如UV、TopK-Frequency信息等指标计算所涉及到的内存及性能挑战,成为实时流处理领域重要的问题。
当前流式计算对于统计TopK-Frequency信息有两种方案:
(1)使用动态扩容的HashMap统计,该方案统计准确,快速,但是消耗内存巨大,无法面对突增的访问量。
(2)基于Sketch方法统计,这种方案及其变种以精确度降低的代价换取内存低占用,但是该方案依赖于数据分布的假设,并且统计的TopK-Frequency是有误差的,特别是在面对数据均匀分布时以及长尾数据特征时,误差巨大。
此外,现有的流式监控技术在统计TopK-Frequency的除访问次数之外的其他信息时,比如统计TopK-Frequency url最频繁的链接来源(most-referer),会采用TopK-Of-TopK形式的嵌套数据结构,这样仍然会造成巨大的内存消耗。
因此,需要一种能够在较少内存占用的情况下实时统计出TopK数据的方法和系统。
发明内容
为了解决现有技术中统计TopK-Frequency信息时面临的问题,提出了一种统计TopK-Frequency信息的方法和系统。
根据本申请的一个方面,提供了一种统计TopK-Frequency信息的方法,所述方法包括:
获取一元素及对应的出现次数;
判断所述元素是否存在于用于存储元素及出现次数的数据结构中,若存在,则用获取的出现次数更新所述数据结构中已记录的所述元素的出现次数;若不存在,则将获取的所述元素及所述出现次数存储至所述数据结构中;
从所述数据结构中选择出现次数最高的k个元素,k为大于等于1的正整数;
其中,将获取的所述元素及所述出现次数存储至所述数据结构中包括:
判断所述数据结构中已存储的元素个数是否达到可存储元素的最大容量,若未达到,则将获取的所述元素及所述出现次数存储至所述数据结构中;若已达到,则确定所述数据结构中最低出现次数及对应的元素,从所述数据结构中删除所述最低出现次数及对应的元素后,将获取的所述元素及所述出现次数存储至所述数据结构中。
其中,所述数据结构包括n个数据集合,出现次数相同的元素被存储至相同的数据集合中,并且所述n个数据集合按照出现次数的顺序进行排序,其中n是大于等于1的正整数。
其中,若获取的所述元素存在于所述数据结构中则用获取的出现次数更新所述数据结构中已记录的出现次数包括:
在存储的元素出现次数比所述数据结构已存储的所述元素出现次数大的数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部,并将所述元素从当前数据集合中删除;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,并将所述元素从当前数据集合中删除,更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
其中,若获取的所述元素不存在于所述数据结构中,将获取的所述元素及所述出现次数存储至所述数据结构中还包括:
在所述数据结构的所述数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,并更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
其中,确定所述数据结构中最低出现次数及对应的元素包括:
将位于所述数据结构中存储最低出现次数的数据集合的尾部的元素确定为最低出现次数对应的元素。
其中,从所述数据结构中选择出现次数最高的k个元素包括:
按照所述n个数据集合存储元素的出现次数由大到小的顺序,从所述n个数据集合中选择前k个元素。
根据本申请的另一方面,还提供了一种统计TopK-Frequency信息的系统,所述系统包括:
获取模块,用于获取一元素及对应的出现次数;
更新和存储模块,用于判断所述元素是否存在于用于存储元素及出现次数的数据结构中,若存在,则用获取的出现次数更新所述数据结构中已记录的所述元素的出现次数;若不存在,则将获取的所述元素及所述出现次数存储至所述数据结构中;
选择模块,用于从所述数据结构中选择出现次数最高的k个元素,k为大于等于1的正整数;
其中,所述更新和存储模块还用于当所述元素不存在于所述数据结构中时,判断所述数据结构中已存储的元素个数是否达到可存储元素的最大容量,若未达到,则将获取的所述元素及所述出现次数存储至所述数据结构中;若已达到,则确定所述数据结构中最低出现次数及对应的元素,从所述数据结构中删除所述最低出现次数及对应的元素后,将获取的所述元素及所述出现次数存储至所述数据结构中。
其中,所述系统还包括所述数据结构,所述数据结构包括n个数据集合,出现次数相同的元素被存储至相同的数据集合中,并且所述n个数据集合按照出现次数的顺序进行排序,其中n是大于等于1的正整数。
其中,所述更新和存储模块还用于在获取的所述元素存在于所述数据结构中时,在存储的元素出现次数比所述数据结构已存储的所述元素出现次数大的数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部,并将所述元素从当前数据集合中删除;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,并将所述元素从当前数据集合中删除,更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
其中,所述更新和存储模块还用于在获取的所述元素不存在于所述数据结构中时,在所述数据结构的所述数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,并更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
其中,所述更新和存储模块还用于通过下述方式确定所述数据结构中最低出现次数及对应的元素包括:
将位于所述数据结构中存储最低出现次数的数据集合的尾部的元素确定为最低出现次数对应的元素。
其中,所述选择模块还用于:
按照所述n个数据集合存储元素的出现次数由大到小的顺序,从所述n个数据集合中选择前k个元素。
本申请提出了一种优化的统计TopK-Frequency信息的方法,该方法在频率统计更新速度、TopK-Frequency信息查询速度、内存使用量、以及统计精确性等四个方面取得平衡,相比其他方案,更具适应性。其中,采用固定最大容量的哈希表作为存储数据的数据结构,以有序排列的数据集合的方式维护统计各元素出现次数的计数器。在在流量小时,本方案能提供与哈希表相同的性能和精确性,而在面对突增流量时,本方案则具有明显的内存优势,兼顾了内存使用量和统计精确性,能自动适应流量的变化,满足不同的业务场景。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请的统计出现次数最高元素的方法的流程图;
图2是根据本申请的统计出现次数最高元素的系统的模块图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
目前的Top-K-Frequency信息统计通常采用下述两种方案,但是都存在相应的问题:(1)使用动态扩容的HashMap统计,该方案统计准确,快速,但是消耗内存巨大,无法面对突增的访问量;(2)基于Sketch方法统计,这种方案及其变种以精确度降低的代价换取内存低占用,但是该方案依赖于数据分布的假设,并且统计的TopK-Frequency都是有误差的,特别是在面对数据均匀分布时以及长尾数据特征时,误差巨大。
本申请提供一种统计TopK-Frequency信息的流式计算方法,使得能在较少内存占用的情况下,实时统计出TopK-Frequency数据的其他详细信息。
本申请的方法统计每分钟的TopK-Frequency信息(如访问频率最高的IP或ID、访问频率最高的URL),并且可以同时统计出属于TopK-Frequency中URL的嵌套信息,包括URL的平均请求时间、最频繁的链接来源(most-frequent referrer)。实时统计数据流的TopK-Frequency信息,这个问题可以描述为,给定一串数据流以及设定的参数k,假定是具有一定长度的流S,可以想象其长度非常巨大,而k是固定的一个常量(例如10≤k≤100),目标是找出该数据流中最频繁出现的k个元素及其频率。这个问题的难点在于数据流的吞吐量巨大,任何一个统计TopK-Frequency的方案需要足够快速的处理速度,以及足够快的查询速度(在需要给出TopK-Frequency信息的时刻能快速找出当前的TopK个元素),以应对数据流到来的速度。另外一个难点是只能使用受限的内存存储一部分的数据流,因为数据流可能无限大,不可能将数据流全部存储下来。
因此,解决上面的问题需要考虑四个方面的平衡:频率统计更新速度、TopK-Frequency信息查询速度、内存使用量、以及TopK个元素及频率精确性。本申请的方案就是在考虑上述各方面的基础上提出的。
本申请提供了一种统计TopK-Frequency信息的方法,所述方法包括:
步骤101,获取一元素及对应的出现次数;
步骤102,判断所述元素是否存在于用于存储元素及出现次数的数据结构中,若存在,则用获取的出现次数更新所述数据结构中已记录的所述元素的出现次数;若不存在,则将获取的所述元素及所述出现次数存储至所述数据结构中;
步骤103,从所述数据结构中选择出现次数最高的k个元素,k为大于等于1的正整数。
其中,将获取的所述元素及所述出现次数存储至所述数据结构中包括:判断所述数据结构中已存储的元素个数是否达到可存储元素的最大容量,若未达到,则将获取的所述元素及所述出现次数存储至所述数据结构中;若已达到,则确定所述数据结构中最低出现次数及对应的元素,从所述数据结构中删除所述最低出现次数及对应的元素后,将获取的所述元素及所述出现次数存储至所述数据结构中。
这里的TopK-Frequency信息就是指元素的最高出现次数。
本申请中可以使用一个计数器来统计数据流中一个元素的出现次数,并且采用一个限制最大容量的哈希表(HashMap)来作为存储各元素及对应的出现次数(例如一分钟内)的数据结构。这里的元素可以例如是访问频率最高的IP或ID、访问频率最高的URL等。获取的元素的出现次数可以是经过一段时间累计后的出现次数,即,该出现次数不一定是从1开始的。
本方案的一个优势之一在于保留各元素的信息直到绝对需要存储空间,只要存储元素占用的空间不超过最大容量,信息的统计就是绝对精确的,当达到最大容量时,则通过满足一定精确度的方式,即舍弃已存储的最小出现次数来存储新获取的元素,从而存储无限长的数据流。这里哈希表的最大容量是可配置的。
当一分钟不同元素的个数没有达到最大容量时,可以精确统计出所有不同元素的访问次数信息。当元素个数超过最大容量时,则通过替换目前最低频率的元素,来将新获取的元素存储至数据结构中。当前获取的元素的出现次数可能低于数据结构中元素的最低出现次数,这里不去比较新获取的元素的出现次数与数据结构中已有元素的最低出现次数,这是因为,在本申请中,考虑到查询速度的因素,不着眼于完全精确的要求,而是着眼于一个相对精确的方案。给定错误估计上限ε,本方案能以个计数器,来保证任何频率大于(1-ε)Fi的元素被统计到。
其中,|A|表示长度为N的数据流中不同元素的个数,Fi表示排在第i位元素的真实频率。显然,当错误上限为0时,此时所需计数器至少就是|A|个,如果采用纯哈希表进行统计的方案,则哈希表的容量越大,统计的计数值越精确,也就是错误的上限越低。采用本申请的方法能够获得一种错误上限与容量之间确定性的关系,从而保证精确度与内存的兼顾。这也是提出本申请方案的目的。
下面对错误上限与容量之间的关系进行简要说明。
当计数器个数m=|A|时,该情况属于精确计数,无须赘述。
当计数器个数m<|A|时,也就是哈希表容量远小于不同元素个数时,分析下面三种情况:
(1)维护的min值本身也有个上界即[N/m](向上取整),可以通过假设每个元素都曾经进入统计又被换出证明,其中min是当前所有计数器中的最小值,也代表当前计数被过高估计的上限。。
(2)本方案的计数器所有值的计数要么准确,要么被过高估计,绝不会被过低估计。假设真实频率在第i位元素Ei的真实频率表示为Fi,而本方案排在第i位的计数器的值表示为Count(i),则一定有如下关系满足,无论真实的Count(i)≥Fi,其中Count(i)表示数据结构中排在第i位计数器的估计值,Ei表示数据流中真实频率排在第i位的元素。
(3)当设定误差上界ε,保证某个频率超过(1-ε)Fi元素被统计的充要条件是:即该元素的真实频率比min的过高估计都要大,即可推导出
综合上述(1)-(3),本方案能以个计数器,来保证任何频率大于(1-ε)Fi的元素被统计到。
并且,本申请中不像现有技术中其他基于计数器的算法那样批量初始化计数器,这就保证了之前提到的频率统计更新速度、TopK-Frequency信息查询速度、内存使用量、以及TopK个元素及频率精确性这四方面的平衡考虑。
本申请中,数据结构包括n个数据集合,出现次数相同的元素被存储至相同的数据集合中,并且所述n个数据集合按照出现次数的顺序进行排序,其中n是大于等于1的正整数。
为了加快在数据结构(哈希表)中更新元素及出现次数的处理速度,就需要能快速找到数据结构中当前最低频率的那个元素。为此,本申请中采用了上述存储方式,即,在数据结构中构建多个数据集合,每个数据集合中存储的元素的出现次数都相同(例如,每个数据集合的ID或值与其中元素的出现次数相同),用于统计各元素的出现次数的计数器可以位于相应的数据集合中。这些数据集合按照其中元素的出现次数在数据结构中进行排序,例如其中元素出现次数越高,则数据集合在数据结构中的排名越靠前。数据集合的排序可以采用双向链表来维护(通过数据集合中元素的出现次数来排序),由于双向链表的原理是本领域技术人员熟知的,因此不再赘述。
步骤102中,若获取的所述元素存在于所述数据结构中则用获取的出现次数更新所述数据结构中已记录的出现次数包括:
在存储的元素出现次数比所述数据结构已存储的所述元素出现次数大的数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部,并将所述元素从当前数据集合中删除;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,,并将所述元素从当前数据集合中删除,更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
这种情况下,需要更新数据结构中存储的该元素的出现次数。由于相同出现次数的元素存储在同一个数据集合中,因此,当一元素的出现次数变化后,其所处的数据集合也需要改变,即需要将该元素移至一个已有的数据集合中或一个新建的数据集合中(当不存在与该更新的出现次数相应的已有数据集合时)。
具体地,对元素的出现次数更新后就需要将该元素的计数器从原来的数据集合移至正确的数据集合中,可通过下述方式更新:判断已有的数据集合所存储的出现次数是否存在与该更新后的元素出现次数相同的情况,如果有,则将该元素的计数器移至该出现次数相同的数据集合中,插入该数据集合的元素列表的尾部;如果没有,则创建一个新的数据集合,将元素的计数器移至该新的数据集合中,并将该数据集合按照次序插入到数据集合队列的正确位置中。若一元素从原数据集合中移出后,原数据集合中为空,即其中没有存储任何元素及其出现次数,则删除该原数据集合。需要注意,所有的数据集合均按照其中存储元素的出现次数的大小顺序排序,并且每个数据集合中的元素的出现次数均相同,即其中每个计数器的计数均相同。这一操作在最坏的情况下的时间复杂度是10个指针分配和一个堆排序操作,平均复杂度为O(ln(m)),m为哈希表的容量,即可存储元素的个数。若每次增量为1,操作最坏情况只为10指针分配。
说明如下:最坏情况时,计数器的计数值增大后,原来的计数器所在的集合为空,则需要删除该集合。然后需要遍历查找后续匹配的集合,若也为空,则需要新建集合。删除及新建集合都是指针分配,而查找的平均复杂度为O(ln(m))。若增量为1,则查找操作为1,因为只需查看一次后继相邻节点的值就可判断是否需要新建集合。
步骤102中,若获取的所述元素不存在于所述数据结构中,将获取的所述元素及所述出现次数存储至所述数据结构中还包括:
在所述数据结构的所述数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,并更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
需要说明的是,这里的将元素及其出现次数存储至数据结构之前,需要先判断数据结构中已存储的元素个数是否达到数据结构的最大存储容量,若未达到,则可以按照上述方法进行存储,若已经达到,则需要从数据结构中删除现有的出现次数最低的元素,然后才能按照上述方法将新的元素及其出现次数存储至该数据结构中。
具体地,确定所述数据结构中最低出现次数及对应的元素包括:
将位于所述数据结构中存储最低出现次数的数据集合的尾部的元素确定为最低出现次数对应的元素。
在申请中,数据结构由多个数据集合组成,每个数据集合存储出现次数相同的元素,并且各数据集合按照其中元素的出现次数的大小进行排序。这样,出现次数最低的元素就会出现在排位最靠后的数据集合中(若数据集合按照其中元素出现次数从大到小排序),从该排位最靠后的数据集合中选择一个元素即可。一般地,可以选择位于该数据集合尾部的元素进行删除。
需要特别说明的是,在其他基于计数器的有限容量数据结构中,在处理一次元素存储的过程中,最耗时的操作往往在于查找替换最低出现次数的元素。而由于本申请采用上述的方法,查找最低计数值的计数器的时间复杂度为O(1),这是因为存储最低次数元素的数据集合的最后一个元素总是当前维护的最低计数值的计数器。
这里分析的关键因素是min的值,而本方案中min的值是高度动态的,实际上它取决于数据流中不同元素的排列,其中min是当前所有计数器中的最小值,也代表当前计数被过高估计的上限。
例如,假设哈希表最大容量m为2,若S={X,Z,Y,Y},当Y到来时,当前计数器的值为{X:1,Z:1},Y会选择替换Z,然后计数加一,计数器的值为{Y:2,X:1},最后一个Y来到计数器变为{Y:3,X:1},min的值为1。
若S={X,Y,Y,Z},当Z来到时,当前计数器的值为{X:1,Y:2},Z会选择替换X,然后加一,则计数器更新为{Z:2,Y:2},此时,min的值为2可以看到{X,Y,Z}不同的排列组合,会导致min的值不同。
假设每次记录的min值是准确的,要保证超过一定频率的TopK个元素(如此例中S序列的Y元素)被统计到,则需要考虑元素所有可能到达的顺序。并且注意到由于数据集合维护了计数器的计数值,实际上计数器替换时还记录了误差值,每次替换时,min对应元素计数器的Error值也会替换。
我们不希望在我们的统计分析中涉及对元素到达顺序的预测,而是希望方案与数据分布及到来的顺序无关,因为预测所有可能流数据的排列,会导致分析难以处理。因此,本方案在min上建立上限,也就是说我们的min事实上是我们所有计数器过高估计的一个上限。说明如下:
假设S中不同元素的数量大于m,即所有m个计数器都被占用。因为min代表了中任何计数器中过高估计的上限。如前所述,在一个动态数据流中,可以通过确定容量m与误差上界ε,保证任何次数大于(1-ε)Fi的元素被统计到。同时由于数据集合排序及每个元素计数器的更新策略的一致性,对于TopK-Frequency问题,能够保证任何次数大于(1-ε)Fi的元素一定在统计的TopK-Frequency的元素中。
具体地,从所述数据结构中选择出现次数最高的k个元素包括:
按照所述n个数据集合存储元素的出现次数由大到小的顺序,从所述n个数据集合中选择前k个元素。
在上述统计的基础上,从数据结构中选择最高的k个元素就变得非常简单。当排位最靠前(若数据集合按照其中元素出现次数从大到小排序)的数据集合中的元素个数大于k时,只从该数据集合中随机选取k个元素即可;当排位最靠前的数据集合中的元素个数小于k时,需要全部选择该数据集合中的元素,然后从排位第二的数据集合中进行选择,如果排位第二的数据集合与排位第一的数据集合中元素的总个数仍小于k,则需要从排位第三的数据集合中进行选择,以此类推。
下面详细描述根据本申请的具体实施例,该实施例中统计访问频率最高的前5个ID,其中使用哈希表作为存储元素及出现次数的数据结构,该数据结构中各数据集合按照其中元素出现次数由高到低的次序排序,该实施例包括下述步骤:
步骤一,获取ID及其出现次数:BBB,20。
步骤二,判断该ID即BBB是否已经存储于哈希表中,若存在,则执行步骤三,若不存在则执行步骤四。
步骤三,BBB当前存在数据集合N18中,从排位在N18前面的数据集合中查询是否存在存储的元素出现次数等于20的数据集合,存在时,则将BBB及其出现次数20插入到数据集合N20的尾部,并从数据集合N18中删除BBB及其出现次数。
步骤四,判断该哈希表中的存储的元素个数是否达到其存储上限,若已达到,则删除排位最后的数据集合N3的尾部的元素及其出现次数。
步骤五,在剩余的所有数据集合中查询是否存在存储的元素出现次数等于20的数据集合,不存在时,创建数据集合N20,并将BBB及其出现次数存储到数据集合N20中,由于哈希表中增加了一个新的数据集合,则需要对数据集合进行重新排序,使各数据集合按照其中元素出现次数从大到小的顺序排序。
步骤六,按照数据集合的排序,从其中顺序选择5个ID最为访问频率最高的前5个ID。
上面的说明和示例均是以统计出现次数最高的K个元素为例的。但是可以理解的是,采用上述方案也可以统计出现次数最低的K个元素,在这种情况下,需简单改变替换策略和查询方式就可以用来统计最低频率的元素,即更新替换时选取当前最大值进行替换,查询时从小到大开始遍历。
本申请还提供了一种统计TopK-Frequency信息的系统,所述系统包括:
获取模块201,用于获取一元素及对应的出现次数;
更新和存储模块202,用于判断所述元素是否存在于用于存储元素及出现次数的数据结构中,若存在,则用获取的出现次数更新所述数据结构中已记录的所述元素的出现次数;若不存在,则将获取的所述元素及所述出现次数存储至所述数据结构中;
选择模块203,用于从所述数据结构中选择出现次数最高的k个元素,k为大于等于1的正整数;
其中,所述更新和存储模块202还用于当所述元素不存在于所述数据结构中时,判断所述数据结构中已存储的元素个数是否达到可存储元素的最大容量,若未达到,则将获取的所述元素及所述出现次数存储至所述数据结构中;若已达到,则确定所述数据结构中最低出现次数及对应的元素,从所述数据结构中删除所述最低出现次数及对应的元素后,将获取的所述元素及所述出现次数存储至所述数据结构中。
其中,所述系统还包括所述数据结构,所述数据结构包括n个数据集合,出现次数相同的元素被存储至相同的数据集合中,并且所述n个数据集合按照出现次数的顺序进行排序,其中n是大于等于1的正整数。
其中,所述更新和存储模块202还用于在获取的所述元素存在于所述数据结构中时,在存储的元素出现次数比所述数据结构已存储的所述元素出现次数大的数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部,并将所述元素从当前数据集合中删除;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,并将所述元素从当前数据集合中删除,更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
其中,所述更新和存储模块202还用于在获取的所述元素不存在于所述数据结构中时,在所述数据结构的所述数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,并更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
其中,所述更新和存储模块202还用于通过下述方式确定所述数据结构中最低出现次数及对应的元素包括:
将位于所述数据结构中存储最低出现次数的数据集合的尾部的元素确定为最低出现次数对应的元素。
其中,所述选择模块203还用于:
按照所述n个数据集合存储元素的出现次数由大到小的顺序,从所述n个数据集合中选择前k个元素。
本申请提出了一种优化的统计TopK-Frequency信息的方法,该方法在频率统计更新速度、TopK-Frequency信息查询速度、内存使用量、以及统计精确性等四个方面取得平衡,相比其他方案,更具适应性。其中,采用固定最大容量的哈希表作为存储数据的数据结构,以有序排列的数据集合的方式维护统计各元素出现次数的计数器。在在流量小时,本方案能提供与哈希表相同的性能和精确性,而在面对突增流量时,本方案则具有明显的内存优势,兼顾了内存使用量和统计精确性,能自动适应流量的变化,满足不同的业务场景。
上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本申请的保护范围之内。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的物品或者设备中还存在另外的相同要素。
以上实施例仅用以说明本申请的技术方案而非限制,仅仅参照较佳实施例对本申请进行了详细说明。本领域的普通技术人员应当理解,可以对本申请的技术方案进行修改或者等同替换,而不脱离本申请技术方案的精神和范围,均应涵盖在本申请的权利要求范围当中。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
Claims (8)
1.一种统计TopK-Frequency信息的方法,其特征在于,所述方法包括:
获取一元素及对应的出现次数;
判断所述元素是否存在于用于存储元素及出现次数的数据结构中,若存在,则用获取的出现次数更新所述数据结构中已记录的所述元素的出现次数;若不存在,则将获取的所述元素及所述出现次数存储至所述数据结构中,所述数据结构为一个限制最大容量的哈希表,所述最大容量为内存使用量;
从所述数据结构中选择出现次数最高的k个元素,k为大于等于1的正整数;
其中,将获取的所述元素及所述出现次数存储至所述数据结构中包括:
判断所述数据结构中已存储的元素个数是否达到可存储元素的最大容量,若未达到,则将获取的所述元素及所述出现次数存储至所述数据结构中;若已达到,则确定所述数据结构中最低出现次数及对应的元素,从所述数据结构中删除所述最低出现次数及对应的元素后,将获取的所述元素及所述出现次数存储至所述数据结构中;
所述数据结构包括n个数据集合,出现次数相同的元素被存储至相同的数据集合中,并且所述n个数据集合按照出现次数的顺序进行排序,其中n是大于等于1的正整数;
若获取的所述元素存在于所述数据结构中则用获取的出现次数更新所述数据结构中已记录的出现次数包括:
在存储的元素出现次数比所述数据结构已存储的所述元素出现次数大的数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部,并将所述元素从当前数据集合中删除;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,并将所述元素从当前数据集合中删除,更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
2.如权利要求1所述的方法,其特征在于,若获取的所述元素不存在于所述数据结构中,将获取的所述元素及所述出现次数存储至所述数据结构中还包括:
在所述数据结构的所述数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,并更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
3.如权利要求1所述的方法,其特征在于,确定所述数据结构中最低出现次数及对应的元素包括:
将位于所述数据结构中存储最低出现次数的数据集合的尾部的元素确定为最低出现次数对应的元素。
4.如权利要求1所述的方法,其特征在于,从所述数据结构中选择出现次数最高的k个元素包括:
按照所述n个数据集合存储元素的出现次数由大到小的顺序,从所述n个数据集合中选择前k个元素。
5.一种统计TopK-Frequency信息的系统,其特征在于,所述系统包括:
获取模块,用于获取一元素及对应的出现次数;
更新和存储模块,用于判断所述元素是否存在于用于存储元素及出现次数的数据结构中,若存在,则用获取的出现次数更新所述数据结构中已记录的所述元素的出现次数;若不存在,则将获取的所述元素及所述出现次数存储至所述数据结构中,所述数据结构为一个限制最大容量的哈希表,所述最大容量为内存使用量;
选择模块,用于从所述数据结构中选择出现次数最高的k个元素,k为大于等于1的正整数;
其中,所述更新和存储模块还用于当所述元素不存在于所述数据结构中时,判断所述数据结构中已存储的元素个数是否达到可存储元素的最大容量,若未达到,则将获取的所述元素及所述出现次数存储至所述数据结构中;若已达到,则确定所述数据结构中最低出现次数及对应的元素,从所述数据结构中删除所述最低出现次数及对应的元素后,将获取的所述元素及所述出现次数存储至所述数据结构中;
所述系统还包括所述数据结构,所述数据结构包括n个数据集合,出现次数相同的元素被存储至相同的数据集合中,并且所述n个数据集合按照出现次数的顺序进行排序,其中n是大于等于1的正整数;
所述更新和存储模块还用于在获取的所述元素存在于所述数据结构中时,在存储的元素出现次数比所述数据结构已存储的所述元素出现次数大的数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部,并将所述元素从当前数据集合中删除;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,并将所述元素从当前数据集合中删除,更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
6.如权利要求5所述的系统,其特征在于,
所述更新和存储模块还用于在获取的所述元素不存在于所述数据结构中时,在所述数据结构的所述数据集合中,判断是否存在存储的出现次数相同于获取的所述出现次数的数据集合,若存在,则将所述元素及所述出现次数存储至存储的出现次数相同于获取的所述出现次数的数据集合的尾部;若不存在,则在所述数据结构中创建新的数据集合,将所述元素及所述出现次数存储至该新数据集合中,并更新所述数据结构中所有数据集合的顺序,以使得所有数据集合按照其中存储的元素的出现次数顺序排序。
7.如权利要求5所述的系统,其特征在于,所述更新和存储模块还用于通过下述方式确定所述数据结构中最低出现次数及对应的元素包括:
将位于所述数据结构中存储最低出现次数的数据集合的尾部的元素确定为最低出现次数对应的元素。
8.如权利要求5所述的系统,其特征在于,所述选择模块还用于:
按照所述n个数据集合存储元素的出现次数由大到小的顺序,从所述n个数据集合中选择前k个元素。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811441696.6A CN111241146B (zh) | 2018-11-29 | 2018-11-29 | 一种统计TopK-Frequency信息的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811441696.6A CN111241146B (zh) | 2018-11-29 | 2018-11-29 | 一种统计TopK-Frequency信息的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111241146A CN111241146A (zh) | 2020-06-05 |
CN111241146B true CN111241146B (zh) | 2023-09-19 |
Family
ID=70865407
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811441696.6A Active CN111241146B (zh) | 2018-11-29 | 2018-11-29 | 一种统计TopK-Frequency信息的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111241146B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009171252A (ja) * | 2008-01-16 | 2009-07-30 | Oki Electric Ind Co Ltd | 計数方法、計数プログラム、計数装置 |
CN101655861A (zh) * | 2009-09-08 | 2010-02-24 | 中国科学院计算技术研究所 | 基于双计数布鲁姆过滤器的哈希方法和哈希装置 |
CN103544259A (zh) * | 2013-10-16 | 2014-01-29 | 国家计算机网络与信息安全管理中心 | 分组聚集排序TopK查询处理方法及系统 |
CN106326475A (zh) * | 2016-08-31 | 2017-01-11 | 中国科学院信息工程研究所 | 一种高效的静态哈希表实现方法及系统 |
CN107085576A (zh) * | 2016-02-15 | 2017-08-22 | 阿里巴巴集团控股有限公司 | 一种流式数据统计算法及装置 |
-
2018
- 2018-11-29 CN CN201811441696.6A patent/CN111241146B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009171252A (ja) * | 2008-01-16 | 2009-07-30 | Oki Electric Ind Co Ltd | 計数方法、計数プログラム、計数装置 |
CN101655861A (zh) * | 2009-09-08 | 2010-02-24 | 中国科学院计算技术研究所 | 基于双计数布鲁姆过滤器的哈希方法和哈希装置 |
CN103544259A (zh) * | 2013-10-16 | 2014-01-29 | 国家计算机网络与信息安全管理中心 | 分组聚集排序TopK查询处理方法及系统 |
CN107085576A (zh) * | 2016-02-15 | 2017-08-22 | 阿里巴巴集团控股有限公司 | 一种流式数据统计算法及装置 |
CN106326475A (zh) * | 2016-08-31 | 2017-01-11 | 中国科学院信息工程研究所 | 一种高效的静态哈希表实现方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111241146A (zh) | 2020-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102307957B1 (ko) | 다중-스트림 저장 장치를 위한 스트림 선택 | |
KR102266756B1 (ko) | Kvs 트리 | |
KR102290835B1 (ko) | 유지관리 동작들을 위한 병합 트리 수정들 | |
KR102289332B1 (ko) | 병합 트리 가비지 메트릭스 | |
US10740308B2 (en) | Key_Value data storage system | |
US10769126B1 (en) | Data entropy reduction across stream shard | |
EP2727247B1 (en) | Database compression system and method | |
US10326854B2 (en) | Method and apparatus for data caching in a communications network | |
CN102739622A (zh) | 一种可扩展的数据存储系统 | |
US10223286B2 (en) | Balanced cache for recently frequently used data | |
CN110807028B (zh) | 用于管理存储系统的方法、设备和计算机程序产品 | |
CN109542612A (zh) | 一种热点关键字获取方法、装置及服务器 | |
CN113177050A (zh) | 一种数据均衡的方法、装置、查询系统及存储介质 | |
CN111241146B (zh) | 一种统计TopK-Frequency信息的方法和系统 | |
US20210097049A1 (en) | Method, device and computer program product for managing index tables | |
CN112783644A (zh) | 一种基于高频键值计数的分布式倾斜流处理方法和系统 | |
CN109657018B (zh) | 一种分布式车辆行驶数据查询方法及终端设备 | |
CN112035498B (zh) | 数据块调度方法、装置、调度层节点及存储层节点 | |
CN112506875B (zh) | 文件存储方法、相关装置及文件存储系统 | |
CN114036104A (zh) | 基于分布式存储的重删数据的云归档方法、装置及系统 | |
CN110661892B (zh) | 一种域名配置信息处理方法及装置 | |
CN115114270B (zh) | 数据降采样方法及装置、电子设备、计算机可读存储介质 | |
CN115914011B (zh) | 一种支持软件定义的top-k流弹性测量方法 | |
WO2022242716A1 (en) | Compaction policies for append-only stores | |
CN118656198A (zh) | 数据处理方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |