CN107169054A - 基于前缀森林的ip索引方法 - Google Patents
基于前缀森林的ip索引方法 Download PDFInfo
- Publication number
- CN107169054A CN107169054A CN201710284679.5A CN201710284679A CN107169054A CN 107169054 A CN107169054 A CN 107169054A CN 201710284679 A CN201710284679 A CN 201710284679A CN 107169054 A CN107169054 A CN 107169054A
- Authority
- CN
- China
- Prior art keywords
- address
- bend
- leaf node
- indexed
- node
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于前缀森林的ip索引方法,包括如下步骤:步骤一:创建索引;将IP地址段用CIDR表示法表示,按前16位分别添加到65536棵二叉trie树中的某一棵,对后面在掩码范围内的每一位添加一个0或1的子节点,最后添加的一个子节点成为叶子节点,存储着到达这一叶子节点的最短路径所代表的IP地址段所索引的数据块的位置;步骤二:查询IP地址;由前16位的值直接定位到一棵二叉trie树,根据IP地址后面的每一位沿二叉trie树走到叶子节点,取到叶子节点中索引的位置,按此位置查询到目标数据。该前缀森林索引方式大大降低了IP索引的复杂度,压缩了索引数据的大小。
Description
技术领域
本发明涉及IP地址段索引领域。具体涉及基于前缀森林的ip索引方法。
背景技术
术语定义:
IP:Internet Protocol.因特网协议是为计算机网络相互连接进行通信而设计的协议。
IP address:Internet Protocol address.因特网协议地址是因特网协议中为因特网上的每台计算机和其它设备都规定的一个唯一的地址。
CIDR notation:Classless inter-domain routing notation.无类别域间路由表示法是一种表示IP地址段的方法,由IP地址前缀和掩码两部分组成。掩码内部分等于IP地址前缀的IP地址都属于这一段IP地址段。
trie:又称前缀树或字典树,是一种有序树。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串。
二叉树:每个节点最多有两个子树的树结构。
叶节点:一棵树当中没有子结点的结点。
索引:是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
时间复杂度:定量描述算法运行时间的函数。
现在越来越多的网络服务会根据访客的IP地址查询出对应的信息(如地理位置)后使用相匹配的语言、时区等配置以及提供个性化的服务,甚至根据IP地址赋予差异化的用户权限,从而提升用户体验和保障安全性,通常,IP地址与其索引的信息呈现“多对一”的映射关系,并且有相同信息的IP地址成段出现,因此IP地址的索引问题等价于IP地址的段的索引问题。
现有技术通常以每个IP地址段的起始地址来唯一标识一段IP地址。查询时按顺序遍历起始地址(这里默认顺序是从小到大),当某一起始地址大于要查询的地址时,获取上一个起始地址所索引的数据块并返回。
例如:用4.30.42.207代表4.30.42.207~4.30.42.255这个IP地址段,用4.30.43.0代表下一个IP地址段。当查询IP地址4.30.42.233时,遍历到4.30.43.0时首次发现4.30.43.0大于4.30.42.233,因此认为4.30.42.233位于前一个也就是4.30.42.207~4.30.42.255这个IP地址段。于是返回4.30.42.207所指向的数据块。
通常会在这种线性遍历之前,加入8位或16位的二级索引,以提高性能。仍然以查询4.30.42.233为例:其前16位是4.30(十进制为1054),于是在二级索引中查询第1054个数据块,这个数据块存储了4.30.0.0这个IP地址段的位置,于是直接跳转到4.30.0.0处开始上述的线性遍历。
现有技术的线性遍历方式逻辑简单,易于实现,适合小规模的应用,但随着IP数据库的丰富,IP地址分段必然越来越多,线性遍历的时间复杂度也会随之等比例上升,无法保证将查询控制在一个常数时间内。
发明内容
本发明的目的是针对上述背景技术中的缺陷,提供一种基于前缀森林的ip索引方法,实现降低IP索引的复杂度,压缩索引数据的大小,节省大量的存储空间的效果。
为了达到上述的技术效果,本发明采取以下技术方案:
基于前缀森林的ip索引方法,包括如下步骤:
步骤一:创建索引;
将IP地址段用CIDR表示法表示,按前16位分别添加到65536棵二叉trie树中的某一棵,对后面在掩码范围内的每一位添加一个0或1的子节点,最后添加的一个子节点成为叶子节点,存储着到达这一叶子节点的最短路径所代表的IP地址段所索引的数据块的位置;
步骤二:查询IP地址。
由前16位的值直接定位到一棵二叉trie树,根据IP地址后面的每一位沿二叉trie树走到叶子节点,取到叶子节点中索引的位置,按此位置查询到目标数据。
本发明与现有技术相比,具有以下的有益效果:本发明将前缀森林应用到ip索引中,在创建索引时,将IP地址段用CIDR表示法表示,同时引入二叉树和节点概念,在查询IP地址时,同样根据这些二叉树和节点查询目标数据。与传统线性遍历方式相比较,该前缀森林索引方式大大降低了IP索引的复杂度,每次查询的时间复杂度由O(n)降低到了O(1),同时该方式不用表示出完整的IP地址,压缩了索引数据的大小。
附图说明
图1是本发明的逻辑示意图;
图2是本发明的效果示意图。
具体实施方式
下面结合本发明的实施例对本发明作进一步的阐述和说明。
实施例:
图1是本发明的逻辑示意图,如图所示本发明主要分为创建索引和查询IP:
创建索引时,将IP地址段用CIDR表示法表示,按前16位分别添加到65536棵二叉trie树中的某一棵,对后面在掩码范围内的每一位添加一个0或1的子节点,最后添加的一个子节点成为叶子节点,存储着到达这一叶子节点的最短路径所代表的IP地址段所索引的数据块的位置。
查询IP地址时,由前16位的值直接定位到一棵二叉trie树,根据IP地址后面的每一位沿二叉trie树走到叶子节点,取到叶子节点中索引的位置,按此位置查询到目标数据,图中粗箭头指出了在这个数据库中4.30.255.13这个IP地址的查询过程。
下面以4.30.255.13这个IP地址为例具体说明:
创建索引:将IP地址段用CIDR表示法表示,按前16位分别添加到65536棵二叉trie树中的某一棵,对后面在掩码范围内的每一位添加一个0或1的子节点,最后添加的一个子节点成为叶子节点,存储着到达这一叶子节点的最短路径所代表的IP地址段所索引的数据块的位置。
查找过程:由前16位4.30先定位到某个二叉trie树,再根据后16位255.13地址后面的每一位沿二叉trie树走到叶子节点,取到叶子节点中索引的位置,按此位置查询到目标数据。
图2是本发明的效果示意图,该图表示了16.8万条地理信息的数据库中线性遍历和前缀森林性能的对比,由图可见,本发明技术方案带来的效果显而易见,以前缀森林索引IP地址段,每次查询的时间复杂度由O(n)降低到了O(1),压缩了索引数据的大小。
Trie树又叫前缀树,Trie树有两种实现,一种是是二十六叉树方式实现;另一种是二叉树方式实现,就是将一个节点的第一个儿子放在左儿子的位置,下一个儿子,即左儿子的第一个兄弟,放在左儿子的右儿子位置上,再下一个兄弟接着放在右儿子的右儿子的位置。本发明将前缀森林应用到ip索引中,在创建索引时,将IP地址段用CIDR表示法表示,同时引入二叉树和节点概念,在查询IP地址时,同样根据这些二叉树和节点查询目标数据。从IP地址段的CIDR表示法中暗含的前缀表达思想中,我们可以看到二叉trie树在IP地址段索引中应用的可能:IP地址的位数固定为32,因此查询一个IP地址所需要的读取次数被限制在32次以内,时间复杂度为常数,与数据库的增长无关;二叉trie树的每一层都是IP地址的某一位,用一个位的空间即可表达,不用存下完整的32位IP地址,这会节省大量的存储空间。另外,经过统计,一份16万段的IP地理数据库中,多达94%的IP地址段在用CIDR表示法表示时其掩码的位数大于16。在类似场景里,可以使用与现有技术相同的16位二级索引,索引到一个由65536棵二叉trie树构造的前缀森林中。综上所述,与传统线性遍历方式相比较,该前缀森林索引方式大大降低了IP索引的复杂度,每次查询的时间复杂度由O(n)降低到了O(1),同时该方式不用表示出完整的IP地址,压缩了索引数据的大小。
可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。
Claims (1)
1.基于前缀森林的ip索引方法,其特征在于,包括如下步骤:
步骤一:创建索引;
将IP地址段用CIDR表示法表示,按前16位分别添加到65536棵二叉trie树中的某一棵,对后面在掩码范围内的每一位添加一个0或1的子节点,最后添加的一个子节点成为叶子节点,存储着到达这一叶子节点的最短路径所代表的IP地址段所索引的数据块的位置;
步骤二:查询IP地址;
由前16位的值直接定位到一棵二叉trie树,根据IP地址后面的每一位沿二叉trie树走到叶子节点,取到叶子节点中索引的位置,按此位置查询到目标数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710284679.5A CN107169054A (zh) | 2017-04-26 | 2017-04-26 | 基于前缀森林的ip索引方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710284679.5A CN107169054A (zh) | 2017-04-26 | 2017-04-26 | 基于前缀森林的ip索引方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107169054A true CN107169054A (zh) | 2017-09-15 |
Family
ID=59813084
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710284679.5A Pending CN107169054A (zh) | 2017-04-26 | 2017-04-26 | 基于前缀森林的ip索引方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107169054A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107707477A (zh) * | 2017-09-28 | 2018-02-16 | 杭州迪普科技股份有限公司 | 报文的处理方法及装置、计算机可读存储介质 |
CN109101566A (zh) * | 2018-07-17 | 2018-12-28 | 杭州安恒信息技术股份有限公司 | 一种对数据库信息进行动态掩码的方法及系统 |
CN110245330A (zh) * | 2018-03-09 | 2019-09-17 | 腾讯科技(深圳)有限公司 | 字符序列匹配方法、实现匹配的预处理方法和装置 |
CN110855812A (zh) * | 2019-11-28 | 2020-02-28 | 中国银行股份有限公司 | 基于ip地址的定位方法、装置和设备 |
CN113286013A (zh) * | 2021-05-19 | 2021-08-20 | 苏州瑞立思科技有限公司 | 一种子网匹配方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1434950A (zh) * | 1999-12-10 | 2003-08-06 | 睦塞德技术公司 | 最长匹配地址查询的方法和装置 |
CN102571599A (zh) * | 2012-02-08 | 2012-07-11 | 福建三元达通讯股份有限公司 | 一种路由表项的快速存储方法 |
CN103561133A (zh) * | 2013-11-19 | 2014-02-05 | 中国科学院计算机网络信息中心 | 一种ip地址归属信息索引方法及快速查询方法 |
CN105516393A (zh) * | 2015-12-31 | 2016-04-20 | 赛尔网络有限公司 | 一种多阶段多维ip地址分类方法及装置 |
-
2017
- 2017-04-26 CN CN201710284679.5A patent/CN107169054A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1434950A (zh) * | 1999-12-10 | 2003-08-06 | 睦塞德技术公司 | 最长匹配地址查询的方法和装置 |
CN102571599A (zh) * | 2012-02-08 | 2012-07-11 | 福建三元达通讯股份有限公司 | 一种路由表项的快速存储方法 |
CN103561133A (zh) * | 2013-11-19 | 2014-02-05 | 中国科学院计算机网络信息中心 | 一种ip地址归属信息索引方法及快速查询方法 |
CN105516393A (zh) * | 2015-12-31 | 2016-04-20 | 赛尔网络有限公司 | 一种多阶段多维ip地址分类方法及装置 |
Non-Patent Citations (1)
Title |
---|
张晓波: "路由查找算法的研究及其FPGA实现", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107707477A (zh) * | 2017-09-28 | 2018-02-16 | 杭州迪普科技股份有限公司 | 报文的处理方法及装置、计算机可读存储介质 |
CN110245330A (zh) * | 2018-03-09 | 2019-09-17 | 腾讯科技(深圳)有限公司 | 字符序列匹配方法、实现匹配的预处理方法和装置 |
CN110245330B (zh) * | 2018-03-09 | 2023-07-07 | 腾讯科技(深圳)有限公司 | 字符序列匹配方法、实现匹配的预处理方法和装置 |
CN109101566A (zh) * | 2018-07-17 | 2018-12-28 | 杭州安恒信息技术股份有限公司 | 一种对数据库信息进行动态掩码的方法及系统 |
CN109101566B (zh) * | 2018-07-17 | 2021-09-10 | 杭州安恒信息技术股份有限公司 | 一种对数据库信息进行动态掩码的方法及系统 |
CN110855812A (zh) * | 2019-11-28 | 2020-02-28 | 中国银行股份有限公司 | 基于ip地址的定位方法、装置和设备 |
CN110855812B (zh) * | 2019-11-28 | 2022-05-27 | 中国银行股份有限公司 | 基于ip地址的定位方法、装置和设备 |
CN113286013A (zh) * | 2021-05-19 | 2021-08-20 | 苏州瑞立思科技有限公司 | 一种子网匹配方法和装置 |
CN113286013B (zh) * | 2021-05-19 | 2023-11-07 | 苏州瑞立思科技有限公司 | 一种子网匹配方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107169054A (zh) | 基于前缀森林的ip索引方法 | |
CN103561133B (zh) | 一种ip地址归属信息索引方法及快速查询方法 | |
KR100441317B1 (ko) | 데이터 패킷 분류 방법 및 장치 | |
US9269411B2 (en) | Organizing data in a hybrid memory for search operations | |
US9330116B2 (en) | Determining hierarchical paths to nodes | |
US8352502B2 (en) | Structure based storage, query, update and transfer of tree-based documents | |
CN104243315B (zh) | 用于唯一枚举解析树中的路径的装置和方法 | |
US20150278268A1 (en) | Data encoding and corresponding data structure | |
CN102405623B (zh) | 路由表项的存储方法和装置 | |
EP2772040B1 (en) | Prefix and predictive search in a distributed hash table | |
CN105677683A (zh) | 批量数据查询方法和装置 | |
CN103246857B (zh) | 一种使用形式化解码规则解析异构编码获得物品信息的方法 | |
CN106777163A (zh) | 基于红黑树的ip地址所属地查询方法及系统 | |
CN102148746A (zh) | 一种报文分类方法和系统 | |
CN104573022A (zh) | 一种HBase的数据查询方法及装置 | |
US10616113B2 (en) | Longest prefix match using a binary search tree with compressed hash tables | |
CN111988231B (zh) | 一种掩码五元组规则匹配的方法及装置 | |
CN104778258A (zh) | 一种面向协议数据流的数据抽取方法 | |
CN103188267B (zh) | 一种基于dfa的协议解析方法 | |
CN105515997B (zh) | 基于bf_tcam实现零范围扩张的高效范围匹配方法 | |
WO2014047863A1 (en) | Generating a shape graph for a routing table | |
CN103123638B (zh) | 数据搜索方法和装置 | |
CN112256821B (zh) | 中文地址补全的方法、装置、设备及存储介质 | |
CN104462144A (zh) | 一种包分类规则的查找方法及装置 | |
CN110020272A (zh) | 缓存方法、装置以及计算机存储介质 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170915 |
|
RJ01 | Rejection of invention patent application after publication |