CN102110117B - 用于最长匹配的b树的表项添加、查找、删除方法及装置 - Google Patents
用于最长匹配的b树的表项添加、查找、删除方法及装置 Download PDFInfo
- Publication number
- CN102110117B CN102110117B CN 200910252580 CN200910252580A CN102110117B CN 102110117 B CN102110117 B CN 102110117B CN 200910252580 CN200910252580 CN 200910252580 CN 200910252580 A CN200910252580 A CN 200910252580A CN 102110117 B CN102110117 B CN 102110117B
- Authority
- CN
- China
- Prior art keywords
- list item
- value
- length
- tree
- field
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了用于最长匹配的B树的表项添加、查找、删除方法和装置。本发明实施例通过对最长匹配表项进行扩展,采用扩展的比特来表示最长匹配表项的掩码长度信息,使得最长匹配表项转变成具有精确值的精确表项,并使用扩展后得到的精确表项执行基于B树的添加、查找、删除等操作,能够实现基于B树的最长匹配。
Description
技术领域
本发明涉及通信技术领域,具体涉及用于最长匹配的B树的表项添加、查找、删除方法及装置。
背景技术
查找是许多通信设备的关键技术之一,例如路由器。目前已有基于各种不同数据结构的查找方法,其中B树(包括二叉树)以其查找次数少、速率高等特点成为较为通用的查找技术。
查找可包括精确匹配和最长匹配(Longest Match)两种不同的类型。目前基于B树可实现精确匹配的查找方法。
图1给出了一个精确表项在B树(B树的结构可以是左大右小或左小右大,本例中为左小右大)中的添加过程的示例。图1中精确表项“8”需要按照设定的比较顺序(例如采用顺次或二分插入的方式进行比较,本例中采用顺次的方式,可以是从小到大或从大到小,本例中为从小到大)与B树中已有的精确表项进行比较,比较过程为:“8”<“9”,而“9”是当前节点最左边的表项,因此“8”需要与位于“9”左边的下一层节点的表项进行比较,“8”>“1”,因此继续向右比较,8”>“3”,继续向右比较,8”>“6”,右侧没有表项了并且有位置,因此“8”可以插入到当前节点的表项“6”右侧的位置上。当然,如果当前节点没有位置了,可以执行旋转等树平衡操作,通过在节点间移动表项(保持表项之间的大小顺序关系)来完成新表项的插入。
图2给出了一个精确表项在B树中的查找过程的示例。图2中精确表项“25”按照设定的比较顺序与B树中已有的精确表项进行比较,比较过程为:“25”>“9”,继续向右,“25”>“22”,继续向右,“25”<“37”,因此在当前节点不存在与“25”匹配的表项,需要与位于“22”右边“37”左边的下一层节点的表项进行比较,“25”>“23”,继续向右,查找到“25”。当然,如果查找到叶子节点仍未匹配到需要查找的表项,则说明待查表项不在当前B树中。
与精确表项不同,最长匹配中使用的最长匹配表项通常表现为这样的形式:10101011XXXXXX/8,这是一个长度为14位的最长匹配表项,其掩码长度为8。目前B树无法实现最长匹配。
发明内容
本发明实施例提供一种能够实现最长匹配的B树的表项添加、查找、删除方法及装置。
一种用于最长匹配的B树的表项添加方法,包括:获取需要添加到B树中的长度为W的最长匹配表项,W为自然数;根据所述最长匹配表项生成待插表项值,所述待插表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;按照设定的比较顺序将所述待插表项值与B树中已有表项的表项值进行比较,确定需要添加到的位置;将所述待插表项值及相应的索引写入所确定的位置。
一种用于最长匹配的B树的表项查找方法,包括:获取需要在B树中查找的长度为W的最长匹配表项,W为自然数;根据所述最长匹配表项生成待查表项值,所述待查表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;按照设定的比较顺序将所述待查表项值与B树中已有表项的表项值进行比较,并将待查表项值对应于掩码长度的字段与所比较的表项进行对比,若被对比表项对应于掩码长度的字段与待查表项值对应于掩码长度的字段的至少部分长度一致,则确定该被对比表项与待查表项值匹配;将所确定的与待查表项值匹配的全部表项中掩码长度最长的表项作为查找到的最长匹配表项。
一种用于最长匹配的B树的表项删除方法,包括:获取需要从B树中删除的长度为W的最长匹配表项,W为自然数;根据所述最长匹配表项生成待删表项值,所述待删表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;按照设定的比较顺序将所述待删表项值与B树中已有表项的表项值进行比较,确定需要删除的表项;将所确定的表项及相应的索引删除。
一种用于最长匹配的B树的表项添加装置,包括:获取模块,用于获取需要添加到B树中的长度为W的最长匹配表项,W为自然数;扩展模块,用于根据所述最长匹配表项生成待插表项值,所述待插表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;第一比较模块,用于按照设定的比较顺序将所述待插表项值与B树中已有表项的表项值进行比较,确定需要添加到的位置;第一写入模块,用于将所述待插表项值及相应的索引写入所确定的位置。
一种用于最长匹配的B树的表项查找装置,包括:获取模块,用于获取需要在B树中查找的长度为W的最长匹配表项,W为自然数;扩展模块,用于根据所述最长匹配表项生成待查表项值,所述待查表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;第二比较模块,用于按照设定的比较顺序将所述待查表项值与B树中已有表项的表项值进行比较;匹配模块,用于在所述第二比较模块执行比较时,将待查表项值对应于掩码长度的字段与所比较的表项进行对比,若被对比表项对应于掩码长度的字段与待查表项值对应于掩码长度的字段的至少部分长度一致,则确定该被对比表项与待查表项值匹配;处理模块,用于将所确定的与待查表项值匹配的全部表项中掩码长度最长的表项作为查找到的最长匹配表项。
一种用于最长匹配的B树的表项删除装置,包括:获取模块,用于获取需要从B树中删除的长度为W的最长匹配表项,W为自然数;扩展模块,用于根据所述最长匹配表项生成待删表项值,所述待删表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;第三比较模块,用于按照设定的比较顺序将所述待删表项值与B树中已有表项的表项值进行比较,确定需要删除的表项;第一删除模块,将所确定的表项及相应的索引删除。
本发明实施例中通过对最长匹配表项进行扩展,采用扩展的比特来表示最长匹配表项的掩码长度信息,使得最长匹配表项转变成具有精确值的精确表项,并使用扩展后得到的精确表项执行基于B树的添加、查找、删除等操作,能够实现基于B树的最长匹配。
附图说明
图1是现有B树精确表项的添加过程示意图;
图2是现有B树精确表项的查找过程示意图;
图3是本发明实施例一表项添加方法的流程示意图;
图4是本发明实施例二表项添加方法的流程示意图;
图5是本发明实施例二中一个示例的添加过程示意图;
图6是本发明实施例三表项查找方法的流程示意图;
图7是本发明实施例三中一个示例的查找过程示意图;
图8是本发明实施例四表项查找方法的流程示意图;
图9是本发明实施例四中一个示例的查找过程示意图;
图10是本发明实施例五表项删除方法的流程示意图;
图11是本发明实施例六表项删除方法的流程示意图;
图12是本发明实施例七表项添加装置的逻辑结构示意图;
图13是本发明实施例八表项查找装置的逻辑结构示意图;
图14是本发明实施例九表项删除装置的逻辑结构示意图。
具体实施方式
本发明实施例提供了一种用于最长匹配的B树的表项添加、查找、删除方法,通过对最长匹配表项进行扩展,用扩展的比特来携带掩码长度信息,使得最长匹配表项能够使用精确表项的形式被表现出来,以执行基于B树的添加、查找、删除等操作。本发明实施例还提供相应的装置。以下分别进行详细说明。
实施例一、一种用于最长匹配的B树的表项添加方法,如图3所示,包括:
A1、获取需要添加到B树中的长度为W的最长匹配表项,W为自然数。
最长匹配表项可表现为这样的形式:10101011XXXXXX/8、10101011XXXXXXXX/8、01XXX/2等,其中第一个表示长度为14位且掩码长度为8的最长匹配表项,第二个表示长度为16位且掩码长度为8的最长匹配表项,第三个表示长度为5位且掩码长度为2的最长匹配表项。
对于最长匹配表项而言,所称“匹配”是指,待匹配表项对应于掩码长度的字段的部分长度或全部长度,与被匹配表项对应于掩码长度的字段相同。例如对于待匹配表项01110/5而言,被匹配表项01XXX/2、011XX/3、0111X/4,都可以认为与之匹配。所谓最长匹配则是指成功匹配的表项中掩码长度最长的一个,对于上述示例而言,01110/5的最长匹配就是0111X/4。
A2、根据需要添加的最长匹配表项生成待插表项值。
本发明实施例中,通过扩展最长匹配表项来得到精确表项值,以精确表项来表示最长匹配表项。具体做法是,将最长匹配表项的长度扩充1比特,扩展的这个比特用来携带掩码长度信息,将扩展的比特置为1并插入到最长匹配表项中对应于掩码长度的字段之后,然后将最长匹配表项剩余的位都置0,这样就得到了一个精确的数据。例如,10101011XXXXXX/8扩展后表示为101010111000000,01XXX/2扩展后表示为011000,其中,从低位起第一个“1”即为扩充的用于表示掩码长度的1比特。
显然,扩充的比特用于标记掩码长度,因此除了置1外,也可以置0,如果置0,则剩余位置1即可。进一步的,若使用由两个以上比特组成的具有固定样式的字段代替本例中的“1”作为掩码长度的标记,应视为本实施例扩展方案的等同替换。同样,若剩余位按照其他设定规则进行填充,只要最终能够生成精确的表项值,并基于填充所使用的规则能够确定掩码标记的位置,同样不超出本发明的保护范围。关于本文件中其他“设定值”的理解均可按此进行扩展。
扩展后,最长匹配表项就变成了具有精确值的精确表项,能够按照B树的添加、查找、删除等相关规则进行操作。由于本例中扩展得到的精确表项是用来添加的,所以可称之为待插表项值,在扩展1比特的情况下,待插表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与最长匹配表项中对应于掩码长度的字段相同。
A3、按照设定的比较顺序将待插表项值与B树中已有表项的表项值进行比较,确定需要添加到的位置。
待插表项值可按照B树常用的比较规则执行插入操作,例如,从根节点开始按顺序逐层寻找插入的位置直至到达叶子节点,若需要插入的地方没有位置,还可以执行例如旋转等树平衡操作通过表项移动获得插入位置。
A4、将待插表项值及其索引写入所确定的位置。
B树的表项需要保存该表项的索引(AD),索引是在需要插入表项时分配给表项的,此索引可以相同也可以不同,索引的用途是作为在另一存储空间中所存储内容的指针(偏移量)。例如,在路由器应用中,B树保存路由表项,在进行转发查找时,命中某个表项返回后,可通过得到的索引(偏移量)在另一存储空间中获取下一跳等转发相关信息。
本实施例中通过对最长匹配表项进行扩展,采用扩展的比特来表示最长匹配表项的掩码长度信息,使得最长匹配表项转变成具有精确值的精确表项,能够使用扩展后得到的精确表项执行基于B树的添加操作。
实施例二、一种用于最长匹配的B树的表项添加方法,与实施例一相比,本实施例进一步增加了B树中非叶子节点的表项的内容,使得能够更好的实现最长匹配。流程如图4所示,包括:
B1、获取需要添加到B树中的长度为W的最长匹配表项,W为自然数。
B2、根据需要添加的最长匹配表项生成待插表项值。简单起见,本例中采用扩展1比特的方式,扩展后的待插表项值具有W+1个比特,从低位起,第一个取值为“1”的比特之前的字段与最长匹配表项中对应于掩码长度的字段相同。
B3、按照设定的比较顺序将待插表项值与B树中已有表项的表项值进行比较,确定需要添加到的位置。
本实施例中,B树的非叶子节点上的各个表项还包括位图字段(Bitmap)和若干个索引字段,Bitmap具有的比特数大于或等于相应表项的掩码长度减一,索引字段的数目与Bitmap的比特数相同,每个索引字段分别对应于Bitmap的各个比特。例如,若值为011110的表项(表示0111X/4)位于非叶子节点上,则它具有最少3位Bitmap,以及相应数目的索引字段,假定其Bitmap长度为3,每个索引字段的长度为2,则该表项可表示为:
011110 000 000000
其中前6位为表项值,第7-9位为Bitmap,第10-11位为第一个索引,与第7位的Bitmap位对应,第12-13、13-14分别为第二、三个索引,与第8、9位的Bitmap位对应。本实施例中在按照步骤B3执行插入比较的时候,若所比较的表项位于非叶子节点上,还需要执行如下操作:
B4、将待插表项值对应于掩码长度的字段与当前非叶子节点上的所有表项进行对比,若待插表项值对应于掩码长度的字段与被对比表项对应于掩码长度的字段的部分长度一致,则将被对比表项的Bitmap中与待插表项值的掩码长度对应的比特置为设定值,并将待插表项值的索引写入相应的索引字段。
这个操作可以与比较的操作(以及后续步骤B5的操作)同步执行,例如,当比较操作执行到某个非叶子节点的第一个表项时,即开始对该节点上的所有表项(同步或顺次)执行对比操作;也可以顺序执行,例如当完成在某个非叶子节点上的比较,确定插入或者确定需要到下一层节点执行比较后,再开始对该节点上的所有表项(同步或顺次)执行对比操作。具体执行顺序不构成对本实施例的限定,简明起见,图4中以同步的方式画出。
容易理解,各个位于非叶子节点的表项的Bitmap的位数可以固定设置,例如统一设置为W-1位,也可以根据表项的掩码长度来动态设置,只要大于或等于该表项的掩码长度减一即可。特别地,如果B树中允许掩码长度为0的表项(即表项值为100......0的表项,对应的最长匹配表项为XX......X/0,该表项能够匹配于任意表项)存在,则Bitmap的位数应大于或等于所属表项的掩码长度,若固定设置,可设置为W位,然后用Bitmap中的某一比特(例如第一位或最后一位)来表示该掩码长度为0的表项。
需要说明的是,如果在添加过程中需要执行旋转等树平衡操作,通过移动表项来提供位置进行插入,被移动的表项进入新的位置时同样应视为添加的执行流程,因此如果被移动的表项进入到非叶子节点中,同样需要执行上述对比的操作。
为便于理解,下面以一个简单的示例来说明上述比较和对比过程。参见图5,图5中以图框表示表项,清楚起见,图框的第一行为最长匹配表项,第二行为扩展后的表项值,非叶子节点的图框的第三行为Bitmap(长度为4,用括号示出),叶子节点不具有Bitmap。当需要插入表项010000(代表0XXXX/1)时,
所执行的比较过程为:010000<010100,010100是当前节点最左边的表项,由于当前节点不是叶子节点,因此继续与位于010100左边的下一层节点的表项进行比较,010000>001000,右侧没有表项了并且有位置,因此010000插入到001000右侧的位置上;
所执行的对比过程为:当010000与010100比较时,判断当前是非叶子节点,因此需要与该节点上的所有表项进行比较,010000的掩码字段“0”与010100(代表010XX/3)的掩码字段“010”长度为1的部分一致,因此将010100的Bitmap的第一位置1,并将010000的索引写入010100相应的索引字段(未在图5中示出)中,010000的掩码字段“0”与110100(代表110XX/3)的掩码字段“110”的全部或部分长度都不一致,因此不必修改110100的Bitmap;当010000与001000比较时,判断当前是叶子节点,不用与当前节点的表项进行对比。
B5、将待插表项值及其索引写入所确定的位置。
当然,如果待插表项值最终添加到非叶子节点上,同样会具有Bitmap以及相应的若干个索引字段。
本实施例中通过进一步扩展B树非叶子节点的表项的内容,并相应在添加过程中执行Bitmap的写入操作,使得位于非叶子节点的表项的Bitmap可以记录下本表项与之匹配且掩码长度短于本表项的那些表项的掩码长度,并相应记录下那些表项的索引,以便于为查找过程提供更多的信息来解决可能存在的某些表项最长匹配查不到的问题。
实施例三、一种用于最长匹配的B树的表项查找方法,如图6所示,包括:
C1、获取需要在B树中查找的长度为W的最长匹配表项,W为自然数。
C2、根据需要查找的最长匹配表项生成待查表项值。
生成方式可参照实施例一中通过扩展最长匹配表项来得到精确表项值的方式,由于本例中扩展得到的精确表项是用来查找的,所以可称之为待查表项值,在扩展1比特的情况下,待查表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与最长匹配表项中对应于掩码长度的字段相同。
C3、按照设定的比较顺序将待查表项值与B树中已有表项的表项值进行比较,并将待查表项值对应于掩码长度的字段与所比较的表项进行对比,若被对比表项对应于掩码长度的字段与待查表项值对应于掩码长度的字段的至少部分长度一致,则确定该被对比表项与待查表项值匹配。
待查表项值可按照B树常用的比较规则执行查找操作,例如,从根节点开始按顺序逐层查找直至到达叶子节点,或者也可以在查找到完全一致的表项后(这也意味着找到了最长匹配)即停止查找。在查找时,沿比较路径与各个表项进行对比,确定出匹配的表项。
C4、将所确定的与待查表项值匹配的全部表项中掩码长度最长的表项作为查找到的最长匹配表项。
在查找过程中可能会有多个表项与待查表项值匹配,因此需要取其中掩码长度最长的一个作为最长匹配。
为便于理解,下面以一个简单的示例来说明上述查找过程。参见图7,图7中以图框表示表项,清楚起见,图框的第一行为最长匹配表项,第二行为扩展后的表项值。当需要查找表项101111(代表10111/5)的最长匹配时,
所执行的查找过程为:101111>010100且“010”不是“10111”的部分长度,继续向右比较,101111>100100且“100”不是“10111”的部分长度,继续向右比较,101111>101000且“10”是“10111”的部分长度,匹配到掩码长度为2,右侧没有表项了且当前节点不是叶子节点,需要与位于101000右边的下一层节点的表项进行比较,101111>101100且“101”是“10111”的部分长度,匹配到掩码长度为3,继续向右比较,101111>101110且“1011”是“10111”的部分长度,匹配到掩码长度为4,右侧没有表项了且当前节点是叶子节点,查找结束,确定匹配到的三个表项中掩码最长(掩码长度为4)的表项101110作为101111的最长匹配。
本实施例查找方法适用于按照实施例一方法添加表项生成的B树,也适用于采用其它自动或人工输入生成的B树,只要该B树的表项具有本例中描述的扩展结构及含义即可。
实施例四、一种用于最长匹配的B树的表项查找方法,如图8所示,包括:
D1、获取需要在B树中查找的长度为W的最长匹配表项,W为自然数。
D2、根据需要查找的最长匹配表项生成待查表项值。简单起见,本例中采用扩展1比特的方式,扩展后的待插表项值具有W+1个比特,从低位起,第一个取值为“1”的比特之前的字段与最长匹配表项中对应于掩码长度的字段相同。
D3、按照设定的比较顺序将待查表项值与B树中已有表项的表项值进行比较,确定出比较路径上与待查表项值匹配的表项,可参照步骤C3执行。
本实施例中,B树的非叶子节点上的各个表项还包括Bitmap和若干个索引字段,Bitmap具有的比特数大于或等于相应表项的掩码长度减一,用于记录当前B树中本表项与之匹配且掩码长度短于本表项的那些表项的掩码长度,索引字段的数目与Bitmap的比特数相同,每个索引字段分别对应于Bitmap的各个比特,用于记录相应表项的索引。在本实施例中,除了按照步骤D3确定出比较路径上与待查表项值匹配的表项外,还需要执行如下操作:
D4、在按照设定的比较顺序将待查表项值与B树中已有表项的表项值进行比较时,若需要从上一级节点移动到下一级节点继续比较,还获取与下一级节点的第一个表项相邻的上一级节点的表项的Bitmap,确定所获取的Bitmap中是否记录有与待查表项值匹配的表项。
所称与下一级节点的第一个表项“相邻”的上一级节点的表项,是指就大小顺序而言与下一级节点的第一个表项最接近的上一级节点的表项。这个步骤可避免不在比较路径上,但是与待查表项值匹配的那些表项被遗漏。
步骤D4可以与D3同步执行,例如,在比较路径进入下层节点的时候,同步对获取的Bitmap中是否记录有匹配的表项进行判断;也可以顺序执行,例如,将每次进入下层节点时获取的位图信息都保存起来,等到比较完成后再进行判断,简明起见,图8中以同步的方式画出。
D5、将所确定的与待查表项值匹配的全部表项中掩码长度最长的表项作为查找到的最长匹配表项。
显然,步骤D3和D4确定出的匹配表项都需要被考虑以得出最终的查找结果。
为便于理解,下面以一个简单的示例来说明上述查找过程。参见图9,图9为按照图5所示执行添加后生成的B树,以图框表示表项,图框的第一行为最长匹配表项,第二行为扩展后的表项值,非叶子节点的图框的第三行为Bitmap(长度为4,用括号示出),叶子节点不具有Bitmap。当需要查找表项011111(代表01111/5)的最长匹配时,
所执行的查找过程为:011111>010100且“010”不是“01111”的部分长度,继续向右比较,011111<110100且“110”不是“01111”的部分长度,需要与位于010100右边101000左边的下一层节点的表项进行比较,由于是采用从小到大的比较顺序,因此与下一层节点的第一个表项最接近的是010100,获取010100的Bitmap(1000),判断该Bitmap的第一位代表的表项010000与待查表项值匹配,匹配掩码长度为1(该判断也可以在比较结束后进行),011111<100100,当前节点已经是叶子节点,比较结束,确定由Bitmap获得的表项010000作为011111的最长匹配,可以从提供Bitmap的表项的相应索引字段中获取该表项的索引信息。
本实施例查找方法适用于按照实施例二方法添加表项生成的B树,也适用于采用其它自动或人工输入方式生成的B树,只要该B树的表项具有本例中描述的扩展结构及含义即可。
实施例五、一种用于最长匹配的B树的表项删除方法,如图10所示,包括:
E1、获取需要从B树中删除的长度为W的最长匹配表项,W为自然数。
E2、根据需要删除的最长匹配表项生成待删表项值。
生成方式可参照实施例一中通过扩展最长匹配表项来得到精确表项值的方式,由于本例中扩展得到的精确表项是用来删除的,所以可称之为待删表项值,在扩展1比特的情况下,待删表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与最长匹配表项中对应于掩码长度的字段相同。
E3、按照设定的比较顺序将待删表项值与B树中已有表项的表项值进行比较,确定需要删除的表项。
待删表项值可按照B树常用的比较规则执行查找操作,与实施例三中查找过程类似,不再赘述。
E4、将所确定的表项及相应的索引删除。
本实施例删除方法适用于按照实施例一方法添加表项生成的B树,也适用于采用其它自动或人工输入生成的B树,只要该B树的表项具有本例中描述的扩展结构及含义即可。
实施例六、一种用于最长匹配的B树的表项删除方法,如图11所示,包括:
F1、获取需要从B树中删除的长度为W的最长匹配表项,W为自然数。
F2、根据需要删除的最长匹配表项生成待删表项值。简单起见,本例中采用扩展1比特的方式,扩展后的待删表项值具有W+1个比特,从低位起,第一个取值为“1”的比特之前的字段与最长匹配表项中对应于掩码长度的字段相同。
F3、按照设定的比较顺序将待删表项值与B树中已有表项的表项值进行比较,确定需要删除的表项。本步骤可参照步骤E3执行。
本实施例中,B树的非叶子节点上的各个表项还包括Bitmap和若干个索引字段,Bitmap具有的比特数大于或等于相应表项的掩码长度减一,用于记录当前B树中本表项与之匹配且掩码长度短于本表项的那些表项的掩码长度,索引字段的数目与Bitmap的比特数相同,每个索引字段分别对应于Bitmap的各个比特,用于记录相应表项的索引。在本实施例中,除了按照步骤F3找到并删除相应表项外,还需要执行如下操作:
F4、在按照设定的比较顺序将待删表项值与B树中已有表项的表项值进行比较时,若是与位于非叶子节点上的表项进行比较,还将当前非叶子节点上的所有表项的Bitmap中与待删表项值对应的比特位信息以及相应索引字段的信息删除。
该删除过程可视为实施例二中Bitmap和索引信息的写入过程的逆过程,不再赘述。当然,本步骤同样可以与步骤F3(以及后续的步骤F5)同步或顺序执行,简明起见,图11中以同步的方式画出。
F5、将所确定的表项及相应的索引删除。
本实施例删除方法适用于按照实施例二方法添加表项生成的B树,也适用于采用其它自动或人工输入生成的B树,只要该B树的表项具有本例中描述的扩展结构及含义即可。
下面对本发明实施例涉及的装置进行说明。
实施例七、一种用于最长匹配的B树的表项添加装置,如图12所示,包括:
获取模块101,用于获取需要添加到B树中的长度为W的最长匹配表项,W为自然数;
扩展模块102,用于根据获取模块101获取的最长匹配表项生成待插表项值,生成的待插表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与最长匹配表项中对应于掩码长度的字段相同;
第一比较模块103,用于按照设定的比较顺序将扩展模块102生成的待插表项值与B树中已有表项的表项值进行比较,确定需要添加到的位置;
第一写入模块104,用于将扩展模块102生成的待插表项值及相应的索引写入第一比较模块103所确定的位置。
若本实例装置处理的B树进一步具有这样的特点:B树的非叶子节点上的各个表项还包括位图字段和若干个索引字段,所称位图字段具有的比特数大于或等于相应表项的掩码长度减一,索引字段的数目与位图字段的比特数相同,每个索引字段分别对应于位图字段的各个比特,则本实施例装置还可进一步包括:
第二写入模块105(由于是非必要部件,在图12中以虚线框表示),用于在第一比较模块103按照设定的比较顺序将待插表项值与B树中已有表项的表项值进行比较时,若是与位于非叶子节点上的表项进行比较,将待插表项值对应于掩码长度的字段与当前非叶子节点上的所有表项进行对比,若待插表项值对应于掩码长度的字段与被对比表项对应于掩码长度的字段的部分长度一致,则将被对比表项的位图字段中与待插表项值的掩码长度对应的比特置为设定值,并将待插表项值的索引写入相应的索引字段。
本实施例装置可用于执行实施例一或二提供的表项添加方法。
实施例八、一种用于最长匹配的B树的表项查找装置,如图13所示,包括:
获取模块201,用于获取需要在B树中查找的长度为W的最长匹配表项,W为自然数;
扩展模块202,用于根据获取模块201获取的最长匹配表项生成待查表项值,生成的待查表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;
第二比较模块203,用于按照设定的比较顺序将扩展模块202生成的待查表项值与B树中已有表项的表项值进行比较;
匹配模块204,用于在第二比较模块203执行比较时,将待查表项值对应于掩码长度的字段与所比较的表项进行对比,若被对比表项对应于掩码长度的字段与待查表项值对应于掩码长度的字段的至少部分长度一致,则确定该被对比表项与待查表项值匹配;
处理模块205,用于将匹配模块204所确定的与待查表项值匹配的全部表项中掩码长度最长的表项作为查找到的最长匹配表项。
若本实例装置处理的B树进一步具有这样的特点:B树的非叶子节点上的各个表项还包括位图字段和若干个索引字段,所称位图字段具有的比特数大于或等于相应表项的掩码长度减一,用于记录当前B树中本表项与之匹配且掩码长度短于本表项的那些表项的掩码长度,索引字段的数目与位图字段的比特数相同,每个索引字段分别对应于位图字段的各个比特,用于记录相应表项的索引,则本实施例装置的匹配模块204还可进一步用于:在第二比较模块203执行比较时,若需要从上一级节点移动到下一级节点继续比较,还获取与下一级节点的第一个表项相邻的上一级节点的表项的位图字段,确定所获取的位图字段中是否记录有与待查表项值匹配的表项。
本实施例装置可用于执行实施例三或四提供的表项查找方法。
实施例九、一种用于最长匹配的B树的表项删除装置,如图14所示,包括:
获取模块301,用于获取需要从B树中删除的长度为W的最长匹配表项,W为自然数;
扩展模块302,用于根据获取模块301获取的最长匹配表项生成待删表项值,生成的待删表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与最长匹配表项中对应于掩码长度的字段相同;
第三比较模块303,用于按照设定的比较顺序将扩展模块302生成的待删表项值与B树中已有表项的表项值进行比较,确定需要删除的表项;
第一删除模块304,将所确定的表项及相应的索引删除。
若本实例装置处理的B树进一步具有这样的特点:B树的非叶子节点上的各个表项还包括位图字段和若干个索引字段,所称位图字段具有的比特数大于或等于相应表项的掩码长度减一,用于记录当前B树中本表项与之匹配且掩码长度短于本表项的那些表项的掩码长度,索引字段的数目与位图字段的比特数相同,每个索引字段分别对应于位图字段的各个比特,用于记录相应表项的索引,则本实施例装置还可进一步包括:
第二删除模块305(由于是非必要部件,在图14中以虚线框表示),用于在第三比较模块303按照设定的比较顺序将待删表项值与B树中已有表项的表项值进行比较时,若是与位于非叶子节点上的表项进行比较,还将当前非叶子节点上的所有表项的位图字段中与待删表项值对应的比特位信息以及相应索引字段的信息删除。
本实施例装置可用于执行实施例五或六提供的表项删除方法。
本领域普通技术人员可以理解,上述实施例中各种方法的全部或部分步骤可以通过程序来指令相关硬件完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存储器、磁盘或光盘等。
以上对本发明实施例所提供的用于最长匹配的B树的表项添加、查找、删除方法及装置进行了详细介绍,本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (13)
1.一种用于最长匹配的B树的表项添加方法,其特征在于,所述的方法应用于路由器,包括:
获取需要添加到B树中的长度为W的最长匹配表项,W为自然数,所述B树用于保存路由表项;
根据所述最长匹配表项生成待插表项值,所述待插表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;
按照设定的比较顺序将所述待插表项值与B树中已有表项的表项值进行比较,确定需要添加到的位置;
将所述待插表项值及相应的索引写入所确定的位置。
2.根据权利要求1所述的方法,其特征在于:
所述B树的非叶子节点上的各个表项还包括位图字段和若干个索引字段,所述位图字段具有的比特数大于或等于相应表项的掩码长度减一,索引字段的数目与位图字段的比特数相同,每个索引字段分别对应于位图字段的各个比特;
在按照设定的比较顺序将待插表项值与B树中已有表项的表项值进行比较时,若是与位于非叶子节点上的表项进行比较,还将待插表项值对应于掩码长度的字段与当前非叶子节点上的所有表项进行对比,若待插表项值对应于掩码长度的字段与被对比表项对应于掩码长度的字段的部分长度一致,则将被对比表项的位图字段中与待插表项值的掩码长度对应的比特置为设定值,并将待插表项值的索引写入相应的索引字段。
3.根据权利要求2所述的方法,其特征在于:所述B树的非叶子节点上的各个表项的位图字段具有W-1个比特。
4.一种用于最长匹配的B树的表项查找方法,其特征在于,所述的方法应用于路由器,包括:
获取需要在B树中查找的长度为W的最长匹配表项,W为自然数,所述B树用于保存路由表项;
根据所述最长匹配表项生成待查表项值,所述待查表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;
按照设定的比较顺序将所述待查表项值与B树中已有表项的表项值进行比较,并将待查表项值对应于掩码长度的字段与所比较的表项进行对比,若被对比表项对应于掩码长度的字段与待查表项值对应于掩码长度的字段的至少部分长度一致,则确定该被对比表项与待查表项值匹配;
将所确定的与待查表项值匹配的全部表项中掩码长度最长的表项作为查找到的最长匹配表项。
5.根据权利要求4所述的方法,其特征在于:
所述B树的非叶子节点上的各个表项还包括位图字段和若干个索引字段,所述位图字段具有的比特数大于或等于相应表项的掩码长度减一,用于记录当前B树中本表项与之匹配且掩码长度短于本表项的那些表项的掩码长度,索引字段的数目与位图字段的比特数相同,每个索引字段分别对应于位图字段的各个比特,用于记录相应表项的索引;
在按照设定的比较顺序将待查表项值与B树中已有表项的表项值进行比较时,若需要从上一级节点移动到下一级节点继续比较,还获取与下一级节点的第一个表项相邻的上一级节点的表项的位图字段,确定所获取的位图字段中是否记录有与待查表项值匹配的表项。
6.一种用于最长匹配的B树的表项删除方法,其特征在于,所述的方法应用于路由器,包括:
获取需要从B树中删除的长度为W的最长匹配表项,W为自然数,所述B树用于保存路由表项;
根据所述最长匹配表项生成待删表项值,所述待删表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;
按照设定的比较顺序将所述待删表项值与B树中已有表项的表项值进行比较,确定需要删除的表项;
将所确定的表项及相应的索引删除。
7.根据权利要求6所述的方法,其特征在于:
所述B树的非叶子节点上的各个表项还包括位图字段和若干个索引字段,所述位图字段具有的比特数大于或等于相应表项的掩码长度减一,用于记录当前B树中本表项与之匹配且掩码长度短于本表项的那些表项的掩码长度,索引字段的数目与位图字段的比特数相同,每个索引字段分别对应于位图字段的各个比特,用于记录相应表项的索引;
在按照设定的比较顺序将待删表项值与B树中已有表项的表项值进行比较时,若是与位于非叶子节点上的表项进行比较,还将当前非叶子节点上的所有表项的位图字段中与待删表项值对应的比特位信息以及相应索引字段的信息删除。
8.一种用于最长匹配的B树的表项添加装置,其特征在于,所述的装置应用于路由器,包括:
获取模块,用于获取需要添加到B树中的长度为W的最长匹配表项,W为自然数,所述B树用于保存路由表项;
扩展模块,用于根据所述最长匹配表项生成待插表项值,所述待插表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;
第一比较模块,用于按照设定的比较顺序将所述待插表项值与B树中已有表项的表项值进行比较,确定需要添加到的位置;
第一写入模块,用于将所述待插表项值及相应的索引写入所确定的位置。
9.根据权利要求8所述的装置,其特征在于,所述B树的非叶子节点上的各个表项还包括位图字段和若干个索引字段,所述位图字段具有的比特数大于或等于相应表项的掩码长度减一,索引字段的数目与位图字段的比特数相同,每个索引字段分别对应于位图字段的各个比特,所述装置还包括:
第二写入模块,用于在所述第一比较模块按照设定的比较顺序将待插表项值与B树中已有表项的表项值进行比较时,若是与位于非叶子节点上的表项进行比较,将待插表项值对应于掩码长度的字段与当前非叶子节点上的所有表项进行对比,若待插表项值对应于掩码长度的字段与被对比表项对应于掩码长度的字段的部分长度一致,则将被对比表项的位图字段中与待插表项值的掩码长度对应的比特置为设定值,并将待插表项值的索引写入相应的索引字段。
10.一种用于最长匹配的B树的表项查找装置,其特征在于,所述的装置应用于路由器,包括:
获取模块,用于获取需要在B树中查找的长度为W的最长匹配表项,W为自然数,所述B树用于保存路由表项;
扩展模块,用于根据所述最长匹配表项生成待查表项值,所述待查表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;
第二比较模块,用于按照设定的比较顺序将所述待查表项值与B树中已有表项的表项值进行比较;
匹配模块,用于在所述第二比较模块执行比较时,将待查表项值对应于掩码长度的字段与所比较的表项进行对比,若被对比表项对应于掩码长度的字段与待查表项值对应于掩码长度的字段的至少部分长度一致,则确定该被对比表项与待查表项值匹配;
处理模块,用于将所确定的与待查表项值匹配的全部表项中掩码长度最长的表项作为查找到的最长匹配表项。
11.根据权利要求10所述的装置,其特征在于,所述B树的非叶子节点上的各个表项还包括位图字段和若干个索引字段,所述位图字段具有的比特数大于或等于相应表项的掩码长度减一,用于记录当前B树中本表项与之匹配且掩码长度短于本表项的那些表项的掩码长度,索引字段的数目与位图字段的比特数相同,每个索引字段分别对应于位图字段的各个比特,用于记录相应表项的索引;
所述匹配模块还用于:在所述第二比较模块执行比较时,若需要从上一级节点移动到下一级节点继续比较,还获取与下一级节点的第一个表项相邻的上一级节点的表项的位图字段,确定所获取的位图字段中是否记录有与待查表项值匹配的表项。
12.一种用于最长匹配的B树的表项删除装置,其特征在于,所述的装置应用于路由器,包括:
获取模块,用于获取需要从B树中删除的长度为W的最长匹配表项,W为自然数,所述B树用于保存路由表项;
扩展模块,用于根据所述最长匹配表项生成待删表项值,所述待删表项值具有W+1个比特,从低位起,第一个取值为设定值的比特之前的字段与所述最长匹配表项中对应于掩码长度的字段相同;
第三比较模块,用于按照设定的比较顺序将所述待删表项值与B树中已有表项的表项值进行比较,确定需要删除的表项;
第一删除模块,将所确定的表项及相应的索引删除。
13.根据权利要求12所述的装置,其特征在于,所述B树的非叶子节点上的各个表项还包括位图字段和若干个索引字段,所述位图字段具有的比特数大于或等于相应表项的掩码长度减一,用于记录当前B树中本表项与之匹配且掩码长度短于本表项的那些表项的掩码长度,索引字段的数目与位图字段的比特数相同,每个索引字段分别对应于位图字段的各个比特,用于记录相应表项的索引,所述装置还包括:
第二删除模块,用于在所述第三比较模块按照设定的比较顺序将待删表项值与B树中已有表项的表项值进行比较时,若是与位于非叶子节点上的表项进行比较,还将当前非叶子节点上的所有表项的位图字段中与待删表项值对应的比特位信息以及相应索引字段的信息删除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200910252580 CN102110117B (zh) | 2009-12-29 | 2009-12-29 | 用于最长匹配的b树的表项添加、查找、删除方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200910252580 CN102110117B (zh) | 2009-12-29 | 2009-12-29 | 用于最长匹配的b树的表项添加、查找、删除方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102110117A CN102110117A (zh) | 2011-06-29 |
CN102110117B true CN102110117B (zh) | 2013-06-12 |
Family
ID=44174280
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200910252580 Expired - Fee Related CN102110117B (zh) | 2009-12-29 | 2009-12-29 | 用于最长匹配的b树的表项添加、查找、删除方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102110117B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108075978B (zh) * | 2016-11-17 | 2021-03-30 | 华为技术有限公司 | 一种报文发送方法、节点配置方法以及相关设备 |
CN115328904B (zh) * | 2022-10-13 | 2023-03-24 | 中国电子科技集团公司第十五研究所 | 一种通过多层hash索引树过滤重复数据的方法和系统 |
CN117953936A (zh) * | 2022-10-27 | 2024-04-30 | 华为技术有限公司 | 一种存储设备、数据查找方法及系统 |
CN115883455A (zh) * | 2022-12-09 | 2023-03-31 | 苏州盛科通信股份有限公司 | 一种压缩路由信息的方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6490592B1 (en) * | 1999-12-30 | 2002-12-03 | Nortel Networks Limited | Method of and apparatus for generating a tree data structure supporting longest match lookup |
CN101572647A (zh) * | 2008-04-30 | 2009-11-04 | 华为技术有限公司 | 一种数据查找的方法及装置 |
-
2009
- 2009-12-29 CN CN 200910252580 patent/CN102110117B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6490592B1 (en) * | 1999-12-30 | 2002-12-03 | Nortel Networks Limited | Method of and apparatus for generating a tree data structure supporting longest match lookup |
CN101572647A (zh) * | 2008-04-30 | 2009-11-04 | 华为技术有限公司 | 一种数据查找的方法及装置 |
Non-Patent Citations (2)
Title |
---|
一种基于范围表示B树的大容量IPv6路由查表算法;谭明锋等;《国防科技大学学报》;20051231;第27卷(第5期);18-24 * |
谭明锋等.一种基于范围表示B树的大容量IPv6路由查表算法.《国防科技大学学报》.2005,第27卷(第5期),18-24. |
Also Published As
Publication number | Publication date |
---|---|
CN102110117A (zh) | 2011-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7523288B2 (en) | Dynamic fragment mapping | |
US7571299B2 (en) | Methods and arrangements for inserting values in hash tables | |
CN109766341B (zh) | 一种建立哈希映射的方法、装置、存储介质 | |
US7664927B2 (en) | Hash tables | |
CN104142958B (zh) | 一种键值对系统中数据的存储方法和相关装置 | |
JP2670383B2 (ja) | 部分キー分岐機能を備えたプレフィックス探索ツリー | |
WO2008004335A1 (fr) | dispositif de recherche de séquence de bits, procédé de recherche et programme | |
CN108134739B (zh) | 一种基于索引特里树的路由查找方法及装置 | |
CN109522271B (zh) | 一种b+树节点的批量插入和删除方法及装置 | |
WO2008053583A1 (fr) | Procédé et programme de recherche de séquence de bits | |
CN102110117B (zh) | 用于最长匹配的b树的表项添加、查找、删除方法及装置 | |
JP4439013B2 (ja) | ビット列検索方法及び検索プログラム | |
CN107239549A (zh) | 数据库术语检索的方法、装置及终端 | |
CN109254962B (zh) | 一种基于t-树的索引优化方法、装置及存储介质 | |
US7302377B1 (en) | Accelerated event queue for logic simulation | |
KR102698516B1 (ko) | 네트워크 키 값 인덱싱 설계 | |
US7933885B1 (en) | Longest matching prefix search engine with hierarchical decoders | |
US8166043B2 (en) | Bit strings search apparatus, search method, and program | |
US8341153B2 (en) | Apparatus and method for heap sorting with collapsed values and selective value expansion | |
CN106569986A (zh) | 字符串替换方法和装置 | |
CN115206434A (zh) | 一种基于De Bruijn图的多序列比对方法 | |
CN108984780B (zh) | 基于支持重复键值树数据结构管理磁盘数据的方法和装置 | |
JP2008065716A (ja) | データ管理装置、データ管理方法及びデータ管理プログラム | |
US20090043770A1 (en) | Method of Realizing Commands Synchronization in Supporting Multi-Threading Non-Volitale Memory File System | |
CN113342706A (zh) | 一种基于非易失性内存的写优化可扩展哈希索引结构以及插入、刷新和删除方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130612 Termination date: 20191229 |