一种存储数据的方法、装置及系统的制作方法

文档序号:7926518阅读:139来源:国知局

专利名称::一种存储数据的方法、装置及系统的制作方法
技术领域
:本发明涉及数据存储领域,尤其涉及一种存储数据的方法、装置及系统。
背景技术
:树作为一种重要的非线性结构,被越来越多的应用到数据存储领域。例如,随着互联网络的迅猛发展,网络上的路由前缀数目成倍的增长,而路由前缀则存储在路由器的网际互连协议转发信息库(即IPFIB)中。而任何FIB表,都可以构造二进制树(binarytree)来表示,如图1中左图所示。对于给定的FIB表,将每次查找需要检测的比特数称为步长,按给定的查找步长对表项进行分割存储。如图1中,给定步查找长为3,则每3位路由prefix(前缀)存储在一级内,生成图1中右图所示节点结构示意图。另外,同一节点的所有子节点按序在内存中连续存储,同一个节点的结果索引信息也存储在连续的内存中,这样就可以只用一个指针再加上偏移量就可以获得相应的子节点或结果索引信息。实际应用中,对于长度比较长,需要存储的节点级数比较多的路由表项采用二进制树形式存储时,采用现有的压縮技术仍然会产生较多的级点级数,占用较大的存储空间,尤其是固定节点内存空间的情况下,大大降低了路由转发表的转发性能和可添加最大表项数容量性能。
发明内容本发明实施例所要解决的技术问题在于,提供一种存储数据的方法及装置。可对路由表项中的单分支进行有效的压縮存储。为了解决上述技术问题,本发明实施例提供了一种存储数据的方法及装置,包括判断树结构中的节点是否为跳跃节点,判断为是时,读取所述跳跃节点所在级的下一级子节点;判断所述下一级子节点是否为可合并节点,判断为是时,将所述下一级子节点与所述跳跃节点合并为一个节点;将所述数据按照经过节点合并后的树结构进行存储。相应地,本发明实施例还提供了一种存储数据的装置,包括第一判断模块,用于判断树结构中的节点是否为跳跃节点,判断为是时,读取所述跳跃节点所在级的下一级子节点;第二判断模块,用于判断所述下一级子节点是否为可合并节点,判断为是时,将所述下一级子节点与所述跳跃节点合并为一个节点。实施本发明实施例,具有如下有益效果本发明可将路由表项以树形结构存储时生成的跳跃节点与所述跳跃节点所在级的下一级子节点进行合并,减少了路由表项以树形结构进行存储时总的节点层次,在固定节点内存空间的情况下,有效的提高了路由转发表的转发性能和可添加最大表项容量性能。图1是数据以树结构形式表示的示意图一及利用现有技术将数据以树结构形式存储生成的节点结构示意图一;图2是本发明方法实施例一的流程示意图;图3是跳跃节点压縮原理示意图;图4是本发明方法实施例一的具体流程示意图;图5是数据以树结构形式表示的示意图二及利用现有技术将数据以树结构形式存储生成的节点结构示意图二;图6是将图5中数据使用本发明存储技术以树结构形式存储生成的节点结构示意图;图7是本发明装置实施例的系统结构示意图。具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。本发明实施例中将数据以树形结构存储时生成的跳跃节点与所述跳跃节点所在级的下一级子节点进行合并,这样设置即可使原来存在较多节点层次的树形结构得到有效压縮,在固定节点内存空间的情况下,提升了存储空间的最大容量性能以及数据的转发性能。图2为本发明方法实施例一的流程示意图,包括200判断树结构中的节点是否为跳跃节点,判断为是时,读取所述跳跃节点所在级的下一级子节点。判断为否时,执行步骤202。如图l所示,图1中左图为以树形式表示的路由表项,其中,黑点代表包含前缀信息的表项,白点代表不包含前缀信息的表项,所述前缀(prefix),主要是用来指定具体的网络可达的,唯一标示一个网络目的地址,由匹配前缀(网段或IP地址)和前缀长度(子网掩码)组成。例如1.2.3.0/16和1.2.3.0/24表示前缀1.2.3.0掩码长度分别为16和24的两个prefix。按查找步长3对路由表项按从上至下,从左至右的顺序分割成若干个子树(如图1左图虚线框内所示),其中每个虚线框内表项存储为一个节点,生成如图1右图所示的树结构节点示意图。其中,路由表项按步长分割成若干子树后,当某一子树同时满足以下二个条件时l,子树中路由表项没有包含前缀信息;2,子树中每个路由表项有且只有一个子表项(如图l中左图的level31node所示,level31node中三个路由表项均不含有前缀信息,且level31node每个路由表项均只有一个路由子表项)将所述子树存储为跳跃节点(以下简称skipnode),如图l右图中节点31则是对应左图中level31node对应生成的包含三个路由表项的skipnode。参照图3,生成skipnode有如下两种形式一种是在单分支空节点路径上某一个节点有两个子节点,如图3左侧所示。这种形式的路径压縮从第一个空节点开始到出现分支的节点的父节点压縮生成一个skipnode。第二种情况是单分支空节点路径上出现一个含有prefix的节点,如图3右侧所示。这种形式的路径压縮从第一个空节点开始到出现含有prefix的节点的父节点压縮生成一个skipnode。Skipnode的数据结构如表1所示。表lskipnode<table>tableseeoriginaldocumentpage5</column></row><table><table>tableseeoriginaldocumentpage5</column></row><table>表1中,ulSCTNode为超级Trie节点(以下简称为supertrienode)标志位,为1时为SuperTrieNode,为0时读取Type判断为其他什么节点类型。Type为节点类型。ulCmpLen表示SkipNode存储的压縮单分支路径的长度,长度数值是步长的倍数;以路由表项的存储为例,路由表项是按步长进行分割后存储于节点中。如图1中,对表项进行分割的步长为3。ulPBMI0ffSet为最长匹配表项偏移量。ulPTI为奇偶校验位。ulAddrChild指示SkipNode节点子节点地址。ulCmpDataHigh用于存储单分支压縮路径高字节位;ulCmpDataLow用于存储单分支压縮路径低字节位。201判断所述下一级子节点是否为可合并节点,判断为是时,将所述下一级子节点与所述跳跃节点存储为一个节点。判断为否时,执行步骤202。所述可合并节点为包含有前缀信息和/或多分支路径的节点。以存储路由表项为例,可合并节点包括对表项按步长划分后行成的trie节点和尾结点(简称endnode),需要说明的是,对路由表项按步长分割后产生的子树中,当某一子树中有路由表项包含前缀信息或子树中任一路由表项有两个或两个以上子路由表项,则将子树中表项存储为trie结点,如图l左图中level21node中有表项包含前缀信息,level23node中有一个路由表项有两个子路由表项,则level21node,level23node对应生成右图中的节点21和节点23为trie结点。trienode数据结构如表2所示。表2trienode<table>tableseeoriginaldocumentpage5</column></row><table>表2中ulSCTNode为supertrienode标志位,为1时为SuperTrieNode,为0时读取ulType判断为其他什么节点类型;ulType为节点类型;ulResultAddr用于指示InternalNode(内部节点)的结果地址,其中InternalNode用于存储trie节点的内部位图(以下简称Internalbitm即),所述内部位图用来代表trie节点中存储的前缀信息;ulPBMI0ffSet为最长匹配表项偏移量;ulPTI为奇偶校验位;ulHaveINode用于表示TrieNode节点是否存在InternalNode子节点,例如当ulHaveINode为1时表示存在InternalNode,为0时不存在InternalNode;ulAddrChild用于指向TrieNode节点的子节点地址;ExtendingBitmapHighBits用于存储扩展位图(ExtendingBitmap)的高字节位;ExtendingBitmapLowBits用于存储ExtendingBitmap的低字节位。end结点则是当分割后的子树无任何子子树时,则存储为end结点。如图1左图中level41node,无任何子子树,对应生成右图中的节点41,节点41为end节点。endnode的数据结构如表3所示。表3endnode<table>tableseeoriginaldocumentpage6</column></row><table>表3中,ulSCTNode为supertrienode标志位,为1时为SuperTrieNode,为0时读取ulType判断为其他什么节点类型;ulType为节点类型;ulAddrResult为EndNode节点对应的结果数组地址;ulPBMI0ffSet:最长匹配表项偏移量;ulPTI[22]:奇偶校验位;InternalBitmapHighBits用于存储InternalBitmap(内部位图)高字节位;InternalBitmapLowBits用于存储InternalBitmap低字节位。同时,本发明实施例只是描述了一次数据判断合并的过程,在其它实施例中,可多次或依据某一预设的条件循环对树结构中节点执行上述操作。202将所述数据按照经过节点合并后的树结构进行存储。实施本实施例中可将树结构中跳跃节点与所述跳跃节点所在级的下一级包含有前缀信息和/或包含有多分支路径的子节点合并,即可实现节点层次的减少。图4为本发明方法实施例一的具体流程示意图,包括400获取树结构中一个或多个节点的节点类型信息。本实施例中树结构中的节点类型包括skipnode,trienode,endnode。需要说明的是,在其它实施例中,获取节点信息可以从根节点开始按从左至右,从上至下的顺序对树结构中的节点进行遍历以获取每个节点的信息。请参图5,以存储路由表项为例,图5中左图为以树结构表示的路由表项,其中黑点代表含有前缀信息的表项,白点代表不含有前缀信息的表项。预设查找步长为3,根据查找步长及现有技术对左图中的表项进行分割存储后生成如图5中右图所示的节点图,其中,Level1:TrieNodeLevel2:SkipNode(21)+EndNode(22)+SkipNode(23)Level3:EndNode(31)+TrieNode(32)Level4:EndNode(41)401判断所述获取的节点是否为跳跃节点,判断为是时,读取所述跳跃节点所在级的下一级子节点。判断为否时,执行步骤404。需要说明的是,其它实施例中,判断为否时,可继续判断其它节点是否为跳跃节点或是实时监测树结构中节点是否因为表项的插入或删除成为跳跃节点。402判断所述下一级子节点中否为trie节点,判断为是时,将所述trie节点与所述跳跃节点合并为超级trie节点(简称supertrienode),判断为否时,执行步骤404。403判断所述下一级子节点中否为尾节点,判断为是时,将所述尾节点与所述跳跃节点合并为超级跳跃尾节点(超级跳跃尾节点,以下简称superskipendnode),判断为否时,执行步骤404。参照图5,本实施例中,节点21与节点23都是跳跃节点。读取节点21所在级的下一级子节点31,判断节点31是否为trie节点,判断为否,则再判断节点是否为endnode,判断为是,则将节点21与节点31全合为并为superskipendnode,即生成图6中的节点21,其中superskipendnode的数据结构如表4所示。表4superskipendnode<table>tableseeoriginaldocumentpage7</column></row><table>表4中,ulSCTNode为supertrienode标志位,为1时为SuperTrieNode,为0时读取ulType判断为其他什么节点类型;ulType为节点类型;ulCmpData用于存储原skipnode中存储的单分支压縮路径;ulCmpLen用于标示原skipnode中存储的单分支压縮路径长度;ulResultAddr用于表示SuperSkipEndNode节点对应结果数组地址;ulPBMI0ffSet表示最长匹配表项偏移量;ulPTI[22]为奇偶校验位;InternalBitmapHighBits用于存储原endnode的InternalBitmap高字节位;InternalBitmapLowBits用于存储原endnode的InternalBitmap低字节位。续参图5,读取图5中节点23所在级的下一级子节点32,判断节点32是否为trie节点,判断为是,将节点23与节点32合并为supertrienode,即生成图6中节点23,同时,图5中原节点41自动向上成为图6中节点31。本实施例中,supertrienode的数据结构如表5所示。表5supertrienode<table>tableseeoriginaldocumentpage8</column></row><table>表5中,ulSCTNode为supertrienode标志位,为1时为SuperTrieNode,为0时读取ulType判断为其他什么节点类型;ulType为节点类型;ulCmpDataHigh用于存储原skipnode中存储的单分支压縮路径的高字节位;ulCmpDataLow用于存储原skipnode中存储的单分支压縮路径的低字节位;ulCmpLen用于标示原skipnode中压縮的单分支路径长度;ulResultAddr用于标示原TrieNode节点对应子节点InternalNode的结果地址;ulPBMI0ffSet标示最长匹配表项偏移量;ulPTI[标示奇偶校验位;ulHaveINode用于表示原TrieNode节点是否存在InternalNode子节点;ulAddrChild用于标示原TrieNode节点的子节点地址;ExtendingBitmap用于存储原TrieNode节点的ExtendingBitmap高字节位;ExtendingBitmap用于存储原TrieNode节点的ExtendingBitmap低字节位。404将所述数据按照经过节点合并后的树结构进行存储。参照图6,图6为最终节点合并后成的节点结构图,其中Levell:TrieNodeLevel2:SuperSkipEndNode+EndNode+SuperTrieNodeLevel3:EndNode与图5相比,图6中的节点层次减少了一层,同时节点的个数也由图3中的七个减少为五个。由本发明实施例可见,通过将跳跃节点与所述跳跃节点所在级的下一级子节点进行合并,有效的减少了以路由表项以树结构存储时所产生的节点及节点层次,在固定节点内存空间的情况下,有效的提高了将路由转发表的转发性能和可添加最大表项容量性能。需要说明的是,步骤402和步骤403没有必然的先后顺序,在其它实施例中可同时并行执行或是按一定顺序进行。在其它实施例中,进行表项插入或删除时,可能改变节点类型,则相应的可根据节点改变后的类型,对节点进行合并或拆分。其中,拆分或合并的过程既可以节点类型改变后实时进行,也可每隔一定时间对存储数据的树结构进行遍历后再根据后节点的改变情况进行相应操作。同理,在其它实施例中,也可对其它以树结构形式存储的数据实施本发明实施例中的方案。图7为本发明实施例一种存储数据的装置的结构示意图,包括第一判断模块l,用于判断树结构中的节点是否为跳跃节点,判断为是时,读取所述跳跃节点所在级的下一级子节点,第二判断模块2,用于判断所述下一级子节点是否为可合并节点,判断为是时,将所述下一级子节点与所述跳跃节点合并为一个节点。进一步,第一判断模块1包括获取单元ll,用于获取所述树结构中一个或多个节点的节点类型信息。需要说明的是,获取节点类型信息的过程可以是以某种顺序对树结构进行遍历获取。第二判断单元12,用于判断所述获取的节点是否为跳跃节点,判断为是时,读取所述跳跃节点所在级的下一级子节点。第二判断模块2包括第一判断单元21,用于判断所述下一级子节点是否包含多分支路径和/或前缀信息,判断为是时,将所述下一级子级点与所述跳跃节点合并为一个节点。进一步,第一判断单元21包括第一判断子单元211,判断所述下一级子节点是否为trie节点,判断为是时,将所述trie节点与所述跳跃节点合并为超级trie节点;第二判断子单元212,用于判断所述下一级子节点是否为尾节点,判断为是时,将所述尾节点与所述跳跃节点合并为超级跳跃尾节点。需要说明的是,本发明装置实施例中所涉及的数据结构与本发明方法实施例中大致相同,在此不再详述。由上可以,本发明装置实施例可实现数据以树形结构存储时生成的跳跃节点与所述跳跃节点所在级的下一级子节点进行合并,减少了数据以树形结构进行存储时总的节点层次和节点总数,为数据的存储节约了空间,也提高了数据的转发性能。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-0nlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,廳)等。以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。权利要求一种存储数据的方法,所述数据以树结构方式存储,其特征在于,包括判断树结构中的节点是否为跳跃节点,判断为是时,读取所述跳跃节点所在级的下一级子节点;判断所述下一级子节点是否为可合并节点,判断为是时,将所述下一级子节点与所述跳跃节点合并为一个节点;将所述数据按照经过节点合并后的树结构进行存储。2.如权利要求1所述的方法,其特征在于,判断所述下一级子节点是否为可合并节点的步骤包括判断所述下一级子节点是否包含多分支路径和/或前缀信息。3.如权利要求2所述的方法,其特征在于,判断所述下一级子节点是否包含多分支路径和/或前缀信息,判断为是时,将所述下一级子节点与所述跳跃节点合并为一个节点的步骤包括判断所述下一级子节点是否为trie节点,判断为是时,将所述trie节点与所述跳跃节点合并为超级trie节点;或判断所述下一级子节点是否为尾节点,判断为是时,将所述尾节点与所述跳跃节点合并为超级跳跃尾节点。4.如权利要求3所述的方法,其特征在于,所述判断树结构中节点是否为跳跃节点的步骤具体包括获取所述树结构中一个或多个节点的节点类型信息;判断所述获取的节点是否为跳跃节点,判断为是时,读取所述跳跃节点所在级的下一级子节点。5.—种存储数据的装置,其特征在于,包括第一判断模块,用于判断树结构中的节点是否为跳跃节点,判断为是时,读取所述跳跃节点所在级的下一级子节点;第二判断模块,用于判断所述下一级子节点是否为可合并节点,判断为是时,将所述下一级子节点与所述跳跃节点合并为一个节点。6.如权利要求5所述的装置,其特征在于,所述第二判断模块包括第一判断单元,用于判断所述下一级子节点是否包含多分支路径和/或前缀信息,判断为是时,将所述下一级子级点与所述跳跃节点合并为一个节点。7.如权利要求6所述的装置,其特征在于,所述第一判断单元包括第一判断子单元,判断所述下一级子节点是否为trie节点,判断为是时,将所述trie节点与所述跳跃节点合并为超级trie节点;第二判断子单元,用于判断所述下一级子节点是否为尾节点,判断为是时,将所述尾节点与所述跳跃节点合并为超级跳跃尾节点。8.如权利要求7所述的装置,其特征在于,所述第一判断模块包括获取单元,用于获取所述树结构中一个或多个节点的节点类型信息;第二判断单元,用于判断所述获取的节点是否为跳跃节点,判断为是时,读取所述跳跃节点所在级的下一级子节点。全文摘要本发明实施例公开了一种存储数据的方法,包括判断树结构中的节点是否为跳跃节点,判断为是时,读取所述跳跃节点所在级的下一级子节点;判断所述下一级子节点是否为可合并节点,判断为是时,将所述下一级子节点与所述跳跃节点合并为一个节点;将所述数据按照经过节点合并后的树结构进行存储。采用本发明,可实现数据以树形结构存储时生成的跳跃节点与所述跳跃节点所在级的下一级子节点进行合并,减少了数据以树形结构进行存储时总的节点层次和节点总数,为数据的存储节约了空间,也提高了数据的转发性能。文档编号H04L12/56GK101741708SQ200810219090公开日2010年6月16日申请日期2008年11月13日优先权日2008年11月13日发明者李猛,高红亮申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1