专利名称:一种存储表更新方法
技术领域:
本发明涉及一种更新存储表的方法,特别是涉及一种对大容量存储表的快速、有效的表项更新方法。
背景技术:
随着Internet网络的迅速发展,网络技术的不断进步,高性能的网络设备的不断出现,用软件的方法来实现网络数据的处理,以其灵活多变,低成本高产出,低开发周期,而占据一席之地,经久不衰。面对着数据的海量性、突发性,纯软件处理方式同硬件处理相比,虽然具有很高的智能化程度,但处理速度与硬件处理确有天壤之别,需要采用高效的方法,便捷的流程才能够大大的缩小两者之间的差距。
在软件的处理过程中,大部分都具有一个共同点,那就是需要在有限的存储空间中维持着一个大容量的存储表,用以记录处理过程的中间数据(这些中间数据可以采用哈希表、链表或者数组的方式组织起来),它们往往需要周期的进行更新,删除一些无效的、过期的表项,释放其占用的系统资源,提供给其它数据使用,提升整个设备的处理能力。
由于这些数据表项动辄成千上万, 甚至到十万、百万。对于这些表项,往往要周期性的进行遍历更新,此操作不可避免的要耗费处理器的一定时间,所以一个低效的流程、繁杂的方法不仅影响到其他数据流的处理速率,甚至可能造成其它数据流的中断。对于一个大容量表项,不对其更新是不可想象的,一方面,整个设备的存储空间有限,不可能容纳越来越多的表项,另一方面,不是所有的表项均有效的,每个表项均有其生存周期,超过了这个周期,只是一堆无用的数据而已。为此,需要有一种机制,不断地更新所有表项,并清除无用地表项。最常用的方法无外乎有下面几种●简单遍历法系统设定一个循环定时器,周期的简单遍历所有表项,此法最容易实现,占用资源最小,但效率非常低,所以仅适用于表项非常少的情况,否则它所引起的时延将无法想象。
●多定时器法对每一个表项设定一个定时器,定时器的时长为该表项的超时时间。当定时器事件到时,对该表项进行更新。这也只适用于表项较少的情况,因为它占用非常多的定时器资源(与表项的数目相同),及一定的定时器事件队列。但是当表项较多时,本方法缺陷就很明显,会耗用大量的定时器资源,频繁的定时器事件中断,和进程切换,加重处理器的负担。
●整合法对于每一个表项,可能其对应的超时时间不尽相同,但可将其统一整合为不同的定时器时间段,而将相同超时单位段的表项,归成一类,共同使用一个循环定时器。每次定时器超时时,对该类的所有表项进行更新。这个方法是上两者的综合,一定程度上减少了定时器资源,提高了效率。但与上述两种方向类似,对于大容量的表项时,效率依旧不高。
●分段遍历法整个表项只启动一个定时器,其时长设置很小,每次定时器事件到时,只更新给定数目的表项,只要保证在给定的遍历周期内,更新所有的表项即可。定时器时长和一次更新的数量依据整个表项的多少和给定的遍历周期而定。该方法占用资源也很少,且不会引起数据流处理的较大延时。缺点是当数据流量较集中时,引起的时延相对较大。
所有以上的方法中有一个共同的缺点无论数据流量怎样,更新机制一如既往的工作着,数据流量频繁时,照样在指定的时间内要更新一定数量的表项,没有流量或者流量稀疏时仍是如此。这样导致的结果是,数据流量频繁时,仍要花费一定量的处理器时间,从而周期性的出现数据流量的处理时延增大,甚至出现停顿。
发明内容
本发明解决的技术问题就是提供了一种大容量存储表更新方法,能够针对当前系统的数据流量,智能地分配处理器时间来处理表项地更新,尽可能少地影响正常的数据流处理,充分合理地利用处理器资源。
本发明所述的大容量存储表更新方法,包括以下实现步骤第一步,确定存储表的平均遍历周期,设置单次更新表项条数的上限值;第二步,接收一个数据,并记录该数据到达的时间;第三步,计算本次数据到达的时间和上次数据到达的时间的时间间隔;将所述时间间隔除以设定的平均遍历周期得到更新表项的百分比;将所述存储表的表项总数乘以所述更新表项百分比得到本次需要更新的表项条数;第四步,如果所述第三步中需要更新的表项条数大于上限值,则将需要更新表项条数设置为上限值,否则执行第五步;第五步,从上次更新的表项开始更新条数为所述第四步的更新表项条数的存储表表项,返回第二步。
设置单次更新表项条数的下限值,当更新表项条数小于下限值,则将需要更新表项条数设置为下限值。
本发明所述的大容量存储表更新方法巧妙的起到了系统负荷均衡的作用当数据流量大时,数据到达的间隔时间短、系统处理负荷重,但由于需要更新的表项百分比相应减小,从而由更新而引起的处理器负荷也小,对整个系统的性能影响也小;数据流量小时,处理器负荷也小,数据到达间隔的时间长,遍历的百分比就大。这样就避免了集中更新所造成的处理器负荷不均衡。另一方面,实现本发明的方法最多只需要一个定时器,而且所占用的定时器等额外资源小到可以忽略不计。此外,本发明方法简单易行,占用资源很小。相比起其他方法,大大提高了更新的效率,又基本不影响系统对数据流的正常处理。
图1是本发明所述大容量存储表更新方法的处理流程图。
具体实施例方式
以下通过具体实施例结合附图详细介绍本发明所述大容量存储表更新方法。
以网络地址转换(NAT)在通讯设备上的实现为例在实现网络地址转换的过程中,当数据报文由私有网络访问公共网络时,由于公共网络不支持私有地址,故需要对源IP地址(和端口)作一定的转换,而当收到回应报文数据时,再将其目的地址转换为原来的私有网络地址,而在此过程中必须维持所用的转换表项。该表项有一定的生存周期。而在给定的周期内,没有数据用到该表项,它就必须被清除,以释放其占用的资源提供给其他转换使用,此时便需要采用遍历更新方法。
已知上次更新时间为T1,总的需要更新的表项为M,平均的更新遍历周期为N,单次更新的条数上限值是K。
本次报文数据到达的时间为T2,计算需要更新的表项条数L,L=(T2-T1)×(M/N)判断需要更新的表项条数L是否大于上限值K,如果是,则将上限值K赋值给本次需要更新的表项条数I,否则将L赋值给I;然后记录本次更新的时间T2存储到T1中,再从上次更新的表项起更新I条表项。
当数据流从无到有时,因为数据到达的间隔增大,一次更新的条数增加,但由于更新条数有一定的上限限制,使得在平均遍历周期内无法更新所有表项,使得更新机制变慢,在极端情况下(根本没有数据流),则更新机制将失效。为了解决这个问题,可以通过启动一个定时器作为辅助,定时器事件的到达仿真一个数据的到达,当数据数据流很少或没有时,将定时器事件到达的时间赋值给T2,以维持对表项的更新。
另外还可以设置一个下限值,当需要更新的表项条数L小于下限值时,则下限值赋值给本次需要更新的表项条数I,完成表项的及时更新。
综上所述,本发明所述大容量存储表更新方法遵循下面的原则1、根据每次数据到达的时间间隔来决定系统数据流的忙和闲,并以此为更新的触发机制。
2、将整个表项按照数据流的忙和闲作不平均的分摊,每次只更新一部分。
3、数据流越忙,更新的表项占全部表项的百分比越小。
4、辅助一个定时器,以便当数据流很少或没有时,维持对表项的更新。
权利要求
1.一种大容量存储表更新方法,其特征在于,包括以下实现步骤第一步,确定存储表的平均遍历周期,设置单次更新表项条数的上限值;第二步,接收一个数据,并记录该数据到达的时间;第三步,计算本次数据到达的时间和上次数据到达的时间的时间间隔;将所述时间间隔除以设定的平均遍历周期得到更新表项的百分比;将所述存储表的表项总数乘以所述更新表项百分比得到本次需要更新的表项条数;第四步,如果所述第三步中需要更新的表项条数大于上限值,则将需要更新表项条数设置为上限值,否则直接执行第五步;第五步,从上次更新的表项开始更新条数为所述第四步的更新表项条数的存储表表项,返回第二步。
2.根据权利要求1所述的大容量存储表更新方法,其特征在于,在所述第一步之后还包括以下处理步骤设置一个定时器,定时器事件的到达仿真一个数据的到达,当数据数据流很少或没有时,将定时器事件到达的时间赋值给本次数据到达的时间。
3.根据权利要求1或2所述的大容量存储表更新方法,其特征在于,在所述第一步中还包括设置单次更新表项条数的下限值,并且所述第四步中还包括如果所述第三步中需要更新的表项条数小于下限值,则将需要更新表项条数设置为下限值。
全文摘要
本发明涉及一种更新存储表的方法,包括以下实现步骤第一步,确定存储表的平均遍历周期和单次更新表项条数的上限值;第二步,接收一个数据,并记录该数据到达的时间;第三步,计算本次需要更新的表项条数;第四步,如果所述第三步种需要更新的表项条数大于上限值,则将需要更新表项条数设置为上限值;第五步,从上次更新的表项开始更新存储表表项。采用本发明所述的方法可以根据数据的间隔时间自动调整更新的表项的百分比,起到均衡系统负荷的作用,可以应用于需要管理大容量存储表的系统中。
文档编号G06F5/06GK1493969SQ0214500
公开日2004年5月5日 申请日期2002年10月31日 优先权日2002年10月31日
发明者欧历云, 王乾, 李华 申请人:深圳市中兴通讯股份有限公司