用于低存储器开销数据库的方法和数据结构的制作方法

文档序号:6408769阅读:188来源:国知局
专利名称:用于低存储器开销数据库的方法和数据结构的制作方法
技术领域
本发明的实施例一般涉及数据库系统,具体而言,涉及一种提供有效检索和数据插入能力的低开销数据结构。
背景技术
随着信息技术的快速发展,预期现代的计算机系统要存储和交换日益增长的数据量,因此这些系统对数据的有效管理尤为重要。与检索数据库和/或将数据插入数据库中所相关的延迟通常成倍于与计算机网络(例如,互联网)中传输数据相关的等待时间的显著资源,并且数据库缺乏有效的管理导致整个网络数据流的瓶颈。例如,网络交换设备和路由器维持有IP(互联网协议)地址的数据库,并且每一IP地址可以具有要施加给共享所述IP地址的任意数据包的相应操作或规则。例如,规则可以包括网络地址转换、路由判定(例如,哪个端口指向数据包)、优先级确定或过滤功能。当交换设备或路由器接收到具有IP地址的数据包时,该交换设备或路由器可以检索它的IP地址数据库以便确定对所述数据包采取哪种操作。
数据库可以包括给定深度的一连串顺序存储的数据条目,例如IP地址。检索所述顺序数据库的所需时间通常与数据库的深度成比例。例如,如果在顺序数据库中存在100个条目,那么检索数据库就需要100个时钟周期。所以,顺序数据库不适合于除最小的数据库应用之外的所有数据库应用,因为对于这些顺序检索来说需要很长的等待时间。
一种可选的方案是使用组相联高速缓存。该高速缓存被划分为多个区段,每一区段能够存储相同固定数量的数据条目,并且这些区段的尺寸不能扩展。所以,不能够保证一个区段内的存储空间,并且如果试图将一个数据条目插入到整个区段中,那么将会出现数据条目的“冲突”。该冲突通常导致数据丢失,这是因为最新被插入的数据条目可能会代替已有的条目,或者新数据本身也可能丢失。同样,多个固定尺寸区段的使用导致大量的不被利用的存储器。总之,数据库使用组相联高速缓存的效率是低的,并且容易导致数据丢失。对这些数据丢失和故障进行处理以便充分地利用可用的存储器,会增加与组相联高速缓存数据库相关的存储器开销。
另一种措施是使用内容可寻址的存储器、或CAM。CAM提供一种其中顺序存储条目的数据结构,但是CAM包括能够对顺序存储的数据条目进行并行检索的逻辑电路。所以,CAM的使用克服了与传统顺序数据库相关的等待时间,并且进一步避免了通过组相联高速缓存而出现的冲突和数据丢失问题。然而,CAM具有一些显著的缺陷。特别是,CAM的成本很高,不仅表现在价钱上而且表现在上述逻辑电路的片上实际成本方面。同样,CAM不适合于具有大数量条目的数据库。
随着信息技术和计算机网络技术的持续发展,将需要管理日益增加的数据量。例如,将希望下一代的基于硬件的网络交换设备和路由器能够处理具有一百万以上条目的IP地址数据库。这种下一代网络部件和其他数据库系统将需要能够保持数据完整性(例如无数据冲突)、并且处理大数量的数据条目的高效率、低存储器开销的数据库系统。目前基于硬件的措施—例如所有如上所述的顺序数据库、组相联高速缓存以及内容可寻址的存储器—将不符合这些下一代系统的需要。


图1示出了网络装置的一个典型实施例的示意图,该网络装置包括结合数据结构的一个或多个交换设备。
图2示出了图1所示交换设备的一个实施例的示意图。
图3示出了图1所示交换设备的另一实施例的示意图。
图4示出了图1所示交换设备的又一实施例的示意图。
图5示出了驻留在图1交换设备中的数据结构的实施例的示意图。
图6是说明在图5的数据结构中执行查找的方法的框图。
图7是说明将数据条目插入到图5的数据结构中的方法的框图。
图8A-8H示出了说明图6和7的方法的典型实施例的示意图。
具体实施例方式
在此所描述的是用于提供有效数据检索和插入能力,同时也显示出最小的数据冲突的低开销数据结构的实施例,该数据结构用于任意数据库的应用。同时在此也对结合所述数据结构的设备的实施例、和用于执行数据检索和插入的方法进行描述。在此所公开的数据结构、设备以及方法的实施例,是以维持IP地址数据库的网络交换设备或路由器的上下文形式描述的。然而,应该理解,所公开的实例并不限制于此,而且这些实施例通常应用于需要数据检索和插入能力的任意数据库的应用。
图1示出了一种网络装置100。该网络装置100包括多个网络120,每一网络120具有与其耦合的一个或多个节点140。网络120可以包括局域网(LAN)、城域网(MAN)、广域网(WAN)或其他的网络。节点140包括连接到网络120之一的任意可寻址设备,诸如配置为(例如,提供具有一个网卡)与网络120接口的服务器或其他计算机系统。可以互连所述网络120,并且一个或多个交换设备200(例如,分组交换或路由器)可以便于网络之间的数据传输。互连的网络120和交换设备200的集合可以包括因特网5或其一部分。应该理解,网络装置100可以包括其他的部件-例如,中继器、网关、网络集线器以及桥接器,为清楚起见将其省略。
每一交换设备200包括能够接收数据(例如,数据包),并且基于所述数据的内容(例如,IP地址、端口号或其他地址)而将所接收的数据转发到合适的网络120和/或节点140的任意合适的设备和/或电路。通常,该交换设备将保持一个在进行路由判定以及执行其他功能中使用的IP地址(如以上所述,或其他识别信息)的表或数据库。一种规则典型地与每个IP地址相关,并且该规则可以包含于IP地址数据库中。与IP地址相关的规则指示出,有关对具有所述IP地址的数据包采取什么样的操作-例如,路由判定、网络地址转换、优先级确定和/或过滤功能。如下所述,将使用数据结构来实现交换设备的IP地址数据库。为便于理解,将在IP地址数据库的环境中描述数据结构;然而,应该理解,如上所示那样,所公开的数据结构通常适用于任意类型的数据库。
参考图2,将说明交换设备200的实施例。交换设备200包括关键字产生单元210和与之耦合的杂凑(hashing)单元220。关键字产生单元210包括能够访问所接收的数据并且基于所接收的数据而产生关键字的任意合适的设备和/或电路。例如,交换设备200可以接收来自于网络120的数据包。关键字产生单元210可以访问该数据包以便读取源IP地址、目的IP地址、源端口号、目的端口号以及协议。然后这些数据段首尾相连以形成关键字,所述关键字—包括源和目的IP地址、源和目的端口以及协议—通常称之为“5元组(5-tuple)”。然而,一般由关键字产生单元210所产生的关键字可以包括所接收的数据包内所包含的任意部分的数据。如以下将描述的那样,该关键字用于检索由交换设备200所提供的数据结构。
关键字产生单元210将所产生的关键字—例如一个5元组—提供给杂凑单元220。杂凑单元220包括能够从关键字产生单元210接收关键字、并且将一杂凑函数应用于该关键字以便产生一个指定位数的杂凑值—也就是一个“n位”杂凑值的任意合适的设备和/或电路。杂凑单元220可以使用任意合适的杂凑函数。作为举例,通过提取关键字的较低n位而可以产生n位杂凑值。然而,通常,杂凑函数可以包括关键字中位的任意合适的组合和/或变换。n位杂凑值用于索引至交换设备中的数据结构中,在下文中将进行详细的描述。
再次参考图2,交换设备200也包括数据结构500。该数据结构500包括索引表530,以及与之通信的关键字数据库560,而索引表530存储在第一存储器230a中,关键字数据库560存储在第二存储器230b。耦合于存储器230b,并且因此与关键字数据库560相通信的是多个首部指针寄存器590,包括寄存器590a、590b,...590k。数据结构500提供IP地址或其他数据条目的有效存储和查找,以下将更加详细地解释数据结构的操作。
如图2所示,每一索引表530和关键字数据库560分别存储在单独的存储器230a,230b中。然而,应当理解,交换设备200可以实施任意合适的存储器体系结构。例如,参考图3,交换设备200可以包括已驻留有索引表530和关键字数据库560的单一的集成存储器330。进一步举例来说,如图4所示,交换设备200可以耦合到外部存储器430b,该外部存储器430存储关键字数据库560。虽然未在图中说明,但是索引表530可以存储在外部存储器中,或者在另外的实施例中,索引表530和关键字数据库560都可位于外部存储器中,无论其位于单独的外部存储器中还是位于单一外部存储器中。用于存储索引表530和关键字数据库560每一个的存储器230a、230b、330、430b可以包括随机存取存储器(RAM)或任意其他合适的存储器电路和/或设备。
交换设备220的所述部件—例如,关键字产生单元210、杂凑单元220、存储器230a、230b(或330或430b)以及首部指针寄存器290a-k-可以包括单独的部件,这些单独的部件例如通过导线、电路板迹线、焊点接合等等而相互耦合,以便形成交换设备。作为选择,交换设备200可以形成为单一部件。例如,关键字产生单元210、杂凑单元220、存储器230a、230b(或330或430b)以及首部指针寄存器290a-k中的每一个都可以形成为单一集成电路(IC)芯片的一部分。当然,所述IC芯片可以使用片外存储器(参见图4)。应当理解的是,交换设备200可以包括除图2-图4所示部件之外的其他部件,为便于理解而忽略所述这些其他部件。例如,交换设备200可以包括附加的存储器电路和/或逻辑电路,以及其他的信号线和/或总线。
现在参考图5,更加详细地说明包括索引表530、关键字数据库560、首部指针寄存器590a-k的数据结构500。索引表530包括多个条目540,而条目540的数量等于2n(其包括n位杂凑值的所有可能的组合)。每一条目540可以包括区段指针542和多个有效位544。条目540的区段指针542用于识别当前被分配以所述条目540的关键字数据库560的一个区段,接下来将详细地对其进行描述。
有效位544用于指示关键字数据库560中的区段是否已经分配给该条目540,并且进一步指示被分配的区段的尺寸。有效位544的数量等于关键字数据库560中不同尺寸的区段的数量。如以下所述那样,关键字数据库560中区段尺寸的数量被指定为数量k,因此,存在有效位544的k个数量。如果将条目540的一个或多个有效位544设置为高(例如,1位),那么已经将关键字数据库560中的一区段分配给该区段,并且进一步,有效位544的数量设置为高提供了已经分配的区段尺寸的指示。当然,应当理解,有效位(或多个位)544设置为低(例如,0位)也可以用于指示区段的分配。
关键字数据库560包括多个可变尺寸的区段570,例如包括一个或多个尺寸为1的区段570a(每个存储一个条目)、一个或多个尺寸为2的区段570b(每个存储两个条目)、一个或多个尺寸为3的区段570c(每个存储三个条目)等等。该关键字数据库560可以包括任意合适数量的区段尺寸,包括上至尺寸为k的区段570k(每个存储k个数量的条目)。由于索引表530的每一条目540中的区段指针542知道分配于其的关键字数据库560的任意区段570的存储位置,因此不同区段570a-k可以存储在存储器的任何地方,并且可以动态地分配给索引表530的条目540。换言之,索引表530持续地跟踪关键字数据库560中区段570的存储位置,其并不在固定的存储位置上。
关键字数据库560的每一区段能够存储一个或多个条目580,例如每一尺寸为1的区段570a可以存储一个条目,每一尺寸为2的区段570b可以存储两个条目,每一尺寸为3的区段570c可以存储三个条目,...,每一尺寸为k的区段570k可以存储数量为k的条目,其中每一条目580可以包括关键字582以及规则584。条目580的关键字582是一个通过关键字产生单元210产生并且被插入关键字数据库560中的关键字。所述规则584包含将应用于共享关键字数据库560中的关键字582的任意数据包(或一般说,应用于任意数据)一个或多个操作。例如,规则584可以指引交换设备200对数据包进行路由判定,以对数据包执行网络地址转换,从而确定数据包中所包含的数据的优先级和/或确定是否要过滤数据包。
在另一实施例中,关键字数据库560的区段570中的条目580也可以包括时间戳588。条目580的时间戳588指示第一次将条目插入关键字数据库560的时间,从而提供条目580的“寿命”指示。时间戳588可以用于滤除关键字数据库560中不再可行(也就是,最近未被访问)的老化条目580,同时用于执行其他的功能。
通过相应的首部指针寄存器590来识别每种尺寸的区段570的第一“空闲”区段(也就是无条目580)。例如,通过尺寸为1的首部指针寄存器590a来识别尺寸为1的区段570a的第一空闲区段。同样,通过尺寸为2的首部指针寄存器590b来识别尺寸为2的区段570b的第一空闲区段,等等。将被插入关键字数据库560的区段570的数据条目580——以及与索引表530的相同条目540相关联并且将被复制到相同的区段570的任意现有条目580,如以下解释的那样——将被插入到关键字数据库560中合适尺寸区段的第一空闲区段中。所以,每一首部指针寄存器590a-k跟踪其相关尺寸的第一空闲区段,其在交换设备200运行期间可以动态地改变,以致于在任意时间点可以识别并且访问关键字数据库560的最佳尺寸的空闲区段570。
最初,也就是在系统上电、在系统引导和/或在系统复位时,关键字数据库560的所有区段570是空闲的。在该时刻,如分别由箭头501、502所指示的尺寸1和尺寸2,将给定尺寸的其他区段与第一空闲区段链接在一起以形成链表。不存在与保持该链表相关的存储器开销,这是因为仅当区段570空闲时,才需要区段的链接指针—也就是识别该尺寸区段的链表中下一区段570的指针,并且因此,能够将链接指针存储在将放置第一条目580的区段部分中。当分配第一空闲区段570以接收一个条目(或多个条目)580时,相应首部指针寄存器590中的地址被复制到索引表530中的合适区段指针542之上,并且同样,在最新分配的区段570中的链接指针被复制到首部指针寄存器590之上,如此以致于由链接指针所识别的区段570现在被识别为该尺寸的第一空闲区段。
应当理解,最初(当所有区段570空闲时),被标记为第一空闲区段的每一尺寸的区段570是任意的,由于给定尺寸的任意空闲区段能够接收数据,因此能够是第一空闲区段。另外,一连串给定尺寸的区段570链接到该尺寸的第一空闲区段的顺序是任意的,并且该尺寸的区段可以以任意合适的顺序而进行链接。所以接下来,如上所述,给定尺寸的区段570可以定位在存储器(例如,存储器230b、330、430b)的任何地方。上述存储器体系结构允许动态分配关键字数据库560内的区段570,并且基于需要而分配关键字数据库560的区段570。
通过参考执行图6所示的数据查找方法600的实施例,和执行图7所示的数据插入的方法700的实施例,以及通过参考说明数据插入和数据查找操作的图8A-H的实例,能够更好地理解数据结构500的操作,以及交换设备200的操作。
现在参考图6,框图说明了用于检索数据结构500的方法600的实施例。如方块605所示,在关键字产生单元210接收数据包并且产生检索关键字,其通过方块610来说明。检索关键字可以包括5元组或数据包中所包含的数据的任意合适部分。然后将该检索关键字提供到杂凑单元220,并且参考方块615,将杂凑函数应用于检索关键字以便产生一个n位杂凑值。并且,该n位杂凑值可以包括检索关键字的较低n位,或检索关键字位的任意其他合适组合和/或变换。
参考方块620,访问与n位杂凑值相应的检索表530中的条目540。例如,如果n位杂凑值等于数目43,那么索引表530中的第43个条目就是相应的条目。访问相应的条目540以确定设置为高的有效位544的数量(有效位的数量设置为高,由变量r所表示)。一个或多个高有效位544(例如1位)将指示,当前将关键字数据库560中的区段570分配给索引表530中被索引的条目540(例如,第43个条目)。此外,如所示那样,低有效位(例如0位)也可以用于指示存在一个被分配的区段570。参考附图标记625,如果没有有效位544被设置为高,则表明没有关键字数据库560的区段570被分配给索引表530中被索引的条目540,从而查找失败,如方块690所示。
再一次参考附图标记625,如果将有效位544设置为高(也就是,r>0),那么如方块630所示,访问在索引表530的相应条目540中的区段指针542(例如,第43个条目)。如方块635所示,该区段指针542将识别当前被分配给索引表530中相应条目540的关键字数据库560中的一个区段570,并且访问所分配的区段570。关键字数据库560的所分配的区段570将包括一个或多个条目580。例如,如果被分配的区段是尺寸为1的区段570a,那么该区段将包括一个条目580。同样,如果被分配的区段是尺寸为2的区段570b,那么该区段通常将包括两个条目580,等等。参考方块640,然后将被分配区段570中的每一条目580与检索关键字相比较。
参考附图标记645,如果被分配区段570中的没有条目580包括与检索关键字匹配的关键字582,那么查找失败(参见方块690)。虽然被分配的区段570包括一个或多个条目580-这些条目的每一个条目包括一个具有与检索关键字的n位杂凑值(例如,43)相等的n位杂凑值的关键字582-被分配区段570中没有关键字582与检索关键字相匹配。这种结果是可能的,因为由关键字产生单元210所产生的多个明显不同的关键字可以显示出相同的n位杂凑值。所以,n位杂凑值的识别没有必要指示关键字的标识。该n位杂凑值实质上是一种用于索引到关键字数据库560中的工具,并且存储在共享相同n位杂凑值的所有关键字582的区段570中的内容使得数据结构500能够有效地分类、存储以及随后检索关键字。
再一次参考方块645,如果其中一个条目580包括一个与所述检索关键字相匹配的关键字582,那么继续查找。如在方块650所示那样,然后可以访问与匹配关键字582相关的规则584,并且如方块655所示,所述规则584可以应用到从中产生检索关键字的所接收的数据包。此外,该规则例如可以指示进行网络地址转换、进行路由判定、进行优选权确定、和/或进行过滤判定。
图7的框图示出了一种用于将数据—例如包括关键字582、规则584以及任选的时间戳588的条目580-插入到数据结构500的方法700的实施例。将数据条目插入数据结构500中的方法700存在于查找操作失败的假设环境中,从而需要数据插入操作。然而,应当理解,可以不依赖于任何已失败(或未失败)的查找操作而执行数据插入操作。
参考图7中的方块690,查找操作失败。从而,已经接收一个数据包,产生检索关键字(例如5元组),产生n位杂凑值(例如关键字中较低的n位)以及访问索引表530中相应的条目540,以便确定有效位544设置为高的数目r(参见图6,方块605、610、615、620)。所以,存在一个新条目(包括关键字、规则以及任选的时间戳)以插入到关键字数据库560中。此外,r个有效位544设置为高,如果存在的话,那么指示先前已经分配给索引表530中相应的条目540的关键字数据库560中所述尺寸的区段570。如果没有有效位544设置为高—也就是说,r等于0-那么先前没有关键字数据库560的区段570分配给相应的条目540。再次,设置为低的一个有效位或多个有效位544(例如,0位)也可以用于指示关键字数据库560的区段570的分配。
如上所述,存在一个条目—即,关键字、相应的规则以及任选的时间戳—以便插入到所述关键字数据库560中。所以,如方块705所说明那样,在关键字数据库560中识别出尺寸等于(r+1)的第一空闲区段。换句话说,发现了具有大于关键字数据库560中任意先前被分配区段570至少一个尺寸的尺寸的区段570。通过尺寸为(r+1)的首部指针寄存器590来识别尺寸为(r+1)的第一空闲区段。举例来说,如果相应的条目540中没有有效位544设置为高(也就是,r=0),那么需要识别尺寸为1的第一空闲区段。如果例如,两个有效位544被设置为高(也就是,r=2),那么需要识别尺寸为3的第一空闲区段。
如方块710所示,一旦识别了尺寸等于(r+1)或更大的第一空闲区段,就将关键字数据库560的该区段570分配给索引表530的相应条目540。参考方块715,然后将条目580插入到关键字数据库560中最新被分配的区段,所述条目580包括关键字582以及相应的规则584。条目580可以进一步包括时间戳588。
如以上所建议的那样,大于先前被分配区段一个尺寸的空闲区段,如果存在的话,需要对其进行识别,以致于可以将一个附加的条目插入到关键字数据库560,并且通过其n位杂凑值来索引。然而,如果大于先前被分配区段一个尺寸的区段570不可用,那么可以分配一个更大尺寸的区段570。所以,如在此所使用的,短语“更大尺寸”和“较大尺寸”所涉及的区段是,其尺寸在某种程度上均大于先前被分配的区段的尺寸。同样,如果先前被分配的区段足够大到能够接收新的条目—也就是当该区段被分配时,合适尺寸的区段不可用,因此使用更大的尺寸—则不需要分配新的区段。
如果设置为高的有效位544的数目是零(也就是,r=0),参见附图标记720,索引表530的相应条目540不具有先前为其分配的关键字数据库560的区段570。换言之,没有具有相应于索引表530的相应条目540的n位杂凑值的关键字先前被插入关键字数据库560。从而,没有条目复制到关键字数据库560的最新被分配的区段上。
再一次参考附图标记720,然而,如果设置为高的有效位544的数目是非零(也就是r>0),则指示索引表530的相应条目540具有先前为其分配的关键字数据库560的区段570,该被分配的区段570需要被访问。因此,读取相应条目540的区段指针542-参见方块725-访问由该区段指针542所识别的关键字数据库560的区段570,如方块730所示。关键字数据库560的该区段570先前已经被分配给索引表530的相应条目540,并且该区段570通常具有等于设置为高的有效位544的数目(也就是等于r)的尺寸。如方块735所说明那样,在尺寸为r的该区段中的每一条目被复制到最新被分配的尺寸为(r+1)的区段。
在将新条目580(如果必要的话,这些条目580来自于任意先前被分配的区段)插入到关键字数据库560的最新被分配的区段570之后(或与之相结合),更新索引表530相应条目中的有效位544,也就是与从所产生的关键字中得来的相应于n位杂凑值的条目540,所述关键字形成被插入到最新被分配的关键字数据库560的区段中的一部分新条目580,如方块740所示。一个附加的有效位544将被设置为高,以致于设置为高的有效位544的总数目等于最新分配的区段的尺寸,该尺寸等于(r+1)。
如方块745所示,索引表530的相应条目540中的区段指针542需要被更新。从而,相应于已经被分配的第一空闲尺寸(r+1)区段的首部指针寄存器590中所存储的地址—也就是最新被分配的尺寸为(r+1)的地址—被复制到相应条目540的区段指针542。同样,如方块750所示,需要更新合适的首部指针寄存器590。最新被分配的区段包括用于识别(尺寸为r+1区段的)链表中下一空闲相同尺寸区段的链接指针。为了更新尺寸为(r+1)的首部指针寄存器590,需要将该链接指针复制到尺寸为(r+1)的首部指针寄存器。进一步,如果存在先前被分配的区段—即,将其内容转移到最新被分配的尺寸为r+1的区段之后,尺寸为r的区段目前空闲—如果先前被分配的尺寸为r的区段现在是尺寸为r的第一空闲区段,那么尺寸为r的首部指针寄存器590需要进行更新。
如以上所阐述那样,虽然在随后失败的查找操作的环境中说明了数据插入的方法700,但是可以不依赖于任何已失败(或未失败)的查找操作来执行将数据条目插入到关键字数据库560中。所以,应当指出,如果在失败的查找操作之后没有采用将数据条目插入到数据结构500中的方法700(如图6及其相关内容的描述),那么关于图7所示和描述的方法700可以包括一些附加的操作。特别是,该方法700可以进一步包括基于包含在所接收的数据包中的数据而产生检索关键字,之后在基于所产生的关键字而产生n位杂凑值,并且访问相应于n位杂凑值的索引表中的条目,以致于可以读取包含在该条目中的有效位(参见图6,方块605,610,615,620)。
如关于图5、6以及7所描述的那样,索引表530中的每一条目540包括与关键字数据库560的不同尺寸区段570的数量相等的k个有效位544。因为k个有效位544等于关键字数据库560中区段尺寸的数目,这些有效位544可以用于指示关键字数据库560中任意区段570的尺寸,其已经被分配给索引表530的条目540。数据结构500使用关键字数据库560的任意先前被分配区段的尺寸的信息,以便确定任意最新被分配区段的合适尺寸,并且在某些情况下确定是否需要分配新的更大尺寸的区段(此外,如果先前将关键字数据库560的超过规定尺寸的区段570分配给索引表530的条目540,那么该超过规定尺寸的区段570能够接收一个附加的条目以及不必要的新区段的分配)。
然而,应该理解,可以通过任意合适的设备或方法来指示先前被分配区段的尺寸,并且不必需要多个有效位544。例如,关键字数据库560的每一区段570可以包括多个状态位以指示该区段的尺寸,当通过索引表530的相应条目540中的区段指针542访问所述区段570时,读取这些状态位。作为选择,当访问关键字数据库560的区段570时,若有的话,可以计算驻留在该区段中的条目580的数目,并且根据存储于其中的条目580的总数目而推断出被访问的区段570的尺寸。对于以上任一实施例来说,索引表530的每一条目540可以仅包括单一的有效位544,该单一有效位544简单地指示是否已经将与尺寸无关的关键字数据库560的任意区段570分配给该条目540。
也应该理解,虽然是在交换设备200的环境中进行了描述,但是数据结构500的实施例,用于执行数据查找的方法600的实施例以及用于执行数据插入的方法700的实施例既可以硬件的形式也可以软件的形式来实施。进一步,数据结构500的实施例以及用于执行数据查找和数据插入的方法600、700的实施例分别可以硬件和软件的组合来实施。
参考图8A-8H所示的特定实施例,能够更好地理解关于图6和7所示和所描述的方法。在具有最小数量的索引表条目和关键字数据库中最小数目的区段尺寸的数据结构800的环境中,为了清楚并且容易理解起见,呈现图8A-H所描述的实施例。然而,应当理解,实际上,所述索引表和关键字数据都可以更大。例如,通过杂凑单元可以产生10位杂凑值,结果是索引表具有1024个条目。同样,可以使用具有十个或更多不同尺寸的区段的关键字数据库。
参考图8A,索引表830包括十六个条目840,每一条目840包括区段指针842和三个有效位844。因为存在十六个条目840,所以将使用4位杂凑值来对索引表830进行索引。关键字数据库860包括三种区段尺寸,即尺寸为1的区段870a、尺寸为2的区段870b以及尺寸为3的区段870c。如图8A所示,最初,关键字数据库860的所有区段870a-c都是空闲的。请注意区段尺寸的数目,即3个,等于索引表830中有效位844的数目。通过尺寸为1的首部指针寄存器890a来识别尺寸为1的第一空闲区段870a。同样,通过尺寸为2的首部指针寄存器890b来识别尺寸为2的第一空闲区段870b,而通过尺寸为3的首部指针寄存器890c来识别尺寸为3的第一空闲区段870c。应该理解,每一尺寸的第一空闲区段是任意选择的,并且进一步地说,某一尺寸的任意区段最初都能够被标记为第一空闲区段。同样,将所有尺寸为1的区段870a链接在一起以作为一个链表(参见箭头801),将所有尺寸为2的区段870b链接在一起以作为一个链表(参见箭头802),以及将所有尺寸为3的区段870c链接在一起以作为一个链表(参见箭头803)。
接收一个数据包,并且基于所接收到数据包中的数据而产生关键字(也就是KEY1)。然后将杂凑函数应用于该关键字以便产生4位杂凑值,这个4位杂凑值数值上等于7。因此,访问索引表830的第7个条目840,因为第7个条目中没有有效位844被设置为高,查找失败。换句话说,所述关键字数据库860不包括具有数值上等于7的4位杂凑值的任意关键字,由此不包括匹配KEY1的关键字。所以,可以执行数据插入以便将KEY1插入到关键字数据库860。
结合图8A来参考图8B,尺寸为1的第一空闲区段870a-通过尺寸为1的首部指针寄存器890a所指示的—被分配给索引表830的第7个条目840。包含在尺寸为1的首部指针寄存器890a中的尺寸为1的区段的地址(也就是ADDRESS1)被复制到索引表830中第7个条目840中的区段指针842,以致于现在该区段指针识别被分配的区段870a。将所产生的关键字(也就是KEY1)和相应的规则(也就是RULE1)-以及可选的时间戳(也就是TMSTMP1)-插入到关键字数据库860的最新被分配区段870a中,从而在关键字数据库860中产生条目880。同样,将索引表830的第7个条目840中的有效位844之一设置为高(例如,1位),以便指示该条目具有被分配于此的关键字数据库860中尺寸为1的区段870a。
同样更新尺寸为1的首部指针寄存器890a,以便识别尺寸为1的第一空闲区段870a(注意在图8B中,尺寸为1的首部指针寄存器890a已下降到到下一可用的尺寸为1的区段)。为了更新尺寸为1的首部指针寄存器890a,将最新被分配的尺寸为1的区段中的链接指针复制到尺寸为1的首部指针寄存器890a。进一步,更新尺寸为1的区段870a的链表,通过尺寸为1的首部指针寄存器890a来识别所述链表的第一区段(参见箭头801)。
结合图8B来参考图8C,说明另一种数据插入操作。接收另一数据包,并且产生关键字(也就是KEY2),该关键字具有数值等于12的4位杂凑值。假设对该关键字的查找失败,也就是没有有效位设置为高或无匹配条目,尺寸为1的第一空闲区段870a被识别并且被分配给索引表830的第12个条目840。将尺寸为1的首部指针寄存器890a中所包含的地址(也就是ADDRESS2)复制到索引表830的第12个条目840的区段指针842,以致于通过该地址所识别的尺寸为1的区段870a被分配给第12个条目840。数据条目880被放置在最新被分配的区段870a中,该数据条目880包括所产生的关键字(也就是KEY2)、相应的规则(也就是RULE2)以及可选的时间戳(也就是TMSTMP2)。(通过从最新分配的尺寸为1的区段870a中复制链接指针)更新尺寸为1的首部指针寄存器890a,以便识别下一可用的尺寸为1的区段,并且更新索引表830的第12个条目840的有效位844,也就是将这些有效位之一设置为高。同样,如箭头801所示那样,更新尺寸为1的区段870a的链表。
结合图8C,图8D说明了进一步的查找和随后的数据插入操作。接收一个附加的数据包,并且基于该数据包中所包含的数据来产生关键字(也就是KEY3)。然后通过将杂凑函数应用到该关键字而产生一个4位杂凑值,该4位杂凑值具有7的数值。访问索引表830的第7个条目840,并且读取有效位844。将第7个条目的有效位844之一设置为高,指示关键字数据860的尺寸为1的区段870a被分配于此。通过索引表830的第7个条目840中的区段指针来识别具有ADDRESS1地址的被分配的区段870a(参见图8C)。与ADDRESS1相应的区段870a中的每一条目与所产生的关键字(也就是KEY3)相比较;可是,因为KEY1与KEY3不匹配,所以查找将失败。
由于对KEY3的查找失败,相应条目880-包括KEY3、相应规则(也就是RULE3)以及可选的时间戳(也就是TMSTMP3)-将被插入到关键字数据库860。必须分配关键字数据库860的一个区段以便接收该新的条目,并且接收所有其他的条目,所述所有其他条目包括具有数值等于7的4位杂凑值的关键字。所以,将尺寸为2的第一空闲区段870b分配给索引表830的第7个条目840,并且将尺寸为2的首部指针寄存器890b中所包含的地址(也就是ADDRESS3)复制到索引表830中第7个条目840的区段指针842。新条目880(也就是KEY3、RULE3、TMSTMP3)被插入到该最新被分配的区段870b,并且将先前被分配区段870a中所包含的条目880(也就是KEY1,RUL1,TMSTMP1)复制到最新被分配的区段(参见图8D)。由于现在将尺寸为2的区段870b分配给索引表830的第7个条目840,所以将该条目840中的两个有效位844设置为高。同样,更新首部指针寄存器。更新尺寸为2的首部指针寄存器890b,以便包括下一可用的尺寸为2的区段870b的地址,在该情况中,更新尺寸为1的首部指针寄存器890a以便包括最近被释放的尺寸为1的区段870b的地址(也就是ADDRESS1)。进一步,更新尺寸为2的区段870b的链表,其中通过尺寸为2的首部指针寄存器890b来识别该链表中尺寸为2的第一空闲区段870b(参见箭头802)。
现在结合图8D来参考图8E,接收另一个数据包并且产生关键字(也就是KEY4),该关键字同样具有数值等于7的4位杂凑值。因为KEY4与KEY1或KEY3不匹配,所以在索引表830的第7个条目840的查找将失败;从而,新条目—包括KEY4,相应的规则(RULE4),以及可选的时间戳(TMSTMP4)-被插入到关键字数据库860。需要将关键字数据库860的更大尺寸的区段分配给索引表830的第7个条目840,第7个条目840包含所有具有数值等于7的n位杂凑值的所有关键字,其现在为数目3。因此,将尺寸为3的首部指针寄存器890c中所包含的地址(也就是ADDRESS4)复制到索引表830的第7个条目840中的区段指针842上。将新条目(也就是KEY4,RULE4,TMSTMP4)插入到最新分配的尺寸为3的区段870c,将先前被分配的尺寸为2的区段870b中的每一条880(也就是KEY1,RULE1,TMSTMP1;和KEY3,RULE3,TMSTMP3)复制到最新被分配的区段,如图8E所示。现在将索引表830的第7个条目840中的三个有效位844设置为高。同样更新尺寸为3的首部指针寄存器890c,以便包含下一可用的尺寸为3的区段870c的地址,并且在该情况中,更新尺寸为2的首部指针寄存器890b以便包括最近被释放的尺寸为2的区段870b的地址(也就是ADDRESS3)。进一步,更新尺寸为3的区段870c的链表(参见箭头803)。
图8F-8H说明了在将附加数据条目880插入到关键字数据库860之后的数据结构800的状态。在图8F中,已经将第五条目880(也就是KEY5,RULE5,TMSTMP5)插入到关键字数据库860。被插入的关键字的4位杂凑值在数值上等于12;所以,将更大尺寸的区段—即,尺寸为2的区段870b,具有从尺寸为2的首部指针寄存器890b复制到索引表830的第12个条目840的区段指针842中的地址(也就是ADDRESS5)-分配给索引表830的第12个条目840。更新索引表的第12个条目840的有效位844,以致于两个有效位被设置为高。以和上述相同的方式来更新首部指针寄存器,以及尺寸为2的区段870b的链表(参见箭头802)。
在图8G中,将两个更多的条目880插入到关键字数据库860。所述条目之一(也就是KEY6,RULE6,TMSTMP6)包括一个关键字(也就是KEY6),该关键字具有数值上等于2的4位杂凑值。从而,尺寸为1的区段870a被分配到索引表830的第2个条目840,并且尺寸为1的首部指针寄存器890a中所包含的地址(也就是ADDRESS1)被复制到索引表的第2个条目840的区段指针842,所述条目现在也具有设置为高的一个有效位844。新条目中的另一个(也就是KEY7、RULE7、TMSTMP7)包括一个关键字(也就是KEY7),该关键字具有数值上等于15的4位杂凑值。从而,关键字数据库860的另一尺寸为1的区段870a被分配到索引表830的第15个条目840,并且尺寸为1的首部指针寄存器890a中所包含的地址(也就是ADDRESS2)-在将尺寸为1的区段870a分配给索引表的第2个条目之后对其进行更新—被复制到索引表的第15个条目840的区段指针842,所述条目现在也具有设置为高的一个有效位844,。
在图8H中,已经将两个附加的条目放置在关键字数据库860中。所述条目之一(也就是KEY8,RULE8,TMSTMP8)包括一个关键字(也就是KEY8),该关键字具有数值上等于2的4位杂凑值(也就是,等同于KEY6的4位杂凑值)。所以,将一个更大尺寸的区段—即,尺寸为2的区段870b,具有从尺寸为2的首部指针寄存器890b复制到索引表第2个条目840的区段指针842的地址(也就是ADDRESS6)-分配到索引表830的第2个条目840,并且现在将该条目的两个有效位设置为高。另一条目(也就是KEY9,RULE9,TMSTMP9)包括一个关键字(也就是KEY9),该关键字具有数值上等于15的4位杂凑值(也就是,等同于KEY7的4位杂凑值)。因此,将一个更大尺寸的区段—即,尺寸为2的区段870b,具有从尺寸为2的首部指针寄存器890b(其是在将尺寸为2区段870b分配到索引表的第2个条目之后被更新的)复制到索引表的第15个条目840的区段指针842的地址(也就是ADDRESS7)-分配到索引表830的第15个条目840。同样,现在将该索引表的第15个条目840中的两个有效位设置为高。在插入上述新条目880之后,已经更新首部指针寄存器890a-c,以便识别其相应尺寸的第一空闲区段。进一步,在图8F-8H中,分别用于所有尺寸的区段870a-c的链表已被保存(参见箭头801、802、803)。
将参考图8H来描述查找操作的另一实例。接收数据包并且基于该数据包中所包含的数据产生关键字。所产生的关键字等于KEY3,并且具有数值上等于7的相应4位杂凑值。从而,访问索引表830的第7个条目840,并且读取有效位844。将三个有效位844设置为高,表明当前将尺寸为3的区段870c分配到索引表的第7个条目840。基于第7个条目840的区段指针842中所包含的地址(也就是ADDRESS4),访问相应的尺寸为3的区段870c。在被分配的尺寸为3的区段870c中的每一条目880与最新产生的关键字(也就是KEY3)进行比较。该区段的条目880包括KEY3;所以,发现匹配,并且可以访问相应的规则(也就是RULE3),并将该规则应用于所接收的数据包。
应当指出,虽然最近接收的数据包具有等价于KEY3的关键字,并且先前接收到的数据包—也就是最初促使将KEY3插入到关键字数据库860的数据包—也具有等于KEY3的关键字,但是这两个数据包没有必要包含相同的数据。然而,这些数据包的每一个将受相同规则的支配(例如,将两个数据包路由到相同IP地址和/或端口号的判定)。同样,被分配的尺寸为3的区段870c包含三个条目880,并且因此,三个关键字(也就是KEY1,KEY3,KEY4),如先前所指出的那样,应当理解这些关键字不相同。相反地,被分配到索引表第7个条目840的尺寸为3的区段870c中所包含的这三个关键字的每一个,简单地共享相同的4位杂凑值(数值上等于7)。换句话说,为了索引和检索关键字数据库860,以相同的类别(也就是,那些关键字具有数值为7的4位杂凑值)来放置这三个关键字(也就是KEY1,KEY3,KEY4)。
在此已经描述了数据结构500、800的实施例以及结合其的设备200的实施例,以及用于执行数据检索和插入的方法600、700,本领域的技术人员将能理解它们的优点。因为大数量数据条目的并行检索是不必要的—也就是,当产生关键字并且形成n位杂凑值时,与所产生的关键字进行比较的关键字数据库的数据条目仅包括这些条目,即存储在已经被分配给索引表条目的关键字数据库的区段中的条目,所述索引表条目相应于所产生关键字的n位杂凑值—数据结构500、800不需要复杂的和昂贵的逻辑电路。进一步,因为被分配给索引表条目的区段的尺寸能够动态地改变,以便符合附加存储容量的任意需求,所以能够最小化或消除数据冲突。同样,数据结构500、800很容易可扩展,例如,通过增加索引表的尺寸和/或增加关键字数据库的尺寸(区段尺寸的数量和每一尺寸内的区段数量),以便符合下一代部件的需要,所述下一代部件可能需要提供一种容量大于一百万个条目的数据库。
先前详细的描述和附图仅作为说明性而非限制。主要是为了清楚和全面地理解所公开的实施例而提供上述内容并且从中能够理解没有不必要的限制。本领域的技术人员可以不脱离这些实施例的精神以及所附权利要求的范围的情况下,对在此所描述的实施例设计出许多附加、删除和修改以及可选的方案。
权利要求
1.一种数据装置,包括第一数据结构,包括用于存储数据的多种尺寸的区段,该第一数据结构包括每种尺寸的至少一个区段;以及第二数据结构,包括多个条目,该多个条目的每一个包括有效位和区段指针,所述有效位用于指示第一数据结构的其中一个区段的分配,所述区段指针用于识别被分配区段的存储器地址。
2.权利要求1的数据装置,其中通过寄存器来识别每种尺寸的区段的第一空闲区段。
3.权利要求1的数据装置,其中第二数据结构的多个条目的每一个包括与第一数据结构中区段尺寸的数量相等的多个有效位。
4.权利要求1的数据装置,其中第二数据结构的多个条目的每一个与指定数量位的杂凑值相对应。
5.权利要求1的数据装置,其中第一数据结构存储于存储器中并且第二数据结构存储于另一存储器中。
6.权利要求1的数据装置,其中第一数据结构和第二数据结构存储在单一存储器中。
7.权利要求1的数据装置,其中第一数据结构和第二数据结构的每一个都存储在随机存取存储器中。
8.一种数据结构,包括包括多种尺寸的区段的关键字数据库,通过首部指针寄存器识别的每种尺寸的第一空闲区段,每一区段存储至少一个数据条目;以及包括多个条目的索引表,每一条目与n位杂凑值相对应,所述每一条目包括多个有效位和区段指针,所述多个有效位用于指示关键字数据库其中一个区段的分配,所述区段指针用于识别被分配区段的存储器地址。
9.权利要求8的数据结构,其中有效位的数量等于关键字数据库中区段尺寸的数量。
10.权利要求9的数据结构,其中多个有效位设置为高以便指示被分配区段的尺寸。
11.权利要求8的数据结构,其中有效位的数量等于1。
12.权利要求8的数据结构,其中索引表中条目的数量等于2n。
13.权利要求8的数据结构,其中至少一个数据条目包括关键字和规则。
14.权利要求13的数据结构,其中至少一个数据条目进一步包括时间戳。
15.权利要求8的数据结构,其中关键字数据库存储在存储器中,并且索引表存在另一存储器中。
16.权利要求8的数据结构,其中所述关键字数据库和索引表存储在单一存储器中。
17.权利要求8的数据结构,其中关键字数据库和索引表的每一个都存储在随机存取存储器中。
18.一种设备,包括存储第一数据结构的第一电路,该第一数据结构包括用于存储数据的多种尺寸的区段,该第一数据结构包括每种尺寸的至少一个区段;以及与第一电路耦合的第二电路,该第二电路存储第二数据结构,该第二数据结构包括多个条目,该多个条目的每一个包括有效位和区段指针,所述有效位用于指示第一数据结构的其中一个区段的分配,所述区段指针用于识别被分配区段的地址。
19.权利要求18的设备,其中通过寄存器来识别每种尺寸的区段的第一空闲区段。
20.权利要求18的设备,其中第二数据结构的多个条目的每一个包括与第一数据结构中区段尺寸的数量相等的多个有效位。
21.权利要求18的设备,其中第二数据结构的多个条目的每一个与指定数量位的杂凑值相对应。
22.权利要求18的设备,其中第一电路和第二电路的每一个包括随机存取存储器。
23.权利要求18的设备,其中第一电路和第二电路包括单一随机存取存储器。
24.一种设备,包括用于存储关键字数据库的第一存储器,该关键字数据库包括多种尺寸的区段,通过首部指针寄存器识别的每种尺寸的第一空闲区段,每一区段存储至少一个数据条目;以及与第一存储器耦合的第二存储器,第二存储器存储包括多个条目的索引表,每一条目与n位杂凑值相对应,所述每一条目包括多个有效位和区段指针,所述多个有效位用于指示关键字数据库其中一个区段的分配,所述区段指针用于识别被分配区段的存储器地址。
25.权利要求24的设备,其中有效位的数量等于关键字数据库中区段尺寸的数量。
26.权利要求25的设备,其中多个有效位设置为高以便指示被分配区段的尺寸。
27.权利要求24的设备,其中有效位的数量等于1。
28.权利要求24的设备,其中索引表中条目的数量等于2n。
29.权利要求24的设备,其中至少一个数据条目包括关键字和规则。
30.权利要求29的设备,其中至少一个数据条目进一步包括时间戳。
31.权利要求24的设备,其中第一存储器和第二存储器包括单一存储器。
32.权利要求24的设备,其中第一存储器和第二存储器的每一个都包括随机存取存储器。
33.一种设备,包括关键字产生单元,该关键字产生单元对接收到的数据包中的数据进行访问,并且产生包含至少一部分该数据的关键字;杂凑单元,该杂凑单元用于接收来自于关键字产生单元的关键字,并且将杂凑函数应用到所接收到的关键字以便产生n位杂凑值;用于存储关键字数据库的第一存储器,该关键字数据库包括多种尺寸的区段,每一区段存储至少一个数据条目;多个首部指针寄存器,首部指针寄存器的数量等于尺寸的数量,每一首部指针寄存器的数量用于识别其中一种尺寸的区段的第一空闲区段;以及与第一存储器和杂凑单元相耦合的第二存储器,该第二存储器用于存储索引表,该索引表包括多个条目,每一条目与一个n位杂凑值相对应,所述每一条目包括多个有效位和区段指针,所述多个有效位用于指示关键字数据库其中一个区段的分配,所述区段指针用于识别被分配区段在第一存储器中的位置。
34.权利要求33的设备,其中索引表的所述每一条目中的有效位的数量等于关键字数据库中区段的尺寸的数量。
35.权利要求34的设备,其中多个有效位设置为高以便指示某一尺寸的被分配区段。
36.权利要求33的设备,其中索引表中所述每一条目的有效位的数量等于1。
37.权利要求33的设备,其中索引表中条目的数量等于2n。
38.权利要求33的设备,其中至少一个数据条目包括关键字和规则。
39.权利要求38的设备,其中至少一个数据条目进一步包括时间戳。
40.权利要求33的设备,其中第一存储器和第二存储器包括单一集成的存储器。
41.权利要求40的设备,其中该单一集成的存储器包括随机存取存储器。
42.权利要求40的设备,其中该单一集成的存储器包括外部存储器。
43.权利要求40的设备,其中所述关键字产生单元、杂凑单元、单一集成的存储器以及首部指针寄存器形成至少一部分单一集成电路设备。
44.权利要求33的设备,其中第一存储器和第二存储器的每一个都包括随机存取存储器。
45.权利要求33的设备,其中第一存储器和第二存储器中的至少一个包括外部存储器。
46.权利要求33的设备,其中所述关键字产生单元、杂凑单元、第一存储器、首部指针寄存器以及第二存储器形成至少一部分单一集成电路设备。
47.一种方法,包括将杂凑函数应用于检索关键字以便产生杂凑值;访问相应于所述杂凑值的索引表中的条目,该索引表的相应条目包括有效位和区段指针;如果将有效位设置为高,那么对由区段指针所识别的关键字数据库的一个区段进行访问,被访问的区段包括多个数据条目;以及将被访问区段中所包含的数据条目与检索关键字进行比较。
48.权利要求47的方法,进一步包括如果其中一个数据条目包括与所述检索关键字相匹配的关键字,那么访问该一个数据条目。
49.权利要求48的方法,进一步包括对该一个数据条目中所包含的规则进行访问;以及将该规则应用到与检索关键字相关的数据包。
50.权利要求47的方法,其中相应条目包括与关键字数据库的多个尺寸的区段相等的多个有效位,对关键字数据库的区段进行访问的操作进一步包括对具有与设置为高的有效位数量相对应的尺寸的区段进行访问。
51.一种方法,包括提供具有多种尺寸区段的数据结构,其中一个区段存储具有指定杂凑值的关键字;以及响应于接收具有指定杂凑值的关键字,分配多个区段中的一个新区段以便存储具有该指定杂凑值的关键字,最新分配的区段具有比该一个区段的尺寸更大的尺寸。
52.权利要求51的方法,进一步包括将最新分配的区段的存储器地址存储在索引表的多个条目其中一个条目的区段指针中,所述一个条目对应于该指定的杂凑值。
53.权利要求51的方法,进一步包括将所接收的关键字存储在最新分配的区段中。
54.权利要求53的方法,其中被存储的所接收的关键字包括数据条目的一部分,该数据条目包括规则。
55.权利要求51的方法,进一步包括将具有指定杂凑值的关键字从该一个区段复制到数据结构的最新被分配的区段。
56.一种方法,包括将多个数据条目存储在关键字数据库的第一区段,该第一区段被分配给索引表的多个条目其中之一,第一区段的尺寸相应于数据条目的数量,每一数据条目包括具有杂凑值的关键字;接收数据条目,该数据条目包括具有杂凑值的关键字;以及将关键字数据库的第二区段分配给索引表的所述一个条目,第二区段的尺寸大于第一区段的尺寸。
57.权利要求56的方法,进一步包括将所接收的数据条目插入到第二区段中。
58.权利要求56的方法,进一步包括将数据条目的数量从第一区段复制到第二区段。
59.权利要求56的方法,进一步包括对索引表的所述一个条目中的区段指针更新,以便包括第二区段的存储器地址。
60.一种方法,包括提供具有多种尺寸的区段的数据结构;将该多种尺寸的每一个的第一空闲区段的存储器地址存储在多个寄存器的相应寄存器中;将多种尺寸其中之一的第一空闲区段分配给索引表的一个条目;以及对所述一种尺寸区段的相应寄存器进行更新,以便包括该一种尺寸区段的另一空闲区段的存储器地址。
61.权利要求60的方法,进一步包括对索引表条目中的区段指针进行更新,以便包括所述一种尺寸区段的被分配的第一空闲区段的存储器地址。
62.权利要求61的方法,进一步包括将一数据条目插入到所述一种尺寸区段的被分配的第一空闲区段中。
63.一种方法,包括访问索引表的条目,被访问的条目对应于杂凑值;读取索引表相应条目中的有效位;以及如果该有效位设置为低,在具有多种尺寸区段的关键字数据库中找到最小可用尺寸的第一空闲区段,将所述最小可用尺寸的第一空闲区段分配给索引表的相应条目,以及将数据条目插入到被分配的所述最小可用尺寸的第一空闲区段中。
64.权利要求63的方法,其中最小可用尺寸对应于能够存储单个数据条目的尺寸。
65.权利要求63的方法,其中被插入的数据条目包括关键字和规则。
66.权利要求65的方法,其中被插入的数据条目进一步包括时间戳。
67.权利要求63的方法,进一步包括将有效位设置为高。
68.权利要求63的方法,进一步包括对索引表相应条目中的区段指针进行更新,以便包括被分配的最小可用尺寸的第一空闲区段的存储器地址。
69.权利要求63的方法,进一步包括对相应于最小可用尺寸的首部指针寄存器进行更新,以便包括该最小可用尺寸的另一空闲区段的存储器地址。
70.权利要求63的方法,进一步包括如果有效位被设置为高,那么读取索引表相应条目中的区段指针,以便确定先前被分配给索引表相应条目的关键字数据库区段的存储器地址,确定先前被分配区段的尺寸,在关键字数据库中找到比先前被分配区段的尺寸更大尺寸的第一空闲区段,将较大尺寸的第一空闲区段分配给索引表的相应条目,以及将数据条目插入到较大尺寸的第一空闲区段中。
71.权利要求70的方法,进一步包括将数据条目从先前被分配的区段中复制到被分配的较大尺寸的第一空闲区段。
72.权利要求70的方法,进一步包括更新区段指针,以便包括被分配的较大尺寸的第一空闲区段的存储器地址。
73.权利要求70的方法,进一步包括对相应于较大尺寸的首部指针寄存器进行更新,以便包括另一较大尺寸的空闲区段的存储器地址。
74.权利要求70的方法,进一步包括通过确定索引表的相应条目中设置为高的有效位的数量,来确定先前被分配区段的尺寸,高有效位的数量指示先前被分配区段的尺寸。
75.一种方法,包括对索引表中的条目进行访问,所述被访问的条目对应于杂凑值;从索引表相应条目中读取多个有效位;确定设置为高的该多个有效位的数量;在关键字数据库中找到尺寸等于比高有效位的数量大一的第一空闲区段,该关键字数据库具有多种尺寸的区段;将尺寸比高有效位数量大一的第一空闲区段分配给索引表相应条目;以及将数据条目插入到关键字数据库的被分配区段中。
76.权利要求75的方法,进一步包括对索引表相应条目中的区段指针进行更新,以便包括尺寸等于比高有效位数量大一的第一空闲区段的存储器地址;以及将索引表的相应条目中多个有效位的一位设置为高。
77.权利要求75的方法,进一步包括对相应于尺寸等于比高有效位的数量大一的首部指针寄存器进行更新,以便包括尺寸等于比高有效位数量大一的另一空闲区段的存储器地址。
78.权利要求75的方法,其中被插入的数据条目包括关键字和规则。
79.权利要求78的方法,其中被插入的数据条目进一步包括时间戳。
80.权利要求75的方法,其中设置为高的有效位的数量至少为一,所述方法进一步包括访问索引表的相应条目中的区段指针,该区段指针包括尺寸等于高有效位数量的关键字数据库中区段的存储器地址;将数据条目从尺寸等于高有效位数量的区段复制到尺寸等于比高有效位数量大一的被分配区段。
81.权利要求80的方法,进一步包括对相应于尺寸等于高有效位数量的首部指针寄存器进行更新,以便包括存储器地址。
82.一种制造品,包括具有内容的介质,当通过设备访问所述内容时,促使设备提供一种数据结构,所述数据结构包括多种尺寸的区段,其中一个区段存储具有指定杂凑值的关键字;以及响应于接收具有指定杂凑值的关键字,分配多个区段中的一个新区段以便存储具有该指定杂凑值的关键字,最新被分配的区段具有比所述一个区段的尺寸更大的尺寸。
83.权利要求82的制造品,其中当访问所述内容时,进一步促使设备将最新分配的区段的存储器地址存储在索引表中多个条目的其中一个条目的区段指针中,所述一个条目相应于指定的杂凑值。
84.权利要求82的制造品,其中当访问所述内容时,进一步促使设备将所接收的关键字存储在最新分配的区段中。
85.权利要求84的制造品,其中所存储的接收到的关键字包括一部分数据条目,该数据条目包括规则。
86.权利要求82的制造品,其中当访问所述内容时,进一步促使设备将具有指定杂凑值的关键字从所述一个区段复制到数据结构的最新被分配的区段。
全文摘要
一种在数据库应用中使用的数据结构。该数据结构包括经由索引表而可检索的关键字数据库。
文档编号G06F7/00GK1653455SQ03810845
公开日2005年8月10日 申请日期2003年3月13日 优先权日2002年3月20日
发明者S·库鲁帕蒂, M·格雷罗 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1