一种数据存储与读取的方法和装置与流程

文档序号:13934488阅读:170来源:国知局
一种数据存储与读取的方法和装置与流程

本申请涉及网络通信技术领域,特别涉及一种数据存储与读取的方法和装置。



背景技术:

从数据的角度来说,网络设备的运行主要分为三个部分:数据接收、数据处理、数据发送。其中,查表法是数据处理时常用的方法。

所谓查表法是指将需要查找的数据存储至存储器件的相应地址中,然后根据输入的待读取数据的地址,从存储器件的待读取数据的地址中读取存储的数据。目前,通常在存储器件中采用二进制trie树结构存储数据。

二进制trie树为一种用于存储二进制数的多叉树,其中,多叉树是用于存储多个字符串的数据结构。请参见图1,图1为二进制trie树结构示意图。其中,节点间的路径表示地址,一般规定一个节点到其左子节点的路径表示比特0,到其右子节点的路径表示比特1,一个比特代表一个单位的地址长度,也表示二进制trie树中的一层。如果一个待读取数据的地址的长度为l,即有l个比特,那么该待读取数据在二进制trie树中第l层的节点中。

请参见图2,图2为网络设备中数据读取、数据存储及数据更新的结构示意图。其中,数据存储单元采用二进制trie树存储数据,且存储器件只支持将数据的存储地址串行输入二进制trie树。在现有技术中,当需要从二进制trie树中读取数据或者存储数据至二进制trie树中时,将待读取数据或者待存储数据的地址串行输入二进制trie树中,每一个时钟周期内,只向二进制trie树中输入一个比特,比如,待读取数据的地址为1101,向二进制trie树中输入该地址时,需要消耗四个时钟周期的时间,在每个时钟周期内分别依次向该二进制trie树中输入1,1,0,1。

因此,地址长度越长,向二进制trie树的次数越多,从而需要消耗的时间也越多。由于数据的读取与存储所消耗的时间会影响到网络设备的处理效率,因此,加快数据的读取与存储显得至关重要。



技术实现要素:

有鉴于此,本申请提供一种数据存储与读取的方法和装置,应用于网络设备,加快数据存储与读取的速度。

具体地,本申请是通过如下技术方案实现的:

一种数据存储与读取的方法,应用于网络设备,所述网络设备包括可编程逻辑器件,其中,所述可编程逻辑器件使用寄存器建立了二进制trie树,所述二进制trie树的根节点以外的各节点分别对应于一个寄存器,所述寄存器用于存储数据,所述可编程逻辑器件支持将数据的存储地址并行输入二进制trie树包括:

所述可编程逻辑器件接收所述网络设备的cpu发送的待存储数据,以及所述待存储数据的地址;

所述可编程逻辑器件将所述待存储数据的地址并行输入至所述二进制trie树以查找与该地址对应的寄存器,并将所述待存储数据存储至该寄存器;

所述可编程逻辑器件接收所述网络设备的cpu发送的待读取数据的地址;

所述可编程逻辑器件将所述待读取数据的地址并行输入至所述二进制trie树以查找与该地址对应的寄存器,并从该寄存器中读取存储的数据。

一种数据存储与读取的装置,应用于网络设备,所述网络设备包括可编程逻辑器件,其中,所述可编程逻辑器件使用寄存器建立了二进制trie树,所述二进制trie树的根节点以外的各节点分别对应于一个寄存器,所述寄存器用于存储数据,所述可编程逻辑器件支持将数据的存储地址并行输入二进制trie树;

所述可编程逻辑器件,包括:

第一接收单元,用于接收所述网络设备的cpu发送的待存储数据,以及所述待存储数据的地址;

第一查找单元,用于将所述待存储数据的地址并行输入至所述二进制trie树以查找与该地址对应的寄存器;

存储单元,用于将所述待存储数据存储至该寄存器;

第二接收单元,用于接收所述cpu发送的待读取数据的地址;

第二查找单元,用于将所述待读取数据的地址并行输入至所述二进制trie树以查找与该地址对应的寄存器;

读取单元,用于从该寄存器中读取存储的数据。

本申请的技术方案带来的有效效果:

在本申请中,采用可编程逻辑器件的寄存器生成二进制trie树,可编程逻辑器件支持将地址并行输入二进制trie树,无论在二进制trie树中存储待存储数据还是从二进制trie树中读取待读取数据,可编程逻辑器件只需要将待存储数据的地址或者待读取数据的地址并行输入二进制trie树中,查找到对应的寄存器,由于并行输入至二进制trie树中时,无论待存储数据的地址或者待读取数据的地址的地址长度的多大,可编程逻辑器件均只需要访问二进制trie树一次即可,因此,待存储数据的地址或者待读取数据的地址的地址长度的大小不再影响到可编程逻辑器件从二进制trie树中读取数据或者在二进制trie树中存储数据的消耗时间,从而可以加快可编程逻辑器件存储或者读取数据的速度。

附图说明

图1为二进制trie树结构示意图;

图2为网络设备中数据读取、数据存储及数据更新的结构示意图;

图3为现有技术示出的一种二进制trie树的示意图;

图4为本申请实施例一示出的一种网络设备结构示意图;

图5为本申请实施例一示出的一种数据存储与读取的方法流程图;

图6为本申请实施例一示出的一种二进制trie树示意图;

图7为本申请实施例一示出的另一种二进制trie树示意图;

图8为本申请实施例一示出的另一种二进制trie树示意图;

图9为本申请实施例一示出的另一种二进制trie树示意图;

图10为本申请实施例一示出的另一种二进制trie树示意图;

图11为本申请实施例一示出的另一种二进制trie树示意图;

图12为本申请实施例二示例性示出的一种数据存储与读取的装置。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

请参见表1,表1为本申请示出的数据地址示意表。

表1

在现有技术中,由于存储器件只支持将数据的地址串行输入二进制trie树,即每个时钟周期内,存储器件只能逐个比特输入至二进制trie树中。比如,网络设备的cpu需要从存储器件中读取存储地址为0011的数据,那么存储器件接收到网络设备的cpu发送的1100后,需要分别在连续的四个时钟周期内,向二进制trie树分别发送1,1,0,0。

在这一个过程中,存储器件具有记忆性,从将第一个比特输入至二进制trie树开始,到将最后一个比特输入至二进制trie树为止,存储器件向二进制trie树输入当前的比特时,会在之前已输入比特确定的路径基础上,基于当前输入的比特进一步确定路径。比如,存储器件已经向二进制trie树输入了比特1,那么存储器件可以确定路径为从根节点到根节点的右子节点,此时存储器件再接收到比特0,那么,存储器件会在原有的路径基础上,即在根节点到根节点的右子节点的基础上,根据比特0,进一步确定路径为根节点到根节点的右子节点,再到右子节点的左子节点,之后存储器件再将比特输入二进制trie树时,以此类推,确定数据的储存地址。

因此,基于现有技术中的存储器件,将表1中的数据存储至二进制trie树中后可以得到图3所示的二进制trie树,图3为现有技术示出的一种二进制trie树的示意图。

另外,在现有技术中,存储器件生成的二进制trie树,除了根节点不需要占用存储空间,其余各节点均需要占用存储空间,其中二进制trie树中占用存储空间的节点数量和需要存储至二进制trie树的数据的最长地址长度有关,如果需要存储至二进制trie树的数据的最长地址长度为l,那么占用存储空间的从图3中可以看出,在二进制trie树中,存在大量的空闲的存储空间。

综上所述,由于存储器件只支持将数据的地址串行输入至二进制trie树,地址长度越长的地址,查找该地址存储的数据所需要花费的时间越多,因此存储、更新、读取数据的速度慢。另外,由于在现有技术中,空闲的存储空间无法删除,因此浪费了大量的存储资源。

实施例一

为了提高网络设备的cpu在存储器件中存储数据、更新数据、读取数据时的速度,本申请实施例一提出了一种数据存储与读取的方法,该方法应用于网络设备,请参见图4,图4为本申请实施例一示出的一种网络设备结构示意图。

从图4中可以看出,该网络设备中包括可编程逻辑器件,其中,该可编程逻辑器件使用寄存器建立了二进制trie树,所述二进制trie树的根节点以外的各节点分别对应于一个寄存器,所述寄存器用于存储数据,所述可编程逻辑器件支持将数据的存储地址并行输入二进制trie树。

在本实施例中,该可编程逻辑器件可以是fpga(field-programmablegatearray,现场可编程门阵列)等。

请参见图5,图5为本申请实施例一示出的一种数据存储与读取的方法流程图,具体执行以下步骤:

步骤501:所述可编程逻辑器件接收所述网络设备的cpu发送的待存储数据,以及所述待存储数据的地址;

步骤502:所述可编程逻辑器件将所述待存储数据的地址并行输入至所述二进制trie树以查找与该地址对应的寄存器,并将所述待存储数据存储至该寄存器;

在本实施例中,由于可编程逻辑器件支持将数据的地址并行输入二进制trie树中。因此,当网络设备的cpu需要将待存储数据存储至二进制trie树中时,网络设备的cpu将待存储数据以及待存储数据的地址发送至可编程逻辑器件,可编程逻辑器件可以将待存储数据的地址并行输入至二进制trie树,即在一个时钟周期内将待存储数据的地址输入至二进制trie树。

例如,可编程逻辑器件接收到待存储数据的地址为1100,那么可编程逻辑器件可以在一个时钟周期内将1100输入至二进制trie树,而不再需要四个时钟周期分别将1100逐位输入至二进制trie树。

在本实施例中,当待存储数据的地址输入至二进制trie树后,可编程逻辑器件可以在二进制trie树中查找与该待存储数据的地址对应的寄存器,然后可编程逻辑器件可以接收到的网络设备的cpu发送的待存储数据,然后将该待存储数据存储至查找到的与该待存储数据的地址对应的寄存器。

由于本申请中可编程逻辑器件将待存储数据的地址并行输入至二进制trie树中,因此无法继续采用现有技术来确定与待存储数据的地址对应的寄存器的方法。

在实施例中,二进制trie树中的寄存器还用于存储其在二进制trie树中的层数。可编程逻辑器件使用寄存器生成二进制trie树时,可以在各寄存器中存储各自在二进制trie树中的层数。

在网络设备的cpu向可编程逻辑器件发送待存储数据以及待存储数据的地址的同时,还会向可编程逻辑器件发送该待存储数据的地址长度。可编程逻辑器件在二进制trie树中查找与输入的地址对应的寄存器时,可以判断当前查找到的寄存器中存储的层数与该待存储数据的地址长度是否相等。如果不相等,则说明当前查找到的寄存器不是与该待存储数据的地址对应的寄存器,可编程逻辑器件沿着二进制trie树继续查找。如果相等,则说明当前查找到的寄存器是与该待存储数据的地址对应的寄存器。

其中,当可编程逻辑器件将待存储数据的地址输入至二进制trie树中时,可编程逻辑器件根据该待存储数据的地址的首位确定查找路径为根节点的左子节点还是右子节点,然后将该待存储数据的地址长度与确定后的节点的寄存器进行匹配,判断该待存储数据的地址长度与确定后的节点的寄存器是否匹配。其中,二进制trie树中根节点以外的各节点的寄存器存储着器在寄存器在二进制trie树中的层数。

例如,在二进制trie树中存储待存储数据,该待存储数据的地址为0011时,该地址的首位为比特0,根据比特0对应的查找路径为左子节点,可编程逻辑器件可以将该待存储数据的地址长度(4)与根节点的左子节点进行匹配。由于查找到的根节点的左子节点的寄存器中存储的该寄存器在二进制trie树中的层数为1,而该待存储数据的的地址长度为4,因此该节点的寄存器中存储的该寄存器在二进制trie树的层数,与该待存储数据的地址长度不相等,即该待存储数据的地址长度与确定后的节点的寄存器不匹配。

在本实施例中,如果该待存储数据的地址长度与确定后的节点的寄存器不匹配,则根据该待存储数据的剩余地址的首位进一步确定查找路径为左子节点还是右子节点,然后将该待存储数据的地址长度与确定后的节点的寄存器进行匹配,以此类推,直到根据该待存储数据的地址确定的查找路径,查找到与该待存储数据的地址长度匹配的寄存器。

其中,可编程逻辑器件根据该待存储数据的地址确定查找路径时,每根据一个比特查找到一个节点,可编程逻辑器件均会将该比特删除,从该待存储数据的地址中删除该比特后剩下的地址为剩余地址,剩余地址会随着查找次数的增加而减少。

例如,在二进制trie树中存储地址为0011的待存储数据时,可编程逻辑器件根据该地址的首位(比特0)确定查找路径为根节点的左子节点,从0011中删除首位的比特0之后剩下011,011即为当前的剩余地址。由于该节点中不存在压缩标记,且该节点的寄存器中存储的该寄存器在二进制trie树中的层数为1,该待读取数据的地址长度为4,因此可编程逻辑器件可以确定该寄存器中存储的该寄存器在二进制trie树中的层数与该待读取数据的地址长度不相等。可编程逻辑器件可以根据剩余地址(011)的首位(比特0)进一步确定查找路径为左子节点,以此类推,直到根据该待存储数据的地址确定的查找路径,查找到与该待存储数据的地址长度匹配的寄存器。

当查找到与该待存储数据的地址对应的寄存器后,由于该寄存器可能已经被使用,因此还需要进一步判断该寄存器是否是空闲的寄存器。

在本实施例中,二进制trie树中的寄存器还用于存储标识其在二进制trie树中的具体位置的定位标记。每当数据存储至任一空闲的寄存器中时,可编程逻辑器件均会基于预设的定位标记计算算法计算该寄存器的定位标记,并将计算得到的定位标记存储至该寄存器中。

其中,其中,所述l为寄存器在所述二进制trie树中的层数。

例如,待存储数据的地址为0011,与该地址对应的寄存器在二进制trie树中的第四层,那么定位标记=2^0+2^1+2^2+2^3+3=18。

当可编程逻辑器件查找到与该待存储数据的地址对应的寄存器后,可编程逻辑器件可以判断该寄存器中是否存储了定位标记。如果该寄存器中存储了定位标记,则说明该寄存器已被使用,那么可编程逻辑器件可以向网络设备的cpu发送地址不可用的提示消息。如果该寄存器中没有存储定位标记,则说明该寄存器为空闲寄存器,那么可编程逻辑器件可以将该待存储数据存储至该寄存器中,同时基于预设的定位标记计算算法计算该寄存器的定位标记,并将该定位标记存储至该寄存器中。

在本实施例中,当可编程逻辑器件将待存储数据以及定位标记存储至对应的寄存器中后,可编程逻辑器件可以基于预设的压缩算法对二进制trie树进行压缩以删除空闲的寄存器。

其中,压缩算法为:

1)、从二进制trie树的最低层(比如图7中的第四层)开始,判断各节点的寄存器是否为空闲的寄存器;如果是,将空闲的寄存器删除;如果不是,执行步骤2);

2)、判断该节点的父节点的寄存器是否为空闲的寄存器;如果是,将该节点的寄存器中的数据存储至该节点的父节点的寄存器中,并将该节点的寄存器删除;如果不是,保留该节点的寄存器中的数据;

3)、当二进制trie树的最低层的节点完成压缩后,采用同样的方法对该层的上一层的节点进行压缩,以此类推,直到对第一层的节点完成压缩;

4)、检测压缩后的二进制trie树中是否还存在空闲的寄存器,如果还存在空闲的寄存器,根据第一次压缩的方法对二进制trie树继续进行压缩,以此类推,直到二进制trie树中不存在空闲的寄存器。

其中,在步骤2)中,如果该节点的父节点的寄存器为空闲的寄存器,可编程逻辑器件将该节点的寄存器中的数据存储至该节点的父节点的寄存器中后,则可以确定该父节点的寄存器为发生压缩的寄存器。

在本实施例中,可编程逻辑器件可以在该发生压缩的寄存器中存储压缩标记(比如图7中压缩标记字段为1表示路径发生压缩,压缩标记字段为0表示路径未发生压缩),以及该父节点在二进制trie树中的层数,并根据该父节点的地址以及在二进制trie树中的层数,基于预设的定位标记计算算法计算该父节点的定位标记,并在该父节点的寄存器中存储该定位标记。

因此,在本实施例中,寄存器至少包括四个字段,分别为用于存储定位标记的字段,存储压缩标记的字段,存储寄存器在二进制trie树中的层数的字段,以及存储数据的字段。可编程逻辑器件可以使用寄存器生成的二进制trie树如图6所示,图6为本申请实施例一示出的一种二进制trie树示意图。

例如,将表1中的数据存储至图6所示的二进制trie树中后可以得到图7所示的二进制trie树,图7为本申请实施例一示出的另一种二进制trie树示意图。当对图7所示的二进制trie树进行压缩后,可以得到图8所示的二进制trie树,图8为本申请实施例一示出的另一种二进制trie树示意图。

由于第一次压缩完成后,二进制trie树中可能还存在空闲的寄存器,因此,需要执行步骤4)。例如,请参见图9,图9为本申请实施例一示出的另一种二进制trie树示意图,当对该二进制trie树完成第一次压缩后,可以得到图10所示的二进制trie树,图10为本申请实施例一示出的另一种二进制trie树示意图,从图10中可以看出,二进制trie树中还存在空闲的寄存器,因此需要对该二进制trie树继续进行压缩,直到二进制trie树中不存在空闲的寄存器。

其中,上述压缩算法为本实施例示出的一种压缩算法,在本申请中也可以采用其他可行的压缩算法,在本申请中对压缩算法不进行限定。

在本实施例中,在二进制trie树完成压缩后,如果需要对二进制trie树中的任一寄存器存储的数据进行更新,网络设备的cpu可以向可编程逻辑器件发送待更新数据、待更新数据的地址以及待更新数据的地址长度。参照可编程逻辑器件根据待存储数据的地址以及待存储数据的地址长度,将待存储数据存储至相应的寄存器中,可编程逻辑器件可以根据待更新数据的地址以及待更新数据的地址长度,将待更新数据替换对应的寄存器中存储的数据,在这里不再对更新寄存器中的数据的过程进行赘述。

在本实施例中,在二进制trie树完成压缩后,如果需要将待存储数据存储至二进制trie树中,可编程逻辑器件根据待存储数据的地址以及地址长度,基于预设的定位标记计算算法计算该待存储数据的定位标记,然后可编程逻辑器件遍历二进制trie树中是否存在存储了该定位标记的存储器,如果存在,更改该待存储数据的地址,如果不存在,在二进制trie树中与该待存储数据的地址相对应的节点添加寄存器,用于存储该待存储数据。

例如,在图8所示的二进制trie树中存储地址为0101的待存储数据i,根据该待存储数据i的地址和地址长度可以计算得到存储该待存储数据的寄存器转的定位标记为20,将该待存储数据存储至二进制trie树中后可以得到图11所示的二进制trie树,图11为本申请实施例一示出的另一种二进制trie树示意图。

步骤503:所述可编程逻辑器件接收所述网络设备的cpu发送的待读取数据的地址;

步骤504:所述可编程逻辑器件将所述待读取数据的地址并行输入至所述二进制trie树以查找与该地址对应的寄存器,并从该寄存器中读取存储的数据。

在本实施例中,当网络设备需要从可编程逻辑器件中读取时,网络设备的cpu可以向可编程逻辑器件发送待读取数据的地址以及该地址的地址长度,可编程逻辑器件可以将该待读取数据的地址以及该地址的地址长度并行输入至二进制trie树中,基于待读取数据的地址,以及该地址的地址长度,可编程逻辑器件可以在二进制trie树中查找到相应的寄存器,并从该寄存器中读取存储的数据。该待读取数据的地址并行输入至二进制trie树。

当该待读取数据的地址以及该地址的地址长度并行输入至二进制trie树中时,可编程逻辑器件根据该待读取数据的地址的首位确定查找路径为根节点的左子节点还是右子节点,然后将该待读取数据地址长度与确定后的子节点进行匹配。

例如,从图8所示的二进制trie树中读取待读取数据,该待读取数据的地址为0011,该地址的首位为比特0,根据比特0对应的查找路径为左子节点,可编程逻辑器件可以将该待读取数据的地址长度(4)与根节点的左子节点进行匹配。

当该待读取数据的地址长度与确定后的根节点的子节点进行匹配时,可编程逻辑器可以判断该子节点的寄存器中是否存储了压缩标记,如果存在压缩标记,那么该寄存器中存储的数据就是待读取数据,可编程逻辑器件可以读取该寄存器中存储的数据。如果不存在压缩标记,可编程逻辑器件可以判断该寄存器中存储的该寄存器在二进制trie树中的层数,与该待读取数据的地址长度是否相等。

如果相等,那么该寄存器中存储的数据就是待读取数据,可编程逻辑器件可以读取该寄存器中存储的数据。如果不相等,则说明该寄存器中存储的数据不是待读取数据,可编程逻辑器件可以根据该待读取数据的剩余地址的首位确定查找路径为左子节点还是右子节点。其中,可编程逻辑器件根据该待读取数据的地址确定查找路径时,每根据一个比特查找到一个节点,可编程逻辑器件均会将该比特删除,从该待读取数据的地址中删除该比特后剩下的地址为剩余地址。

例如,从图8所示的二进制trie树中读取地址为0011的待读取数据时,可编程逻辑器件根据该地址的首位(比特0)确定查找路径为根节点的左子节点,从0011中删除首位的比特0之后剩下011,011即为当前的剩余地址。由于该节点中不存在压缩标记,且该节点的寄存器中存储的该寄存器在二进制trie树中的层数为1,该待读取数据的地址长度为4,因此可编程逻辑器件可以确定该寄存器中存储的该寄存器在二进制trie树中的层数与该待读取数据的地址长度不相等。可编程逻辑器件可以根据剩余地址(011)的首位(比特0)确定查找路径为左子节点。

可编程逻辑器件根据该待读取数据的剩余地址的首位确定对应的节点后,可以判断该节点的寄存器中是否存储了压缩标记,如果是,读取该寄存器中存储的数据,如果不是,可编程逻辑器件判断该寄存器中存储的该寄存器在二进制trie树中的层数,与该待读取数据的地址长度是否相等。如果相等,可编程逻辑器件读取该寄存器中存储的数据,如果不相等,可编程逻辑器件根据该剩余地址的首位确定查找路径为左子节点还是右子节点,并将该待读取数据的地址长度与确定后的节点进行匹配,以此类推,直到查找到与该待读取数据的地址对应的节点,并从查找到的节点的寄存器中读取数据。

例如,结合前一个例子,根据剩余地址(011)的首位(比特0)确定查找路径为左子节点后,可编程逻辑器件可以判断该节点的寄存器(图8中定位标记为3的寄存器)中是否存储了压缩标记,由于该寄存器中存储了压缩标记,该节点即为与该待读取数据的地址对应的节点,该寄存器中存储的数据即为待读取数据,可编程逻辑器件可以读取该寄存器中存储的数据。

综上所述,本申请中,采用可编程逻辑器件的寄存器生成二进制trie树,可编程逻辑器件支持将地址并行输入二进制trie树,无论在二进制trie树中存储待存储数据还是从二进制trie树中读取待读取数据,可编程逻辑器件只需要将待存储数据的地址或者待读取数据的地址并行输入二进制trie树中,查找到对应的寄存器,由于并行输入至二进制trie树中时,无论待存储数据的地址或者待读取数据的地址的地址长度的多大,可编程逻辑器件均只需要访问二进制trie树一次即可,因此,待存储数据的地址或者待读取数据的地址的地址长度的大小不再影响到可编程逻辑器件从二进制trie树中读取数据或者在二进制trie树中存储数据的消耗时间,从而可以加快可编程逻辑器件存储或者读取数据的速度。

实施例二

与前述一种数据存储与读取的方法的实施例相对应,本申请还提供了一种数据存储与读取的装置的实施例。

请参见图12,图12为本申请实施例二示例性示出的一种数据存储与读取的装置,应用于网络设备,所述网络设备包括可编程逻辑器件,其中,所述可编程逻辑器件使用寄存器建立了二进制trie树,所述二进制trie树的根节点以外的各节点分别对应于一个寄存器,所述寄存器用于存储数据,所述可编程逻辑器件支持将数据的存储地址并行输入二进制trie树,其中,所述可编程逻辑器件包括,第一接收单元,第一查找单元,存储单元,第二接收单元,第二查找单元,读取单元。

所述第一接收单元,用于接收所述网络设备的cpu发送的待存储数据,以及所述待存储数据的地址;

所述第一查找单元,用于将所述待存储数据的地址并行输入至所述二进制trie树以查找与该地址对应的寄存器;

所述存储单元,用于将所述待存储数据存储至该寄存器;

所述第二接收单元,用于接收所述cpu发送的待读取数据的地址;

所述第二查找单元,用于将所述待读取数据的地址并行输入至所述二进制trie树以查找与该地址对应的寄存器;

所述读取单元,用于从该寄存器中读取存储的数据。

在本实施例中,所述二进制trie树中的寄存器存储了其在所述二进制trie树中的层数,所述第一接收单元还用于接收所述cpu发送的所述待存储数据的地址长度,

所述第一查找单元,具体用于:

基于与所述待存储数据的地址对应的查找路径,所述可编程逻辑器件判断所述待存储数据的地址长度与当前查找到的寄存器中存储的层数是否相等;

如果相等,确定该寄存器为与所述待存储数据的地址对应的寄存器;如果不相等,沿着所述查找路径继续查找与所述待存储数据的地址对应的寄存器。

在本实施例中,所述寄存器还用于存储标识其在所述二进制trie树中具体位置的定位标记,所述存储单元,具体用于:

判断该寄存器中是否存储了定位标记;

如果没有存储定位标记,基于预设的定位标记计算算法计算得到该寄存器的定位标记;

将所述待存储数据,以及该寄存器的定位标记存储至该寄存器

其中,所述预设的定位标记计算算法为:

其中,所述l为寄存器在所述二进制trie树中的层数。

在本实施例中,所述寄存器还用于存储标识其存储的数据所对应的存储地址是否已压缩的压缩标记,所述装置还包括:

压缩单元,用于基于预设的压缩算法,对所述二进制trie树压缩;

存储单元,还用于在发生压缩的寄存器中存储压缩标记。

另外,在本实施例中,所述第二接收单元还用于接收所述cpu发送的所述待读取数据的地址的长度;

所述第二查找单元,具体用于:

基于与所述待读取数据的地址对应的查找路径,判断当前查找到的寄存器中是否存储了压缩标记;

如果是,确定当前查找到的寄存器为与所述待读取数据的地址对应的寄存器;如果不是,所述可编程逻辑器件进一步判断所述待读取数据的地址长度与当前查找到的寄存器中存储的其在所述二进制trie树中的层数是否相等;

如果相等,确定当前查找到的寄存器为与所述待读取数据的地址对应的寄存器;如果不相等,沿着所述查找路径继续查找与所述待读取数据的地址对应的寄存器。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1