CN107545026B - 一种接口名字解析树功能的实现方法和装置 - Google Patents
一种接口名字解析树功能的实现方法和装置 Download PDFInfo
- Publication number
- CN107545026B CN107545026B CN201710508334.3A CN201710508334A CN107545026B CN 107545026 B CN107545026 B CN 107545026B CN 201710508334 A CN201710508334 A CN 201710508334A CN 107545026 B CN107545026 B CN 107545026B
- Authority
- CN
- China
- Prior art keywords
- key
- interface
- queried
- query
- value
- 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.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种接口名字解析树功能的实现方法和装置,该方法为:预先构建Key‑Value数据库,根据接口的接口名字包括的接口标识生成Key存入Key‑Value数据库;接收查询请求,查询请求包括查询类型和待查询接口标识;根据查询类型选择与查询类型对应的查询规则并根据待查询接口标识生成待查询Key;根据待查询Key和选定的查询规则在Key‑Value数据库中查找并返回结果。该方法可以解决跨进程访问接口名字解析树带来的通信效率低下、进程终止导致接口名字解析树功能不可用的问题,以及可以解决通过指针数组保存接口名字解析树带来的存储空间浪费的问题。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种接口名字解析树功能的实现方法和装置。
背景技术
在交换机、路由器等数据通信设备上,接口通常以Ethernet2/0/1这种接口名字的方式呈现给用户。接口名字包含的信息对用户来说一目了然,比如Ethernet2/0/1表示2号槽上第1个以太网接口(假设接口编号从1开始),Serial3/1/2则表示3号槽1号子卡上第2个串行接口。但在设备内部程序里,则用一个32位无符号数表示接口,这就是接口索引。对于程序来说,使用接口索引比接口名字更加方便。
在命令行、WEB等前台配置工具上,用户通过接口名字来操作接口,而在后台程序中则使用接口索引,这就存在接口名字到接口索引的转换问题。接口名字解析树就是用来完成从接口名字解析出接口索引任务的数据结构。
发明内容
有鉴于此,本申请提供一种接口名字解析树功能的实现方法和装置,用以解决跨进程访问接口名字解析树带来的通信效率低下、进程终止导致接口名字解析树功能不可用的问题,以及可以解决通过指针数组保存接口名字解析树带来的存储空间浪费的问题。
本申请是通过如下技术方案实现的:
本申请第一方面,提供了一种接口名字解析树功能的实现方法,包括:
预先构建Key-Value数据库,根据接口的接口名字包括的接口标识,生成Key存入Key-Value数据库中;
接收查询请求,查询请求包括查询类型和待查询接口标识;
根据查询类型,选择与查询类型对应的预设的查询规则并根据待查询接口标识生成待查询Key;
根据待查询Key和选定的查询规则在Key-Value数据库中查找并返回结果。
本申请第二方面,提供了一种接口名字解析树功能的实现装置,具有实现上述方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块或单元。
一种实现方式中,所述装置包括:
数据库构建单元,用于预先构建Key-Value数据库,根据接口的接口名字包括的接口标识,生成Key存入Key-Value数据库中;
接收单元,用于接收查询请求,查询请求包括查询类型和待查询接口标识;
转换单元,用于根据查询类型,选择与查询类型对应的预设的查询规则并根据待查询接口标识生成待查询Key;
查询单元,用于根据待查询Key和选定的查询规则在Key-Value数据库中查找并返回结果。
另一种实现方式中,所述装置可以包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,处理器执行所述机器可执行指令以实现第一方面所述的方法。
本申请第三方面,提供了一种机器可读存储介质,所述机器可读存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现本申请第一方面所述的方法。
由以上技术方案可以看出,本申请通过Key-Value数据库来实现接口名字解析树至少有以下优势:1)利用现有数据库的成熟优势,可以提供更好的并发访问性能;2)使得接口名字解析树的实现与进程无关,即使进程意外终止,期间其他进程可以完全不间断的继续访问Key-Value数据库;进程重启后无需重建接口名字解析树;3)可以提供更高的访问速度和更好的空间利用率。在访问速度上,使用Key-Value数据库则直接根据预定规则构造好Key后直接查找到对应的信息。在空间利用率上,使用Key-Value数据库完全没有传统的空间浪费,各个Key之间非常紧凑,不存在空洞。
附图说明
图1是接口名字解析树的示意图;
图2是现有技术中通过指针数组实现接口名字解析树的示意图;
图3是本申请提供的一种Key-Value数据库的结构示意图;
图4是本申请提供的方法流程图;
图5是本申请提供的装置功能模块框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
接口名字解析树是根据接口名字中包含的接口类型和至少一个字段组织出来的分层树状数据结构,该至少一个字段可以包括槽号(Slot)、子卡号(Card)、接口编号等。如图1所示为一种接口名字解析树的示意图,其第一层是根结点,表示树的起点;第二层是接口类型,区分各种类型接口,如以太网口(Ethernet)、串行接口(Serial)、隧道接口(Tunnel)、虚拟局域网接口(Vlan-interface)等;第三层表示槽号;第四层表示子卡号,子卡插在板上,板插在槽上;最后一层表示接口编号,为叶子节点,其内保存有接口索引。
通过接口名字解析树,可以实现以下功能:
一、接口索引查询功能,此功能主要用于根据用户输入的接口名字,查询对应的接口索引。以查询Serial2/1/2对应的接口索引为例,从该接口名字中可以解析出接口类型Serial、槽号2、子卡号1、编号2,根据这些信息在图1所示的接口名字解析树上逐层查找,最后可以找到保存在接口名字解析树的叶子节点中的接口索引。
二、接口名字帮助功能,此功能主要用于根据用户输入的接口标识(如接口类型、槽号、子卡号等),查询下一级接口标识的序号。以查询Serial下的槽号信息为例,从图1所示的接口名字解析树上可以查到接口类型Serial下包括槽号1和2,据此可以给出下一级接口标识为:1和2。
三、接口名字检查功能,此功能主要用于检测用户输入的接口名字是否合法。以检查Serial2/2/1是否合法为例,从该接口名字可以解析出接口类型Serial、槽号2、子卡号2、编号1,到图1所示的接口名字解析树上查找,发现2号槽上没有2号子卡,查找失败,因此接口名字检查不通过。
传统方法中,可以使用指针数组来实现接口名字解析树。例如,图1所示的接口解析树可以通过图2所示的指针数组实现,除最后的叶子节点外,每一级都可以通过指针指向下一级指针数组。通过指针数组实现的接口名字解析树保存在内存中,由一个进程来组织维护,其他进程如果需要访问,需要通过进程间通信进行。比如,如果A进程维需要访问B进程提供的接口名字解析树,A进程首先通过进程间通信向B进程发送请求,B进程收到请求后访问接口名字解析树,最后B进程再把访问结果通过进程间通信发回A进程。这种方式的缺点在于:
一、两次进程间通信会导致效率低下;负责维护接口名字解析树的进程需要监听其它进程的访问请求并响应,开销极大;当访问频繁时,对维护接口名字解析树的进程来说也是一个较大的负担。
二、如果维护接口名字解析树的进程意外终止,会导致一段时间内服务不可用,重启之后需要重新构建接口名字解析树。
三、因为叶子节点个数的不确定性,指针数组存在着空间浪费的问题。以系统中存在Ethernet2/0/1和Ethernet2/5/1两个以太网接口为例,在“Ethernet2”节点上,需要申请至少6个指针存储空间(5-0+1),偏移0存放“Ethernet2/0”的指针,偏移5存放“Ethernet2/5”的指针。当编号间空洞比较大时,会浪费较大的存储空间。
针对上述问题,本申请提供了一种解决方案,利用Key(键)-Value(值)数据库来实现接口名字解析树功能,从而可以有效解决跨进程访问接口名字解析树带来的通信效率低下、进程终止导致接口名字解析树功能不可用的问题,以及可以解决通过指针数组实现接口名字解析树带来的浪费存储空间的问题。
本申请可以应用于物理设备(如交换机、路由器等)上,也可以应用于虚拟机上。
本申请可以包括Key-Value数据库的构建过程和利用Key-Value数据库实现接口名字解析树功能的过程。
以下首先对Key-Value数据库的构建过程进行介绍。
第一步,探测本设备包括的接口,包括物理接口、逻辑接口和管理接口等。
第二步,针对待处理的接口,执行以下操作:分别根据该接口的接口名字包括的每一接口标识,生成一条Key并存入Key-Value数据库,Key包括该接口标识的数据位、所有级别高于该接口标识的其它接口标识的数据位。
本申请中,在Key-Value数据库中,Key的Value可以包括接口索引值。
作为一个实施例,可以通过以下步骤将接口的接口名字包括的每一接口标识生成一条Key并存入Key-Value数据库:
1)解析得到该接口的接口名字包括的N个接口标识,N为大于0的整数。
接口标识可以包括接口类型、框号、槽号、子卡号、接口编号、子通道号和子接口号中的多个。实际应用中,接口的接口名字一般至少会包括接口类型和接口编号这两个接口标识。
不同类型的接口可以有不同的命名规则。例如对于虚拟局域网接口而言,其接口名字可以只包含接口类型和接口编号;对于以太网接口而言,其接口名字可以包含接口类型、槽号、子卡号和接口编号;对于S-channel(S通道)接口而言,其接口名字可以包含接口类型、槽号、子卡号、接口编号、子通道号和子接口号。
例如,对于“Ethernet2/0/1”,可以解析得到接口类型“Ethernet”、槽号“2”、子卡号“0”和接口编号“1”四个部分。
2)将该N个接口标识中级别最高的接口标识转换成对应的数据位K1,在Key-Value数据库中生成一条Key,该Key包括数据位K1,该Key的Value包括的接口索引值为无效值。
实际应用中,该N个接口标识中级别最高的接口标识一般为接口类型,本申请可以预先定义各接口类型与数值的对应关系,从而根据该对应关系将接口类型转换成对应的数值。
在本申请中,Key-Value数据库中的Key可以采用数组这一数据结构。Key包括的元素可以分为两类,一类称为数据位,即接口标识对应的数值,数据位可以是整数也可以是非整数;另一类称为有效位,表示Key包括的数据位的数量。其中,有效位是一个可选元素,即Key可以不包含有效位,只包含数据位。当Key包含有效位时,一般将Key包括的第一个元素用来表示Key的有效位。
例如,假设预先规定“Ethernet”对应19,那么对于“Ethernet2/0/1”,可以将“Ethernet”转换成Key={19}或Key={1,19},这里的“19”即为数据位,“1”即为有效位。由于Key={19}或Key={1,19}对应的“Ethernet”不对应实际接口,因此其Value中存储的接口索引值为无效值。
3)将该N个接口标识中级别次高的接口标识转换成对应的数据位K2,在Key-Value数据库中生成一条Key,该Key包括数据位K1和K2,该Key的Value包括的接口索引值为无效值。
需要注意的是,当一条Key包括多个数据位时,本申请并不限制该多个数据位在Key中的排列顺序,例如这多个数据位可以按照级别从高到低(或从低到高)的顺序排列,也可以按照设定的任意顺序排列。
仍以“Ethernet2/0/1”为例,根据其接口标识中级别排在第二位的槽号“2”,可以生成Key={19,2}或Key={2,19},如果Key中还包括有效位,则Key还可以表示成{2,19,2}或{2,2,19}等形式。由于这条Key对应的“Ethernet2”不对应实际接口,因此其Value中存储的接口索引值为无效值。
4)依次类推,直至处理到该N个接口标识中级别最低的接口标识,在Key-Value数据库中生成一条Key,该Key包括数据位K1、K2、K3、…KN,该Key的Value中包括该接口对应的接口索引值。
仍以“Ethernet2/0/1”为例,按照上述方法处理到接口标识中级别最低的接口编号“1”,最终生成的Key包括19、2、0和1这4个数据位,该Key的Value中保存着“Ethernet2/0/1”对应的接口索引值。
需要注意的是,按照上述方法构建Key-Value数据库时,对于不同的接口可能得到相同的Key,如“Ethernet2/0/1”和“Ethernet2/0/3”会重复生成3条一样的Key,针对这种情况,本申请可以规定对于重复生成的Key仅保留一条。
在本申请中,还可以定义一种Key的比较规则。具体如下:
对于只包含数据位的Key,可以规定:
1)当两个Key的数组长度不同时,数组长度较长的Key>数组长度较短的Key。比如{9}<{1,1},{1,3}<{1,0,10}。
2)当两个Key的数组长度相同时,比较级别最高的接口标识对应的数据位的大小,数值较大的Key>数值较小的Key;如果该数据位仍然相同,则继续比较级别次高的接口标识对应的数据位的大小,依次类推直到得到比较结果。
在一个实施例中,假设Key中的各数据位按照级别从高到低的顺序排列,那么在比较Key的大小时,当两个Key的数组长度相同时,可以比较第一个数据位的大小,数值较大的Key>数值较小的Key;如果第一个数据位仍然相同,则继续比较接下来的数据位,直到全部比较完成。比如{1}<{2},{1,10}<{3,0}。
对于包含有效位的Key,可以规定:
1)当两个Key的有效位不同时,有效位较大的Key>有效位较小的Key。
假设Key中的第一个元素表示有效位,则{1,9}<{2,1,1},{2,1,3}<{3,1,0,10}。
2)当两个Key的有效位相同时,比较级别最高的接口标识对应的数据位的大小,数值较大的Key>数值较小的Key;如果该数据位仍然相同,则继续比较级别次高的接口标识对应的数据位的大小,依次类推直到得到比较结果。
有了上述Key的比较规则,可以将Key-Value数据库中的Key按照大小顺序排列,这样有利于实现接口名字帮助功能。
作为一个实施例,在本申请中,Key的Value中还可以记录Key中级别最低的接口标识在接口名字中的下一个符号,例如“S-channel2/0/1:1.100”中的“/”、“:”和“.”都是符号,这样有利于实现接口名字检查功能。
根据上述过程,便可以构建得到Key-Value数据库。以本设备中存在Ethernet2/0/1、Ethernet2/0/2、Ethernet2/3/1、Ethernet2/3/2为例,假设Key中的各数据位按照级别从高到低的顺序排列,则构建得到的Key-Value数据库可以如图3所示(假设Ethernet对应19)。
利用上面构建得到的Key-Value数据库可以实现接口名字解析树功能。参见图4,本申请中实现接口名字解析树功能的流程可包括以下步骤:
步骤401:预先构建Key-Value数据库,根据接口的接口名字包括的接口标识,生成Key存入Key-Value数据库中。
构建的Key-Value数据库用于实现接口名字解析树功能。
步骤402:接收查询请求,查询请求包括查询类型和待查询接口标识。
步骤403:根据查询类型,选择与查询类型对应的预设的查询规则并根据待查询接口标识生成待查询Key。
步骤404:根据待查询Key和选定的查询规则在Key-Value数据库中查找并返回结果。
接口名字解析树功能包括接口索引查询功能,接口名字帮助功能和接口名字查询功能。下面依次对如何实现这三大功能进行介绍。
1)接口索引查询功能。
当收到的查询请求包括的查询类型为接口索引查询时,步骤403中,可以通过以下方式生成待查询Key:生成包括所有待查询接口标识的数据位的待查询Key。
例如,假设待查询接口标识包括M个接口标识,则首先可以根据预设的接口类型和数值的对应关系,确定该待查询接口标识中的接口类型对应的数值L1;然后将该待查询接口标识中剩余的M-1个接口标识分别转换成对应的数值L2,L3,…LM,这里,Li对应的接口标识的级别高于Li-1对应的接口标识,1≤i≤M;最后根据上述M个数据位生成Key。假设Key中的各数据位按照级别从高到低的顺序排列,则该Key可以有两种形式,如果仅包括数据位,则Key={L1,L2,…LM};如果还包括有效位,则Key={M,L1,L2,…LM}。
基于得到的待查询Key,步骤404中,可以在Key-Value数据库中找到与待查询Key一致的Key,从找到的Key的Value中获取接口索引值并返回。
举例来说,如果收到接口索引查询请求且待查询接口标识为“Ethernet2/0/1”,假设“Ethernet”和19相对应以及Key中的各数据位按照级别从高到低的顺序排列,则可以将“Ethernet2/0/1”转化成{19,2,0,1}或{4,19,2,0,1},从而只要在Key-Value数据库中找到{19,2,0,1}或{4,19,2,0,1},再从对应的Value中获取接口索引值即可。
通过接口索引查询功能的实现过程可以看出,本申请可以根据待查询接口标识唯一确定一个Key,通过这个Key可以直接从Key-Value数据库中获取到对应的Value中存储的接口索引值。相比现有技术中通过数组指针逐层查找保存在叶子节点中的接口索引,速度更快。
2)接口名字帮助功能。
本申请根据Key-Value数据库中的Key是否包括有效位,提供两种实现接口名字帮助功能的方法。
第一种方法:
在第一种方法中,Key-Value数据库中的Key包括有效位。
当收到的查询请求包括的查询类型为接口名字帮助查询时,步骤403中,可以通过以下方式生成待查询Key:生成包括有效位及所有待查询接口标识的数据位的待查询Key。
这里生成待查询Key的过程可参考上述实现接口索引查询功能中生成待查询Key的过程,不作赘述。
基于得到的待查询Key,步骤404中,可以在Key-Value数据库中找到有效位比待查询Key大1、且包括待查询Key所有数据位的Key;然后将找到的Key中级别最低的数据位返回,作为接口名字帮助查询所查询的下一级接口标识。
作为一个实施例,可以通过如下步骤在Key-Value数据库中找到有效位比待查询Key大1、且包括待查询Key所有数据位的Key:
针对转换得到的待查询Key,构造区间[KeyStart,KeyEnd);其中,区间左端点KeyStart的有效位比待查询Key的有效位大1,KeyStart包括待查询Key所有数据位,KeyStart中级别最低的数据位为0;区间右端点KeyEnd的有效位比待查询Key的有效位大1,KeyEnd包括待查询Key除级别最低数据位以外的所有数据位,KeyEnd中级别最低的数据位为0,KeyEnd中级别次低的数据位比待查询Key中级别最低的数据位大1。
举例来说,如果待查询Key={M,L1,L2,…LM},其中Li对应的接口标识的级别高于Li-1对应的接口标识,1≤i≤M;则构造得到的区间左端点KeyStart={M+1,L1,L2,…LM,0},构造得到的区间右端点KeyEnd={M+1,L1,L2,…LM+1,0}。
得到区间[KeyStart,KeyEnd)后,只要从Key-Value数据库中找到位于区间[KeyStart,KeyEnd)内的Key,再将找到的Key中级别最低的数据位返回即可。
第二种方法:
在第二种方法中,Key-Value数据库中的Key不包括有效位。
当收到的查询请求包括的查询类型为接口名字帮助查询时,步骤403中,可以通过以下方式生成待查询Key:生成包括所有待查询接口标识的数据位的待查询Key。
基于得到的待查询Key,步骤404中,可以在Key-Value数据库中找到包括的数据位的数量比待查询Key包括的数据位的数量多1位、且包括待查询Key所有数据位的Key;然后将找到的Key中级别最低的数据位返回,作为接口名字帮助查询所查询的下一级接口标识。
作为一个实施例,可以通过如下步骤在Key-Value数据库中找到包括的数据位数量比待查询Key多1位、且包括待查询Key所有数据位的Key:
针对转换得到的待查询Key,构造区间[KeyStart,KeyEnd);其中,区间左端点KeyStart的数据位数量比待查询Key的数据位数量多1位,KeyStart包括待查询Key所有数据位,KeyStart中级别最低的数据位为0;区间右端点KeyEnd的数据位数量比待查询Key的数据位数量多1位,KeyEnd包括待查询Key除级别最低数据位以外的所有数据位,KeyEnd中级别最低的数据位为0,KeyEnd中级别次低的数据位比待查询Key中级别最低的数据位大1。得到区间[KeyStart,KeyEnd)后,同样只需从Key-Value数据库中找到位于区间[KeyStart,KeyEnd)内的Key,再将找到的Key中级别最低的数据位返回即可。
举例来说,如果待查询Key={L1,L2,…LM},其中Li对应的接口标识的级别高于Li-1对应的接口标识,1≤i≤M;则构造得到的区间左端点KeyStart={L1,L2,…LM,0},构造得到的区间右端点KeyEnd={L1,L2,…LM+1,0}。
以图3所示的Key-Value数据库为例,当查询类型为接口名字帮助请求且待查询接口标识为“Ethernet2/”时,首先根据该待查询接口标识,生成Key={19,2}或{2,19,2}。然后,根据生成的{19,2}或{2,19,2},构造KeyStart={19,2,0}或{3,19,2,0},KeyEnd={19,3,0}或{3,19,3,0}。之后,从Key-Value数据库中查找位于[KeyStart,KeyEnd)这一区间内的Key,可以找到{19,2,0}/{3,19,2,0}和{19,2,3}/{3,19,2,3}两个Key。从找到的Key中解析出最后一个数据位,即可得到0和3,表示以太网接口的槽号2下共有两个子卡,子卡号分别为0和3。本申请中,在将找到的Key中级别最低的数据位返回时可以有多种形式。在上述例子中,可以直接返回“0”和“3”,也可以返回“Ethernet2/0”和“Ethernet2/3”。
通过接口名字帮助功能的实现过程可以看出,本申请可以根据待查询接口标识唯一确定一个区间,通过在Key-Value数据库中直接查找位于该区间内的所有Key,之后从找到的Key中解析出级别最低的数据位,即可得到接口名字帮助查询所查询的下一级接口标识信息。相比现有技术中需要通过数组指针逐层遍历查找某个节点下的所有子节点,速度更快。
3)接口名字检查功能。
检查一个接口名字是否合法主要包括两部分,一是检查接口名字中的各接口标识之间的连接符是否合法,例如“Ethernet2/0-1”不是一个合法输入,因为“Ethernet2/0”之后应该跟随的是“/”而不是“-”;二是检查该接口名字在本设备中是否存在,例如如果本设备中不存在“Ethernet3/0/1”,则“Ethernet3/0/1”便不是一个合法输入。
当收到的查询请求包括的查询类型为接口名字检查查询时,步骤403中,可以通过以下方式生成待查询Key:生成包括所有待查询接口标识的数据位的待查询Key。
这里生成待查询Key的过程可参考上述实现接口索引查询功能中生成待查询Key的过程,不作赘述。
基于得到的待查询Key,步骤404中,可以取待查询Key中级别最高的数据位,在Key-Value数据库中查找仅包括该级别最高的数据位的Key并核对符号;若未找到,则检查结束,返回结果告知待查询接口标识对应的接口名字不合法;若找到、且根据找到的Key的Value确定该级别最高的数据位对应的接口标识的下一个符号错误,则检查结束,返回结果告知待查询接口标识对应的接口名字不合法;若找到、且根据找到的Key的Value确定该级别最高的数据位对应的接口标识的下一个符号正确,则取待查询Key中级别排在前两位的数据位继续检查,直至检查完待查询Key包括的所有数据位为止。
以下基于图3所示的Key-Value数据库,通过两个具体例子说明如何实现接口名字检查功能。
例如,如果要检查“Ethernet3/0/1”是否合法,具体过程如下:
1)将“Ethernet3/0/1”转换成Key={19,3,0,1}或{4,19,3,0,1}。
2)在Key-Value数据库查找{19}或{1,19},由于此时数据库中存在{19}或{1,19},且“Ethernet3/0/1”中的“Ethernet”后紧随的符号为数字,因此第一步检查通过。
3)在Key-Value数据库中查找{19,3}或{2,19,3},由于此时数据库中不存在{19}和{1,19},因此确定“Ethernet3/0/1”不合法。
又例如,如果要检查“Ethernet2/0-1”是否合法,具体过程如下:
1)将“Ethernet2/0-1”转换成Key={19,2,0,1}或{4,19,2,0,1}。
2)在Key-Value数据库查找{19}或{1,19},由于此时数据库中存在{19}或{1,19},且“Ethernet2/0-1”中的“Ethernet”后紧随的符号为数字,因此第一步检查通过。
3)在Key-Value数据库中查找{19,2}或{2,19,2},由于此时数据库中存在{19,2}或{2,19,2},且“Ethernet2/0-1”中的“2”后紧随的符号为“/”,因此第二步检查通过。
4)在Key-Value数据库中查找{19,2,0}或{3,19,2,0},虽然此时数据库中存在{19,2,0}或{3,19,2,0},但因“Ethernet2/0-1”中的“0”后紧随的符号为“-”,与Value中记载的“/”不匹配,故第三步检查不通过,确定“Ethernet2/0-1”不合法。
通过接口名字检查功能的实现过程可以看出,本申请可以根据待查询接口标识构造多个Key,通过能否从Key-Value数据库中查找到该多个Key,可以方便地实现接口名字检查功能。相比现有技术中需要通过数组指针逐层查找接口名字解析树的多层节点,速度更快。
综上所述,本申请通过Key-Value数据库来实现接口名字解析树,该Key-Value数据库可以是内存数据库(如LMDB(Lightning Memory-Mapped Database Manager)),也可以是文件数据库,本申请不作限制,只要是满足支持通过Key查找对应的Value、支持Key的自定义比较功能、支持查找特定区间内的Key的数据库均可用来实现本申请提供的技术方案。而通过Key-Value数据库来实现接口名字解析树至少有以下好处:
1)利用现有数据库的成熟优势,可以提供更好的并发访问性能;
2)使得接口名字解析树的实现与进程无关,即使进程意外终止,期间其他进程可以完全不间断的继续访问Key-Value数据库;进程重启后无需重建接口名字解析树;
3)可以提供更高的访问速度和更好的空间利用率。在访问速度上,传统的接口名字解析树的高度较高,以Ethernet2/0/1为例,其为4层树状结构,访问的时候需要层层解析,而使用Key-Value数据库则直接根据预定规则构造好Key后直接查找到对应的信息。在空间利用率上,使用Key-Value数据库完全没有传统的空间浪费,各个Key之间非常紧凑,不存在空洞。
以上对本申请提供的方法进行了描述。下面对本申请提供的装置进行描述。
参见图5,图5为本申请提供的一种接口名字解析树功能的实现装置的功能模块框图。如图5所示,该装置可以包括以下单元:
数据库构建单元501,用于预先构建Key-Value数据库,根据接口的接口名字包括的接口标识,生成Key存入Key-Value数据库中。
接收单元502,用于接收查询请求,查询请求包括查询类型和待查询接口标识。
转换单元503,用于根据查询类型,选择与查询类型对应的预设的查询规则并根据待查询接口标识生成待查询Key。
查询单元504,用于根据待查询Key和选定的查询规则在Key-Value数据库中查找并返回结果。
在其中一种实施方式中,所述数据库构建单元501用于:
对于待处理的接口,执行以下操作:分别根据该接口的接口名字包括的每一接口标识,生成一条Key并存入Key-Value数据库,Key包括该接口标识的数据位、所有级别高于该接口标识的其它接口标识的数据位。
在其中一种实施方式中,在Key-Value数据库中,Key的Value可以包括接口索引值;若查询类型为接口索引查询,则,
所述转换单元503,用于生成包括所有待查询接口标识的数据位的待查询Key。
所述查询单元504,用于在Key-Value数据库中找到与待查询Key一致的Key,从找到的Key的Value中获取接口索引值并返回。
在其中一种实施方式中,在Key-Value数据库中,Key还可以包括有效位,有效位表示Key包括的数据位的数量;若查询类型为接口名字帮助查询,则,
所述转换单元503,用于生成包括有效位及所有待查询接口标识的数据位的待查询Key。
所述查询单元504,用于在Key-Value数据库中找到有效位比待查询Key大1、且包括待查询Key所有数据位的Key;将找到的Key中级别最低的数据位返回,作为接口名字帮助查询所查询的下一级接口标识。
在其中一种实施方式中,若查询类型为接口名字帮助查询,则,
所述转换单元503,用于生成包括所有待查询接口标识的数据位的待查询Key。
所述查询单元504,用于在Key-Value数据库中找到包括的数据位的数量比待查询Key包括的数据位的数量多1位、且包括待查询Key所有数据位的Key;将找到的Key中级别最低的数据位返回,作为接口名字帮助查询所查询的下一级接口标识。
在其中一种实施方式中,在Key-Value数据库中,Key的Value包括Key中级别最低的接口标识在接口名字中的下一个符号;若查询类型为接口名字检查查询,则,
所述转换单元503,用于生成包括所有待查询接口标识的数据位的待查询Key。
所述查询单元504,用于取待查询Key中级别最高的数据位,在Key-Value数据库中查找仅包括该级别最高的数据位的Key并核对符号;若未找到,则检查结束,返回结果告知待查询接口标识对应的接口名字不合法;若找到、且根据找到的Key的Value确定该级别最高的数据位对应的接口标识的下一个符号错误,则检查结束,返回结果告知待查询接口标识对应的接口名字不合法;若找到、且根据找到的Key的Value确定该级别最高的数据位对应的接口标识的下一个符号正确,则取待查询Key中级别排在前两位的数据位继续检查,直至检查完待查询Key包括的所有数据位为止。
需要说明的是,本发明实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在本申请的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
本申请还提供一种接口名字解析树功能的实现装置,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,处理器执行所述机器可执行指令以实现如图4所示的方法。
此外,本申请还提供了一种机器可读存储介质,所述一个或多个程序包括指令,所述机器可读存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现图4所示的方法。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (12)
1.一种接口名字解析树功能的实现方法,其特征在于,包括:
预先构建Key-Value数据库,根据接口的接口名字包括的接口标识,生成Key存入Key-Value数据库中,包括:对于待处理的接口,执行以下操作:分别根据该接口的接口名字包括的每一接口标识,生成一条Key并存入Key-Value数据库,Key包括该接口标识的数据位、所有级别高于该接口标识的其它接口标识的数据位;所述接口名字包括:多个不同级别的接口标识;接口名字解析树的一层与多个接口标识中的一个接口标识对应;所述Key包括多个数据位,所述Key包含的一个数据位表示多个接口标识中的一个接口标识所对应的所述接口名字解析树的一层;
接收查询请求,查询请求包括查询类型和待查询接口标识;
根据查询类型,选择与查询类型对应的预设的查询规则并根据待查询接口标识生成待查询Key;
根据待查询Key和选定的查询规则在Key-Value数据库中查找并返回结果。
2.如权利要求1所述的方法,其特征在于,在Key-Value数据库中,Key的Value包括接口索引值;
若查询类型为接口索引查询,则,
所述根据待查询接口标识生成待查询Key,包括:
生成包括所有待查询接口标识的数据位的待查询Key;
所述根据待查询Key和选定的查询规则在Key-Value数据库中查找并返回结果,包括:
在Key-Value数据库中找到与待查询Key一致的Key,从找到的Key的Value中获取接口索引值并返回。
3.如权利要求1所述的方法,其特征在于,在Key-Value数据库中,Key还包括有效位,有效位表示Key包括的数据位的数量;
若所述查询类型为接口名字帮助查询,则,
所述根据待查询接口标识生成待查询Key,包括:
生成包括有效位及所有待查询接口标识的数据位的待查询Key;
所述根据待查询Key和选定的查询规则在Key-Value数据库中查找并返回结果,包括:
在Key-Value数据库中找到有效位比待查询Key大1、且包括待查询Key所有数据位的Key;
将找到的Key中级别最低的数据位返回,作为接口名字帮助查询所查询的下一级接口标识。
4.如权利要求1所述的方法,其特征在于,
若查询类型为接口名字帮助查询,则,
所述根据待查询接口标识生成待查询Key,包括:
生成包括所有待查询接口标识的数据位的待查询Key;
所述根据待查询Key和选定的查询规则在Key-Value数据库中查找并返回结果,包括:
在Key-Value数据库中找到包括的数据位的数量比待查询Key包括的数据位的数量多1位、且包括待查询Key所有数据位的Key;
将找到的Key中级别最低的数据位返回,作为接口名字帮助查询所查询的下一级接口标识。
5.如权利要求1所述的方法,其特征在于,在Key-Value数据库中,Key的Value包括Key中级别最低的接口标识在接口名字中的下一个符号;
若查询类型为接口名字检查查询,则,
所述根据待查询接口标识生成待查询Key,包括:
生成包括所有待查询接口标识的数据位的待查询Key;
所述根据待查询Key和选定的查询规则在Key-Value数据库中查找并返回结果,包括:
取待查询Key中级别最高的数据位,在Key-Value数据库中查找仅包括该级别最高的数据位的Key并核对符号;
若未找到,则检查结束,返回结果告知待查询接口标识对应的接口名字不合法;
若找到、且根据找到的Key的Value确定该级别最高的数据位对应的接口标识的下一个符号错误,则检查结束,返回结果告知待查询接口标识对应的接口名字不合法;
若找到、且根据找到的Key的Value确定该级别最高的数据位对应的接口标识的下一个符号正确,则取待查询Key中级别排在前两位的数据位继续检查,直至检查完待查询Key包括的所有数据位为止。
6.一种接口名字解析树功能的实现装置,其特征在于,包括:
数据库构建单元,用于预先构建Key-Value数据库,根据接口的接口名字包括的接口标识,生成Key存入Key-Value数据库中,包括:对于待处理的接口,执行以下操作:分别根据该接口的接口名字包括的每一接口标识,生成一条Key并存入Key-Value数据库,Key包括该接口标识的数据位、所有级别高于该接口标识的其它接口标识的数据位;所述接口名字包括:多个不同级别的接口标识;接口名字解析树的一层与多个接口标识中的一个接口标识对应;所述Key包括多个数据位,所述Key包含的一个数据位表示多个接口标识中的一个接口标识所对应的所述接口名字解析树的一层;
接收单元,用于接收查询请求,查询请求包括查询类型和待查询接口标识;
转换单元,用于根据查询类型,选择与查询类型对应的预设的查询规则并根据待查询接口标识生成待查询Key;
查询单元,用于根据待查询Key和选定的查询规则在Key-Value数据库中查找并返回结果。
7.如权利要求6所述的装置,其特征在于,在Key-Value数据库中,Key的Value包括接口索引值;
若查询类型为接口索引查询,则,
所述转换单元,用于生成包括所有待查询接口标识的数据位的待查询Key;
所述查询单元,用于在Key-Value数据库中找到与待查询Key一致的Key,从找到的Key的Value中获取接口索引值并返回。
8.如权利要求6所述的装置,其特征在于,在Key-Value数据库中,Key还包括有效位,有效位表示Key包括的数据位的数量;
若查询类型为接口名字帮助查询,则,
所述转换单元,用于生成包括有效位及所有待查询接口标识的数据位的待查询Key;
所述查询单元,用于在Key-Value数据库中找到有效位比待查询Key大1、且包括待查询Key所有数据位的Key;将找到的Key中级别最低的数据位返回,作为接口名字帮助查询所查询的下一级接口标识。
9.如权利要求6所述的装置,其特征在于,
若查询类型为接口名字帮助查询,则,
所述转换单元,用于生成包括所有待查询接口标识的数据位的待查询Key;
所述查询单元,用于在Key-Value数据库中找到包括的数据位的数量比待查询Key包括的数据位的数量多1位、且包括待查询Key所有数据位的Key;将找到的Key中级别最低的数据位返回,作为接口名字帮助查询所查询的下一级接口标识。
10.如权利要求6所述的装置,其特征在于,在Key-Value数据库中,Key的Value包括Key中级别最低的接口标识在接口名字中的下一个符号;
若查询类型为接口名字检查查询,则,
所述转换单元,用于生成包括所有待查询接口标识的数据位的待查询Key;
所述查询单元,用于取待查询Key中级别最高的数据位,在Key-Value数据库中查找仅包括该级别最高的数据位的Key并核对符号;若未找到,则检查结束,返回结果告知待查询接口标识对应的接口名字不合法;若找到、且根据找到的Key的Value确定该级别最高的数据位对应的接口标识的下一个符号错误,则检查结束,返回结果告知待查询接口标识对应的接口名字不合法;若找到、且根据找到的Key的Value确定该级别最高的数据位对应的接口标识的下一个符号正确,则取待查询Key中级别排在前两位的数据位继续检查,直至检查完待查询Key包括的所有数据位为止。
11.一种接口名字解析树功能的实现装置,其特征在于,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,处理器执行所述机器可执行指令以实现权利要求1-5任一所述的方法。
12.一种机器可读存储介质,其特征在于,所述机器可读存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现权利要求1-5任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710508334.3A CN107545026B (zh) | 2017-06-28 | 2017-06-28 | 一种接口名字解析树功能的实现方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710508334.3A CN107545026B (zh) | 2017-06-28 | 2017-06-28 | 一种接口名字解析树功能的实现方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107545026A CN107545026A (zh) | 2018-01-05 |
CN107545026B true CN107545026B (zh) | 2023-04-28 |
Family
ID=60970310
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710508334.3A Active CN107545026B (zh) | 2017-06-28 | 2017-06-28 | 一种接口名字解析树功能的实现方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107545026B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113660336B (zh) * | 2018-03-30 | 2024-03-15 | 北京忆芯科技有限公司 | 利用kv存储设备的云计算与雾计算系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103064875A (zh) * | 2012-10-30 | 2013-04-24 | 中国标准化研究院 | 一种服务化空间数据分布式查询方法 |
CN106406833A (zh) * | 2015-07-30 | 2017-02-15 | 北京京东尚科信息技术有限公司 | 一种提供数据的方法和装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090094271A1 (en) * | 2007-06-26 | 2009-04-09 | Allurdata Llc | Variable driven method and system for the management and display of information |
CN103001838B (zh) * | 2011-09-14 | 2015-12-16 | 中国移动通信集团公司 | 传感器设备标识的生成及使用方法、系统和相关设备 |
EP2639709B1 (en) * | 2012-03-13 | 2019-05-22 | Ricoh Company, Ltd. | Method and system for storing and retrieving data |
US20140379631A1 (en) * | 2013-06-25 | 2014-12-25 | Linkedln Corporation | Transactional key-value database with searchable indexes |
US9288049B1 (en) * | 2013-06-28 | 2016-03-15 | Emc Corporation | Cryptographically linking data and authentication identifiers without explicit storage of linkage |
-
2017
- 2017-06-28 CN CN201710508334.3A patent/CN107545026B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103064875A (zh) * | 2012-10-30 | 2013-04-24 | 中国标准化研究院 | 一种服务化空间数据分布式查询方法 |
CN106406833A (zh) * | 2015-07-30 | 2017-02-15 | 北京京东尚科信息技术有限公司 | 一种提供数据的方法和装置 |
Non-Patent Citations (1)
Title |
---|
陶然等.基于树合并的Deep Web查询接口集成.《NDBC2009第26届中国数据库学术会议》.2010,55-62. * |
Also Published As
Publication number | Publication date |
---|---|
CN107545026A (zh) | 2018-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6626211B2 (ja) | ショートリンクを処理する方法及び装置並びにショートリンクサーバ | |
CN107729371B (zh) | 区块链的数据索引及查询方法、装置、设备及存储介质 | |
CN106980699B (zh) | 一种数据处理平台和系统 | |
CN108205577B (zh) | 一种数组构建、数组查询的方法、装置及电子设备 | |
CN112860592B (zh) | 基于链表的数据缓存方法、装置、电子设备和存储介质 | |
CN112347377B (zh) | Ip地址段查找方法与业务调度方法、装置、电子设备 | |
CN111680489B (zh) | 目标文本的匹配方法和装置、存储介质及电子设备 | |
CN111475105B (zh) | 监控数据存储方法、设备、服务器及存储介质 | |
US8489631B2 (en) | Distributing a query | |
CN108763536A (zh) | 数据库访问方法及装置 | |
CN102867049A (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
CN107545026B (zh) | 一种接口名字解析树功能的实现方法和装置 | |
CN100574324C (zh) | 一种ip地址快速定位的方法和系统 | |
CN113946587A (zh) | 句柄标识解析缓存方法、查询方法及其句柄标识解析系统 | |
CN107807976B (zh) | Ip归属地查询方法和装置 | |
CN111061927B (zh) | 数据处理方法、装置及电子设备 | |
CN110505321B (zh) | 一种用于访问ip地址的方法及系统 | |
CN114238334A (zh) | 异构数据编码、解码方法和装置、计算机设备和存储介质 | |
CN108399152A (zh) | 数字查找树的压缩表示方法、系统、存储介质及规则匹配装置 | |
CN108984780B (zh) | 基于支持重复键值树数据结构管理磁盘数据的方法和装置 | |
CN109542939B (zh) | 一种基于纠删码的count-min摘要方法及装置 | |
CN108984615B (zh) | 一种数据查询方法和系统、存储介质 | |
CN108270599A (zh) | 一种基于snmp协议的数据解析处理方法及系统 | |
CN113596098A (zh) | 会话检索方法、装置、设备及计算机可读存储介质 | |
KR102189398B1 (ko) | 국소성-유지 해싱을 사용하는 효율적 구간 검색을 위한 방법 및 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |