发明内容
本发明提供了一种访问热度统计方法及装置,以至少解决相关技术中LFU算法消耗存储空间过大的问题。
根据本发明的一个方面,提供了一种访问热度统计方法,包括:从接收的访问热度统计请求中获取当前统计对象的统一资源定位符(Uniform Resource Locator,简称为URL);根据所述URL判断所述当前统计对象的队列类型,其中,所述队列类型包括:过滤队列和最不经常使用(Least Frequently Used,简称为LFU)队列,所述过滤队列采用最少最近使用(LeastRecently Used,简称为LRU)算法进行排序,用于存储访问次数低于预定门限的统计对象,所述LFU队列用于存储访问次数高于所述预定门限的统计对象,所述过滤队列和所述LFU队列均为固定长度;根据所述队列类型将所述当前统计对象存储至对应的队列。
优选地,根据所述URL判断所述当前统计对象的队列类型包括:如果所述当前统计对象是新增的统计对象,确定所述当前统计对象的队列类型为过滤队列;如果所述当前统计对象已经在所述过滤队列中,根据所述当前统计对象的访问次数与所述LFU队列的队尾统计对象的访问次数的大小,确定所述当前统计对象的队列类型;如果所述当前统计对象已经在所述LFU队列中,确定所述当前统计对象的队列类型为LFU队列。
优选地,根据所述当前统计对象的访问次数与所述LFU队列的队尾统计对象的访问次数的大小,确定所述当前统计对象的队列类型包括:判断所述当前统计对象的访问次数是否不低于所述LFU队列的队尾统计对象的访问次数;如果所述当前统计对象的访问次数不低于所述LFU队列的队尾统计对象的访问次数,确定所述当前统计对象的队列类型为LFU队列;如果所述当前统计对象的访问次数低于所述LFU队列的队尾统计对象的访问次数,确定所述当前统计对象的队列类型为过滤队列。
优选地,根据所述队列类型将所述当前统计对象存储至对应的队列包括:如果所述当前统计对象的队列类型为过滤队列,将所述当前统计对象存储至所述过滤队列;如果所述当前统计对象的队列类型为LFU队列,通过排序算法将所述当前统计对象存储至所述LFU队列。
优选地,将所述当前统计对象存储至所述过滤队列包括:将所述当前统计对象存储至所述过滤队列的队首;如果所述过滤队列已满,清除所述过滤队列的队尾统计对象。
优选地,通过排序算法将所述当前统计对象存储至所述LFU队列包括:按照访问信息对所述LFU队列中的统计对象进行排序,其中,所述访问信息包括以下至少之一:访问次数、最近访问时间;如果所述LFU队列已满,将所述LFU队列的队尾统计对象迁移至所述过滤队列的队首。
优选地,所述过滤队列中的每个统计对象都包括访问次数计数器,所述访问次数计数器用于统计其对应的统计对象的累计访问次数。
优选地,所述过滤队列包括第一队列和第二队列,其中,所述第一队列用于存储所述过滤队列中的访问次数为1的统计对象,当所述第一队列中的统计对象被第二次访问时,将所述该统计对象迁移至所述第二队列的队首。
优选地,所述第一队列的长度和所述第二队列的长度根据网络资源负荷进行调整,其中,所述网络资源负荷包括以下至少之一:网络流量、网络硬件资源消耗。
优选地,所述访问热度统计方法应用于路由器或服务器上。
根据本发明的另一方面,提供了一种访问热度统计装置,包括:获取模块,用于从接收的访问热度统计请求中获取当前统计对象的URL;判断模块,用于根据所述URL判断所述当前统计对象的队列类型,其中,所述队列类型包括:过滤队列和LFU队列,所述过滤队列采用LRU算法进行排序,用于存储访问次数低于预定门限的统计对象,所述LFU队列用于存储访问次数高于所述预定门限的统计对象,所述过滤队列和所述LFU队列均为固定长度;存储模块,用于根据所述队列类型将所述当前统计对象存储至对应的队列。
优选地,所述判断模块包括:第一确定单元,用于在所述当前统计对象是新增的统计对象的情况下,确定所述当前统计对象的队列类型为过滤队列;第二确定单元,用于在所述当前统计对象已经在所述过滤队列的情况下,根据所述当前统计对象的访问次数与所述LFU队列的队尾统计对象的访问次数的大小,确定所述当前统计对象的队列类型;第三确定单元,用于在所述当前统计对象已经在所述LFU队列的情况下,确定所述当前统计对象的队列类型为LFU队列。
优选地,所述第二确定单元包括:判断子单元,用于判断所述当前统计对象的访问次数是否不低于所述LFU队列的队尾统计对象的访问次数;第一确定子单元,用于在所述当前统计对象的访问次数不低于所述LFU队列的队尾统计对象的访问次数的情况下,确定所述当前统计对象的队列类型为LFU队列;第二确定子单元,用于在所述当前统计对象的访问次数低于所述LFU队列的队尾统计对象的访问次数的情况下,确定所述当前统计对象的队列类型为过滤队列。
优选地,所述存储模块包括:第一存储单元,用于在所述当前统计对象的队列类型为过滤队列的情况下,将所述当前统计对象存储至所述过滤队列;第二存储单元,用于在所述当前统计对象的队列类型为LFU队列的情况下,通过排序算法将所述当前统计对象存储至所述LFU队列。
通过本发明,采用定长过滤队列和定长LFU队列相结合的方式,过滤队列采用LRU算法排序方式,主要用于过滤互联网低频访问对象,与传统LFU算法相比,节省了内存空间,优化了LFU算法。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
本发明实施例提供了一种访问热度统计方法,图1是根据本发明实施例的访问热度统计方法的流程图,如图1所示,包括如下的步骤S102至步骤S106。
步骤S102,从接收的访问热度统计请求中获取当前统计对象的URL。
步骤S104,根据URL判断当前统计对象的队列类型,其中,队列类型包括:过滤队列和LFU队列,过滤队列采用LRU算法进行排序,用于存储访问次数低于预定门限的统计对象,LFU队列用于存储访问次数高于预定门限的统计对象,过滤队列和LFU队列均为固定长度。
步骤S106,根据队列类型将当前统计对象存储至对应的队列。
相关技术中LFU算法消耗存储空间过大。本发明实施例中,采用定长过滤队列和定长LFU队列相结合的方式,过滤队列采用LRU算法排序方式,主要用于过滤互联网低频访问对象,与传统LFU算法相比,节省了内存空间,优化了LFU算法。
步骤S104中根据URL判断当前统计对象的队列类型包括:如果当前统计对象是新增的统计对象,确定当前统计对象的队列类型为过滤队列;如果当前统计对象已经在过滤队列中,根据当前统计对象的访问次数与LFU队列的队尾统计对象的访问次数的大小,确定当前统计对象的队列类型;如果当前统计对象已经在LFU队列中,确定当前统计对象的队列类型为LFU队列。本优选实施方式中,如果当前统计对象已经在过滤队列中,判断当前统计对象的访问次数是否已经达到LFU队列所有统计对象访问次数中的最低访问次数,从而进一步确定当前统计对象属于哪个队列类型,使得确定的队列类型比较准确、可靠。
在一个优选实施方式中,根据当前统计对象的访问次数与LFU队列的队尾统计对象的访问次数的大小,确定当前统计对象的队列类型可以包括:判断当前统计对象的访问次数是否不低于LFU队列的队尾统计对象的访问次数;如果当前统计对象的访问次数不低于LFU队列的队尾统计对象的访问次数,确定当前统计对象的队列类型为LFU队列;如果当前统计对象的访问次数低于LFU队列的队尾统计对象的访问次数,确定当前统计对象的队列类型为过滤队列。
优选地,根据队列类型将当前统计对象存储至对应的队列包括:如果当前统计对象的队列类型为过滤队列,将当前统计对象存储至过滤队列;如果当前统计对象的队列类型为LFU队列,通过排序算法将当前统计对象存储至LFU队列。
优选地,将当前统计对象存储至过滤队列包括:将当前统计对象存储至过滤队列的队首;如果过滤队列已满,清除过滤队列的队尾统计对象。
优选地,通过排序算法将当前统计对象存储至LFU队列包括:按照访问信息对LFU队列中的统计对象进行排序,其中,访问信息包括以下至少之一:访问次数、最近访问时间;如果LFU队列已满,将LFU队列的队尾统计对象迁移至过滤队列的队首。在LFU队列中可以将访问次数作为主排列索引,当统计对象的访问次数一样时,以最近访问时间为依据进行排列。本优选实施方式中,排序算法可以是冒泡排序、选择排序、插入排序等。
优选地,过滤队列中的每个统计对象都包括访问次数计数器,访问次数计数器用于统计其对应的统计对象的累计访问次数。
考虑到互联网访问模式Zipf分布,单位时间内会出现大量的一次访问请求,为了降低一次访问对过滤队列的影响,本发明实施例提供了一种优选实施方式,如下:过滤队列包括第一队列和第二队列,其中,第一队列用于存储过滤队列中的访问次数为1的统计对象,当第一队列中的统计对象被第二次访问时,将该统计对象迁移至第二队列的队首。本优选实施方式中,在过滤队列中设置第一队列和第二队列,第一队列用于淘汰过滤队列中的一次访问对象,当第一队列中的对象二次访问时,将其迁移至第二队列队首。
优选地,第一队列的长度和第二队列的长度可以根据网络资源负荷进行调整,其中,网络资源负荷包括以下至少之一:网络流量、网络硬件资源消耗。例如,网络负荷较高时,可以将第一队列的长度调整为较短,加快其淘汰一次访问的速度,从而降低访问热度统计负荷。
需要说明的是,在实际应用中,上述各个队列的队首和队尾可以互调。例如,图4所示的是LFU队列按照访问次数以及最近访问时间从大到小的顺序排列,即队首的对象访问次数较高,过滤队列队尾的对象访问次数较低。互调之后,LFU队列队尾的对象访问次数较高,过滤队列队首的对象访问次数较低,即过滤队列从队首处淘汰低频访问对象。
优选地,上述访问热度统计方法可以应用于路由器或服务器上。
本发明实施例还提供了一种访问热度统计装置,该访问热度统计装置可以用于实现上述访问热度统计方法。图2是根据本发明实施例的访问热度统计装置的结构框图,如图2所示,该装置包括:获取模块22、判断模块24和存储模块26。下面将对其结构进行详细描述。
获取模块22,用于从接收的访问热度统计请求中获取当前统计对象的URL;判断模块24,耦合至获取模块22,用于根据获取模块22获取的URL判断当前统计对象的队列类型,其中,队列类型包括:过滤队列和LFU队列,过滤队列采用LRU算法进行排序,用于存储访问次数低于预定门限的统计对象,LFU队列用于存储访问次数高于预定门限的统计对象,过滤队列和LFU队列均为固定长度;存储模块26,耦合至判断模块24,用于根据判断模块24判断的队列类型将当前统计对象存储至对应的队列。
如图3所示,优选地,判断模块24包括:第一确定单元242,耦合至获取模块22,用于在当前统计对象是新增的统计对象的情况下,确定当前统计对象的队列类型为过滤队列;第二确定单元244,耦合至获取模块22,用于在当前统计对象已经在过滤队列的情况下,根据当前统计对象的访问次数与LFU队列的队尾统计对象的访问次数的大小,确定当前统计对象的队列类型;第三确定单元246,耦合至获取模块22,用于在当前统计对象已经在LFU队列的情况下,确定当前统计对象的队列类型为LFU队列。
优选地,第二确定单元244包括:判断子单元(图中未示出),用于判断当前统计对象的访问次数是否不低于LFU队列的队尾统计对象的访问次数;第一确定子单元(图中未示出),用于在当前统计对象的访问次数不低于LFU队列的队尾统计对象的访问次数的情况下,确定当前统计对象的队列类型为LFU队列;第二确定子单元(图中未示出),用于在当前统计对象的访问次数低于LFU队列的队尾统计对象的访问次数的情况下,确定当前统计对象的队列类型为过滤队列。
优选地,存储模块26包括:第一存储单元262,耦合至判断模块24,用于在当前统计对象的队列类型为过滤队列的情况下,将当前统计对象存储至过滤队列;第二存储单元264,耦合至判断模块24,用于在当前统计对象的队列类型为LFU队列的情况下,通过排序算法将当前统计对象存储至LFU队列。
优选地,第一存储单元262将当前统计对象存储至过滤队列的队首;如果过滤队列已满,清除过滤队列的队尾统计对象。
优选地,第二存储单元264按照访问信息对LFU队列中的统计对象进行排序,其中,访问信息包括以下至少之一:访问次数、最近访问时间;如果LFU队列已满,将LFU队列的队尾统计对象迁移至过滤队列的队首。在LFU队列中可以将访问次数作为主排列索引,当统计对象的访问次数一样时,以最近访问时间为依据进行排列。本优选实施方式中,排序算法可以是冒泡排序、选择排序、插入排序等。
优选地,过滤队列中的每个统计对象都包括访问次数计数器,访问次数计数器用于统计其对应的统计对象的累计访问次数。
考虑到互联网访问模式Zipf分布,单位时间内会出现大量的一次访问请求,为了降低一次访问对过滤队列的影响,本发明实施例提供了一种优选实施方式,如下:过滤队列包括第一队列和第二队列,其中,第一队列用于存储过滤队列中的访问次数为1的统计对象,当第一队列中的统计对象被第二次访问时,将该统计对象迁移至第二队列的队首。本优选实施方式中,在过滤队列中设置第一队列和第二队列,第一队列用于淘汰过滤队列中的一次访问对象,当第一队列中的对象二次访问时,将其迁移至第二队列队首。
优选地,第一队列的长度和第二队列的长度可以根据网络资源负荷进行调整,其中,网络资源负荷包括以下至少之一:网络流量、网络硬件资源消耗。例如,网络负荷较高时,可以将第一队列的长度调整为较短,加快其淘汰一次访问的速度,从而降低访问热度统计负荷。
需要说明的是,在实际应用中,上述各个队列的队首和队尾可以互调。例如,图4所示的是LFU队列按照访问次数以及最近访问时间从大到小的顺序排列,即队首的对象访问次数较高,过滤队列队尾的对象访问次数较低。互调之后,LFU队列队尾的对象访问次数较高,过滤队列队首的对象访问次数较低,即过滤队列从队首处淘汰低频访问对象。
优选地,上述访问热度统计装置可以应用于路由器或服务器上。
需要说明的是,访问热度统计装置对应于上述访问热度统计方法,其具体的实现过程在方法实施例中已经进行过详细说明,在此不再赘述。
为了使本发明的技术方案和实现方法更加清楚,下面将结合优选的实施例对其实现过程进行详细描述。
优选实施例一
图4是根据本发明优选实施例一的过滤队列与LFU队列的示意图,如图4所示,本优选实施例所示的算法包括两个定长队列:过滤队列和LFU队列,其中过滤队列用于过滤低频请求对象的访问热度统计,LFU队列用于记录高频访问对象的访问热度统计。图4中,虚线表示统计对象从LFU队列向过滤队列迁移,实线表示统计对象从过滤队列向LFU队列迁移。
过滤队列采用LRU排序方式,通过队列末尾淘汰最近最少访问的统计对象;LFU队列使用定长的LFU排列,根据统计对象的访问次数和最近访问时间进行排序,其中访问次数为主排列索引。每个过滤队列的统计对象中都包含访问次数计数器,记录统计对象的累计访问次数,当过滤队列中的统计对象访问次数不小于LFU队列中的最小访问次数时,把该对象迁移至LFU队列,并在LFU队列中按照访问次数和最近访问时间进行排序。当LFU队列已满,有新记录加入时,迁移末尾记录至过滤队列队首。
优选实施例二
图5是根据本发明优选实施例二的过滤队列与LFU队列的示意图,本优选实施例中考虑到互联网访问模式Zipf分布,单位时间内会出现大量的一次访问请求,为了降低一次访问对过滤队列的影响,把过滤设置为第一队列和第二队列。如图5所示,第一队列用于过滤队列中的一次访问请求对象,当第一队列中的统计对象第二次被访问时,迁移到第二队列队首。
第一队列和第二队列的长度可根据网络负荷进行调整,当负荷较高时,降低第一队列长度,使第一队列的淘汰速度加快,从而降低热度统计负荷,当网络负荷较低时,负荷较轻时,可以扩大第一队列长度,降低第一队列的淘汰速度。上述网络负荷包括但不限于网络流量和网络硬件资源消耗,如中央处理器(Center Processing Unit,简称为CPU)负荷,内存消耗等。
优选实施例三
图6是根据本发明优选实施例三的算法实现的示意图,如图6所示,访问热度统计模块收到访问统计请求消息,获取该消息中统计对象的URL,通过哈希函数Hash(URL),计算出哈希表的关键码值t,并根据t定位到哈希表记录。根据哈希表中的Value指示的队列信息,判断当前统计对象处在哪个队列。
如果是新统计对象,则把哈希表中的队列指针指向过滤队列的队首,如果过滤队列已满,则清除队尾统计对象;
如果该统计对象已经在过滤队列中,则判断当前统计对象的访问次数是否不低于LFU队列队尾对象的访问次数。如果是,则迁移到LFU队列;如果否,则指向过滤队列队首;
如果该统计对象已经在LFU队列中,通过递归函数比较当前统计对象所在队列的前趋节点对象的访问次数和最近访问时间的排序是否大于当前统计对象,如果小于当前统计对象,则两者交换位置,否则排序不变,结束递归。
需要说明的是,本优选实施例仅以冒泡算法为例,但并不做限定,也适于其他排序算法。
LFU队列是根据访问次数和最近访问时间排序的,当LFU队列已满时,有新记录加入,则迁移队尾统计对象至过滤队列队首。
优选实施例四
图7是根据本发明优选实施例四的访问热度统计方法的流程图,如图7所示,包括如下步骤:
步骤S702,收到其他模块调用控制原语,对目标对象进行访问统计请求。
步骤S704,获取请求消息中的统计对象URL,并使用哈希函数Hash(URL),对统计对象URL进行哈希,并最终获取哈希表的关键码值t。
步骤S706,根据哈希表的关键码值,定位哈希表记录,获取哈希表Value值。
步骤S708,如果哈希表记录为新记录,则添加新记录,对哈希表记录中的访问次数字段进行加1操作。
步骤S710,根据哈希表记录的信息判断当前统计对象所指向的队列类型。如果队列类型为空,则执行步骤S712a;如果毒劣类型为过滤队列,则执行步骤S712b;如果队列类型为LFU队列,则执行步骤S712c。
步骤S712a,当步骤S710判断当前哈希表记录指示的队列类型为空时(即哈希表当前记录为新增记录,所指的队列类型为空),此时先判断过滤队列长度是否已经满。如果是,执行步骤S714a,否则执行步骤S716a。
步骤S714a,清除过滤队列队尾记录。
步骤S716a,把哈希表队列指针指向过滤队列队首。
步骤S718a,设置哈希表所指的队列类型为过滤队列。
步骤S712b,当步骤S710判断当前哈希表记录指示的队列类型为过滤队列时,判断哈希表记录中的访问次数是否不小于LFU队列队尾的访问次数,如果是,执行步骤S714b;否则执行步骤S724b。
步骤S714b,判断LFU队列是否已经满(即判断LFU队列长度是否已经到达预设长度),判断为真执行步骤S716b,否则执行步骤S718b;
步骤S716b,把LFU队尾记录指针指向过滤队列队首。
步骤S718b,把哈希表记录指向LFU队列队尾。
步骤S720b,调用递归算法,比较前趋统计对象的访问次数与当前统计对象,如果不小于当前统计对象的访问次数,则交换位置;否则结束递归,保持原排序。需要说明的是,本优选实施例仅以冒泡算法为例,也适于其他排序算法。
步骤S722b,设置哈希表记录队列类型为LFU队列。
步骤S724b,把哈希表队列指针指向过滤队列队首。
步骤S712c,当步骤S710判断当前哈希表记录指示的队列类型为LFU队列时,调用递归算法,比较前趋统计对象的访问次数与当前统计对象的访问次数,如果不小于当前统计对象的访问次数,则交换位置;否则结束递归,保持原排序。
本优选实施例中,将队列类型分为了三种,即空、过滤队列和LFU队列。实际上,队列类型为空,就是要将该对象存储至过滤队列,因此,也可以将其看成队列类型为过滤队列。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
综上所述,根据本发明的上述实施例,采用定长过滤队列和定长LFU队列相结合的方式,过滤队列采用LRU算法排序方式,主要用于过滤互联网低频访问对象,与传统LFU算法相比,节省了内存空间,优化了LFU算法。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。