CN105512229B - 一种ip地址的地域信息的存储、查询方法及装置 - Google Patents
一种ip地址的地域信息的存储、查询方法及装置 Download PDFInfo
- Publication number
- CN105512229B CN105512229B CN201510857658.9A CN201510857658A CN105512229B CN 105512229 B CN105512229 B CN 105512229B CN 201510857658 A CN201510857658 A CN 201510857658A CN 105512229 B CN105512229 B CN 105512229B
- Authority
- CN
- China
- Prior art keywords
- address
- subsegment
- section
- stored
- regional information
- 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
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例提供的一种IP地址的地域信息的存储、查询方法及装置,存储方法包括:将获得的IP地址值划分成N个子段;或将获得的IP地址段的首末地址分别划分成N个子段;存储IP地址值的地域信息的过程:将各个子段的数字存储至多叉树的根节点及子节点的不同元素中,并在最末层子节点的元素中存储IP地址值的地域信息;存储IP地址段的地域信息的过程:将首末地址的N个子段的数字进行比较,将IP地址段拆分出1段或多段连续IP地址段;依次将各个子段的数字存储至多叉树的根节点及子节点的不同元素中,在每个存储连续数字的子节点的元素中存储IP地址值的地域信息。应用本发明实施例,减少了存储IP地址的地域信息所占用的存储空间。
Description
技术领域
本发明涉及通信技术领域,特别是涉及一种IP地址的地域信息的存储、查询方法及装置。
背景技术
为了定位IP地址对应的地域信息,现有技术中,会存储每个IP地址与地域信息的对应关系,如存储IP地址1与地域信息1的对应关系、IP地址2与地域信息2的对应关系等。基于此对应关系,可以直接定位到IP地址对应的地域信息。但是,上述存储方式会占用大量存储空间,只适用于存储性能极高的场景。
例如,由于IPv4地址共包含32位,IPv4地址的组合会包含232(约40亿)个,因此需要存储40亿个IPv4地址与地域信息的对应关系,若每个IPv4地址与地域信息的对应关系占用3个字节,则40亿个对应关系将占用约12G(40亿*3字节)的存储空间,这些对应关系占用了巨大的存储空间。对于IPv6地址,由于IPv6地址共包含64位,因此IPv6地址占用的存储空间更大。
发明内容
本发明实施例的目的在于提供一种IP地址的地域信息的存储、查询方法及装置,以减少在存储IP地址的地域信息时占用的存储空间。
为达到上述目的,本发明实施例公开了一种IP地址的地域信息的存储方法,所述方法包括:
从导入的数据源中,获得携带有地域信息的IP地址值或IP地址段;
按照预设的分段规则,将获得的IP地址值划分成N个子段;或将获得的所述IP地址段的首地址和末地址分别划分成N个子段,其中,N为大于1的正整数;
对IP地址值的地域信息的存储过程,包括:按照各个子段的前后顺序,依次将各个子段的数字分别存储至用于存储IP地址地域信息的多叉树的根节点及子节点的不同元素中,并在最末层子节点的元素中存储所述IP地址值的地域信息;
对IP地址段的地域信息的存储过程,包括:
将首地址和末地址的N个子段的数字分别进行比较,根据比较结果、IP地址的分配规则和子段的分段规则,将IP地址段拆分出1段或多段连续IP地址段;其中每段连续IP地址段中至少有一个子段是连续数字;
对于每段连续IP地址段,按照各子段的前后顺序关系,依次将各个子段的数字存储至所述多叉树的根节点及子节点的不同元素中,并在每个存储所述连续数字的子节点的元素中存储所述IP地址值的地域信息;
其中,根节点内部不同元素中存储的子段的数字不相同,且每个子节点内部不同元素中存储的子段的数字不相同。
较佳的,所述的IP地址值或IP地址段为ipv4地址值或ipv4地址段;
所述按照预设的分段规则,将获得的IP地址值划分成N个子段;或将获得所述IP地址段的首地址和末地址分别划分成N个子段,包括:
按照ipv4地址的格式,将获得的IP地址值划分成4个子段;或将获得所述IP地址段的首地址和末地址分别划分成4个子段;
或,
所述的IP地址值或IP地址段为ipv6地址值或ipv6地址段;
所述按照预设的分段规则,将获得的IP地址值划分成N个子段;或将获得所述IP地址段的首地址和末地址分别划分成N个子段,包括:
按照ipv6地址的格式,将获得的IP地址值划分成8个子段;或将获得所述IP地址段的首地址和末地址分别划分成8个子段。
较佳的,所述对IP地址值的地域信息的存储过程,具体包括:
按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的第一元素中;
存储子节点元素,包括:当i>1时,将获得的第i个子段至第N个子段的数字,分别存储至所述多叉树的第i-1层子节点的元素中,并在存储第N个子段的数字的元素中,存储所述IP地址值的地域信息。
较佳的,对IP地址段的地域信息的存储过程,具体包括:
将首地址和末地址进行比较,获得首地址和末地址数字不同的子段中,第1个子段的序号M;1<M≤N;
当M=N时:
将IP地址段拆分为1段连续IP地址段,该连续IP地址段中第N个子段是连续数字;
对拆分出的连续IP地址段,按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的元素中;
存储子节点元素,包括:当i>1时,将获得的第i个子段至第M-1个子段的数字,分别存储至所述多叉树的第i-1层子节点的元素中;在存储所述第M-1个子段的数字的元素的下一层子节点中,存储所述的连续数字作为一个元素;并在该元素中存储所述IP地址段的地域信息;
当M≠N时:
确定第M至第N个子段,均具有连续数字;
根据IP地址的分配规则和子段的分段规则,将IP地址拆分出多段连续IP地址段;拆分出的每段连续IP地址段中至少有一个子段是连续数字;
对拆分出的每个连续IP地址段,分别执行:
按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的第一元素中;
存储子节点元素,包括:当i>1时,判断第i子段是否为连续数字,如果是,则将该连续数字存储至所述多叉树的第i-1层子节点的元素中,并在该元素中存储所述IP地址段的地域信息;如果否,则将该数字存储至所述多叉树的第i-1层子节点的元素中,令i=i+1,返回执行本步骤。
较佳的,所述多叉树中的每个节点的数据结构为以下数据存储结构中的一种:
数组存储结构,适用于多叉树中的根节点及子节点;
散列存储结构,适用于多叉树中的根节点及子节点;
间隔存储结构,适用于多叉树中的最末层子节点;
单点存储结构,适用于多叉树中的最末层子节点。
较佳的,所述按照各个子段的前后顺序,依次将各个子段的数字分别存储至用于存储IP地址地域信息的多叉树的根节点及子节点的不同元素中,并在最末层子节点的元素中存储所述IP地址值的地域信息,包括:
针对根节点及子节点:以散列存储结构存储所述各个子段的数字,当满足时,将散列存储结构的类型转换为数组存储结构;其中,si为每个子节点中当前已存储的元素数,mi为每个子段的数字的取值范围的上限值;
针对最末层子节点:以间隔存储结构存储所述各个子段的数字,当满足时,将间隔存储结构的类型转换为数组存储结构;当数组存储结构中存储的元素占满该节点存储空间时,将数组存储结构转换为单点存储结构。
为达到上述目的,本发明实施例公开了一种IP地址的地域信息的查询方法,用于查询按照权利要求1存储的IP地址的地域信息,包括:
获得待查询的IP地址值或IP地址段;
按照预设的分段规则,将待查询的IP地址值划分成N个子段,每个子段具有一个单独数字;或将获得所述IP地址段划分成N个子段,其中至少一个子段具有连续数字;
获得每个子段的单个数字或连续数字;
从第一个子段开始,在所述多叉树对应的子节点中,查找存储了与该子段的单个数字或连续数字相同的元素,并判断该元素中是否存储了地域信息;当判断出该元素中存储有地域信息时,将该地域信息确定为查询结果。
为达到上述目的,本发明实施例公开了一种IP地址的地域信息的存储装置,所述装置包括:
IP地址获得模块,用于从导入的数据源中,获得携带有地域信息的IP地址值或IP地址段;
第一IP地址划分模块,用于按照预设的分段规则,将获得的IP地址值划分成N个子段;或将获得的所述IP地址段的首地址和末地址分别划分成N个子段,其中,N为大于1的正整数;
第一地域信息存储模块,用于按照各个子段的前后顺序,依次将各个子段的数字分别存储至用于存储IP地址地域信息的多叉树的根节点及子节点的不同元素中,并在最末层子节点的元素中存储所述IP地址值的地域信息;
第二地域信息存储模块,用于将首地址和末地址的N个子段的数字分别进行比较,根据比较结果、IP地址的分配规则和子段的分段规则,将IP地址段拆分出1段或多段连续IP地址段;其中每段连续IP地址段中至少有一个子段是连续数字;用于对于每段连续IP地址段,按照各子段的前后顺序关系,依次将各个子段的数字存储至所述多叉树的根节点及子节点的不同元素中,并在每个存储所述连续数字的子节点的元素中存储所述IP地址值的地域信息;其中,根节点内部不同元素中存储的子段的数字不相同,且每个子节点内部不同元素中存储的子段的数字不相同。
较佳的,所述第一IP地址划分模块,包括:第一划分子模块和第二划分子模块;其中,
所述第一划分子模块,用于在所述的IP地址值或IP地址段为ipv4地址值或ipv4地址段时,按照ipv4地址的格式,将获得的IP地址值划分成4个子段;或将获得所述IP地址段的首地址和末地址分别划分成4个子段;
所述第二划分子模块,用于在所述的IP地址值或IP地址段为ipv6地址值或ipv6地址段时,按照ipv6地址的格式,将获得的IP地址值划分成8个子段;或将获得所述IP地址段的首地址和末地址分别划分成8个子段。
较佳的,所述第一地域信息存储模块,包括:数字获得子模块、第一根节点存储子模块和第一子节点存储子模块;其中,
所述数字获得子模块,用于按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
所述第一根节点存储子模块,用于存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的第一元素中;
所述第一子节点存储子模块,用于存储子节点元素,包括:当i>1时,将获得的第i个子段至第N个子段的数字,分别存储至所述多叉树的第i-1层子节点的元素中,并在存储第N个子段的数字的元素中,存储所述IP地址值的地域信息。
较佳的,所述第二地域信息存储模块,包括:序号获得子模块、第一拆分子模块、第一数字获得子模块、第二根节点存储子模块、第二子节点存储子模块、第二拆分子模块、第二数字获得子模块、第三根节点存储子模块和第三子节点存储子模块;其中,
所述序号获得子模块,用于将首地址和末地址进行比较,获得首地址和末地址数字不同的子段中,第1个子段的序号M;1<M≤N;
所述第一拆分子模块,用于当M=N时将IP地址段拆分为1段连续IP地址段,该连续IP地址段中第N个子段是连续数字;
所述第一数字获得子模块,用于对拆分出的连续IP地址段,按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
所述第二根节点存储子模块,用于存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的元素中;
所述第二子节点存储子模块,用于存储子节点元素,包括:当i>1时,将获得的第i个子段至第M-1个子段的数字,分别存储至所述多叉树的第i-1层子节点的元素中;在存储所述第M-1个子段的数字的元素的下一层子节点中,存储所述的连续数字作为一个元素;并在该元素中存储所述IP地址段的地域信息;
所述第二拆分子模块,用于当M≠N时,确定第M至第N个子段,均具有连续数字;用于根据IP地址的分配规则和子段的分段规则,将IP地址拆分出多段连续IP地址段;拆分出的每段连续IP地址段中至少有一个子段是连续数字;
所述第二数字获得子模块,用于对拆分出的每个连续IP地址段,分别按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
所述第三根节点存储子模块,用于存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的第一元素中;
所述第三子节点存储子模块,用于存储子节点元素,包括:当i>1时,判断第i子段是否为连续数字,如果是,则将该连续数字存储至所述多叉树的第i-1层子节点的元素中,并在该元素中存储所述IP地址段的地域信息;如果否,则将该数字存储至所述多叉树的第i-1层子节点的元素中,令i=i+1,返回执行本步骤。
较佳的,所述多叉树中的每个节点的数据结构为以下数据存储结构中的一种:
数组存储结构,适用于多叉树中的根节点及子节点;
散列存储结构,适用于多叉树中的根节点及子节点;
间隔存储结构,适用于多叉树中的最末层子节点;
单点存储结构,适用于多叉树中的最末层子节点。
较佳的,所述第一地域信息存储模块,
针对根节点及子节点:用于以散列存储结构存储所述各个子段的数字,当满足时,将散列存储结构的类型转换为数组存储结构;其中,si为每个子节点中当前已存储的元素数,mi为每个子段的数字的取值范围的上限值;
针对最末层子节点:用于以间隔存储结构存储所述各个子段的数字,当满足时,将间隔存储结构的类型转换为数组存储结构;当数组存储结构中存储的元素占满该节点存储空间时,将数组存储结构转换为单点存储结构。
为达到上述目的,本发明实施例公开了一种IP地址的地域信息的查询装置,用于查询按照权利要求1存储的IP地址的地域信息,包括:
IP地址查询模块,用于获得待查询的IP地址值或IP地址段;
第二IP地址划分模块,用于按照预设的分段规则,将待查询的IP地址值划分成N个子段,每个子段具有一个单独数字;或将获得所述IP地址段划分成N个子段,其中至少一个子段具有连续数字;
数字获得模块,用于获得每个子段的单个数字或连续数字;
地域信息查询模块,用于从第一个子段开始,在所述多叉树对应的子节点中,查找存储了与该子段的单个数字或连续数字相同的元素,并判断该元素中是否存储了地域信息;当判断出该元素中存储有地域信息时,将该地域信息确定为查询结果。
本发明实施例提供的一种IP地址的地域信息的存储、查询方法及装置,该方法包括:首先从导入的数据源中,获得携带有地域信息的IP地址值或IP地址段;然后将获得的IP地址值划分成N个子段,或将获得的IP地址段的首地址和末地址分别划分成N个子段;其中,存储IP地址值的地域信息的过程,包括:按照各个子段的前后顺序,依次将各个子段的数字存储至多叉树的根节点及子节点的不同元素中,并在最末层子节点的元素中存储IP地址值的地域信息;其中,存储IP地址段的地域信息的过程,包括:将首地址和末地址的N个子段的数字进行比较,根据比较结果、IP地址的分配规则和子段的分段规则,将IP地址段拆分出1段或多段连续IP地址段;依次将各个子段的数字存储至多叉树的根节点及子节点的不同元素中,在每个存储连续数字的子节点的元素中存储IP地址值的地域信息。显然,应用本发明实施例,在对IP地址值或IP地址段的地域信息进行存储的过程中,并不是一个IP地址值存储一个地域信息,而是采用了多叉树的数据存储结构,因此,减少了存储IP地址的地域信息所占用的存储空间。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种IP地址的地域信息的存储方法的流程示意图;
图1a为存储IP地址值的地域信息的一种存储结果;
图1b为存储IP地址段的地域信息的一种存储结果;
图1c为存储IP地址段的地域信息的另一种存储结果;
图1d为存储IP地址段的地域信息的另一种存储结果;
图1e为存储IP地址段的地域信息的另一种存储结果;
图1f为存储IP地址段的地域信息的另一种存储结果;
图2为本发明实施例提供的一种IP地址的地域信息的存储方法的流程示意图;
图3为本发明实施例提供的一种IP地址的地域信息的存储装置的结构示意图;
图4为本发明实施例提供的一种IP地址的地域信息的查询装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种IP地址的地域信息的存储方法的流程示意图,该存储方法可以包括以下步骤:
步骤S101:从导入的数据源中,获得携带有地域信息的IP地址值或IP地址段。
需要说明的是,这里提及的“数据源”可以是文件形式的数据源,还可以是数据流形式的数据源。从导入的数据源中获得的IP地址可以是IP地址值,也可以是IP地址段,不论是IP地址值还是IP地址段均携带有一个与之对应的地域信息,实际应用中,本领域内的技术人员可以通过对IP地址的统计来获得某一地域内用户对于某类应用的使用程度,等等。
具体的,上述提及的“IP地址值或IP地址段”可以包括以下两种情况:(1)ipv4地址值或ipv4地址段;(2)ipv6地址值或ipv6地址段。需要说明的是,本发明并不需要对“IP地址值或IP地址段”的具体情况进行限定。
步骤S102:按照预设的分段规则,将获得的IP地址值划分成N个子段;或将获得的IP地址段的首地址和末地址分别划分成N个子段,其中,N为大于1的正整数。
实际应用中不难发现,对于具有同一地域信息的多个不同IP地址而言,IP地址往往是比较相似的,例如:192.168.1.1与192.168.1.2对应的地域信息均可以为北京地区。假如按照现有技术中的方案存储的话,则需要建立各个IP地址与地域信息的对应关系,如:192.168.1.1→北京、192.168.1.2→北京,然后再存储该对应关系。由于IPv4地址共包含32位,IPv4地址的组合会包含232(约40亿)个,因此需要存储40亿个IPv4地址与地域信息的对应关系,若每个IPv4地址与地域信息的对应关系占用3个字节,则40亿个对应关系将占用约12G(40亿*3字节)的存储空间,这些对应关系占用了巨大的存储空间。
基于以上情况,本发明实施例提供的方案需要将“IP地址值或IP地址段”进行分段处理,以求降低存储IP地址与其对应的地域信息时所占用的存储空间。具体的,当“IP地址值或IP地址段”为ipv4地址值或ipv4地址段的情况下,按照ipv4地址的格式,将获得的IP地址值划分成4个子段;或将获得IP地址段的首地址和末地址分别划分成4个子段。当“IP地址值或IP地址段”为ipv6地址值或ipv6地址段的情况下,按照ipv6地址的格式,将获得的IP地址值划分成8个子段;或将获得IP地址段的首地址和末地址分别划分成8个子段。
针对ipv4地址值的情况,例如,192.168.1.2,可以将该IP地址值划分成4段,即:192、168、1和2;针对ipv4地址段的情况,例如,192.168.1.2至192.168.1.248,可以将该IP地址段的首地址和末地址分别划分成4段,即:(192、168、1、2)和(192、168、1、248)。需要说明的是,该IP地址段中包含的各个IP地址值所对应的地域信息为同一个,因此,在进行IP地址段的地域信息的存储时,仅需要获取该IP地址段中的首地址和末地址并分别划分成N个IP地址子段。
还需要说明的是,上述实现方式仅仅是本发明众多实现方式中的两种具体情况,本发明实施例不需要对IP地址值或IP地址段划分子段的方式进行限定。进一步的,上述提及的仅仅是按照IP地址值或IP地址段的二进制表示时的位数或长度均分的情况,当然,还可以按照预设的分段规则进行不均匀的划分,本领域内的技术人员需要根据实际应用中的具体情况进行合理的设置。
步骤S103:按照各个子段的前后顺序,依次将各个子段的数字分别存储至用于存储IP地址地域信息的多叉树的根节点及子节点的不同元素中,并在最末层子节点的元素中存储IP地址值的地域信息。
这里提及的多叉树为一种针对数据库中的数据的层次存储结构,采用这种存储结构可以有效的降低数据库中的数据所占用的存储空间。一般的,多叉树中包括最高层的根节点、处于中间层的子节点以及处于最末层的子节点。进一步的,在多叉树的根节点或子节点中均可以存储多个元素,其中,每个元素中可以是一个子段的数字或是一个子段的连续数字,还可以是IP地址值或IP地址段的地域信息。
在本发明的一种具体实现方式中,对IP地址值的地域信息的存储过程,可以包括以下步骤:
(1)按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数。
(2)存储根节点元素,可以包括:当i=1时,将获得的第一个子段的数字存储至多叉树的根节点的第一元素中。
(3)存储子节点元素,可以包括:当i>1时,将获得的第i个子段至第N个子段的数字,分别存储至多叉树的第i-1层子节点的元素中,并在存储第N个子段的数字的元素中,存储IP地址值的地域信息。
下面结合详细描述下对IP地址值的地域信息的存储过程:
(一)对IP地址值,存储根节点元素的步骤,具体可以包括:
A、获得第一个子段的数字,判断多叉树的根节点的元素中,是否存储有第一个子段的数字的第一元素;
如果是,则判断第一元素是否有下一层子节点,如果有,则执行存储子节点的步骤B,如果没有,则为第一元素创建下一层子节点后,执行存储子节点元素的步骤B;
如果否,则在根节点中保存第一个子段的数字作为第一元素,并为第一元素创建下一层子节点,执行存储子节点元素的步骤B。
(二)存储子节点元素的步骤,具体可以包括:
B、设置j=i+1;
获得第j个子段的数字,判断j是否等于N,如果j=N,则在第i元素的下一层子节点中保存第j个子段的数字作为第j元素,并在第j元素中存储IP地址值的地域信息,完成本次存储;
如果j≠N,则判断第i元素的下一层子节点中,是否存储有第j个子段的数字的第j元素;
如果是,则判断第j元素是否有下一层子节点;如果有,则设i=j,返回执行步骤B;如果没有,则设i=j,为第i元素创建下一层子节点后,返回执行步骤B;
如果否,则在第i元素的下一层子节点中保存第j数字作为第j元素,并设i=j,为第i元素创建下一层子节点;返回执行步骤B。
为了能够更清楚的理解上述对IP地址值的存储过程,下面结合具体实例进行下详细描述。
例如,待存储的IP地址值为:192.168.1.2,其携带的地域信息为X;且按照预设的分段规则将该IP地址值划分为(192、168、1、2)四个子段。
首先存储根节点元素,获得该IP地址值的第一个子段的数字192,若多叉树的根节点的元素中没有存储该元素,则在根节点中保存第一个子段的数字192作为第一元素,并为第一元素创建下一层子节点。
然后存储子节点元素,获得第2个子段的数字168,由于此时j=2,N=4,显然j≠N,若第一元素192的下一层子节点中未存储第2子段的数字的第二元素168,则在第一元素的下一层子节点中保存第二数字168作为第二元素,并为第二元素168创建下一层子节点;
继续获得第3子段的数字1,由于此时j=3,N=4,显然j≠N,若第二元素168的下一层子节点中未存储第3子段的数字的第三元素1,则在第二元素的下一层子节点中保存第三数字1作为第三元素,并为第三元素1创建下一层子节点;
继续获得第4子段的数字2,由于此时j=4,N=4,显然j=N,若第三元素1的下一层子节点中未存储第4子段的数字的第四元素2,则在第三元素的下一层子节点中保存第四数字2作为第四元素,并在第四元素中存储IP地址值的地域信息,完成本次存储,存储结果参见图1a。
在本发明的一种具体实现方式中,多叉树中的每个节点的数据结构可以为以下数据存储结构中的一种:
(1)数组存储结构,适用于多叉树中的根节点及子节点;
(2)散列存储结构,适用于多叉树中的根节点及子节点;
(3)间隔存储结构,适用于多叉树中的最末层子节点;
(4)单点存储结构,适用于多叉树中的最末层子节点。
需要说明的是,上述提及的节点的四种数据结构仅仅是举例而已,本发明不需要对各个节点的数据结构进行限定,本领域内的技术人员需要根据实际应用中的具体情况进行合理的设置。
还需要说明的是,对于多叉树中各个节点的数据结构在满足一定条件的情况是可以转换为其他类型的数据结构的,具体如下:
针对根节点及子节点:以散列存储结构存储各个子段的数字,当满足时,将散列存储结构的类型转换为数组存储结构;其中,si为每个子节点中当前已存储的元素数,mi为每个子段的数字的取值范围的上限值;
针对最末层子节点:以间隔存储结构存储各个子段的数字,当满足时,将间隔存储结构的类型转换为数组存储结构;当数组存储结构中存储的元素占满该节点存储空间时,将数组存储结构转换为单点存储结构。
容易理解的,允许数据结构转换成其他类型的数据结构,可以使得存储这些IP地址及其地域信息所占用的存储空间能够尽可能的小。例如,对于多叉树中的一个节点而言,当其存储的元素比较稀疏时,采用散列存储结构存储各个子段要比采用数组存储结构所占用的存储空间要小。
同样的,对于多叉树中的最末层子节点而言,当其存储的元素跨度比较大时,可以采用间隔存储结构代替数组存储结构以节省存储空间,存储各个子段的数字时仅需要存储该间隔的起始数字和结束数字即可,例如,(0-127)、(192-255)为两个间隔存储结构中的两个间隔;当存储的数字满足条件时,将间隔存储结构转换为数组存储结构,并且当数组存储结构中存储的元素占满该节点存储空间时,将数组存储结构转换为单点存储结构。
步骤S104:将首地址和末地址的N个子段的数字分别进行比较,根据比较结果、IP地址的分配规则和子段的分段规则,将IP地址段拆分出1段或多段连续IP地址段;其中每段连续IP地址段中至少有一个子段是连续数字;对于每段连续IP地址段,按照各子段的前后顺序关系,依次将各个子段的数字存储至多叉树的根节点及子节点的不同元素中,并在每个存储连续数字的子节点的元素中存储IP地址值的地域信息。
其中,根节点内部不同元素中存储的子段的数字不相同,且每个子节点内部不同元素中存储的子段的数字不相同。
在本发明的一种具体实现方式中,对IP地址段的地域信息的存储过程,具体可以包括以下步骤:
(1)将首地址和末地址进行比较,获得首地址和末地址数字不同的子段中,第1个子段的序号M;1<M≤N。
(2)当M=N时:
1)将IP地址段拆分为1段连续IP地址段,该连续IP地址段中第N个子段是连续数字;
2)对拆分出的连续IP地址段,按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
3)存储根节点元素,可以包括:当i=1时,将获得的第一个子段的数字存储至多叉树的根节点的元素中;
4)存储子节点元素,可以包括:当i>1时,将获得的第i个子段至第M-1个子段的数字,分别存储至多叉树的第i-1层子节点的元素中;在存储第M-1个子段的数字的元素的下一层子节点中,存储的连续数字作为一个元素;并在该元素中存储IP地址段的地域信息。
具体的对IP地址段,存储根节点元素的步骤,具体可以包括:
获得首地址第一个子段的数字,判断用于存储IP地址的多叉树的根节点的元素中,是否存储有首地址第一个子段的数字的第一元素;
如果是,则判断第一元素是否有下一层子节点,如果有,则执行步骤存储子节点的步骤4),如果没有,则为第一元素创建下一层子节点后,执行存储子节点的步骤4);
如果否,则在根节点中保存首地址第一个子段的数字作为第一元素,并为第一元素创建下一层子节点,执行存储子节点的步骤4)。
(3)当M≠N时:
1)确定第M至第N个子段,均具有连续数字;
2)根据IP地址的分配规则和子段的分段规则,将IP地址拆分出多段连续IP地址段;拆分出的每段连续IP地址段中至少有一个子段是连续数字;
对拆分出的每个连续IP地址段,分别执行:
3)按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
4)存储根节点元素,可以包括:当i=1时,将获得的第一个子段的数字存储至多叉树的根节点的第一元素中;
5)存储子节点元素,可以包括:当i>1时,判断第i子段是否为连续数字,如果是,则将该连续数字存储至多叉树的第i-1层子节点的元素中,并在该元素中存储IP地址段的地域信息;如果否,则将该数字存储至多叉树的第i-1层子节点的元素中,令i=i+1,返回执行本步骤。
为了能够更清楚的理解上述对IP地址段的存储过程,下面结合具体实例进行下详细描述。
实例一:
例如,待存储的IP地址段为:5.2.1.10-5.2.1.255,其携带的地域信息为Y。
首先,将首地址和末地址进行比较,获得首地址和末地址数字不同的子段中,第1个子段的序号M=N=4。
然后,将该IP地址段拆分为1段连续IP地址段,且该连续IP地址段中第4个子段是连续数字。
接着,存储根节点元素:将获得的第一个子段的数字5存储至多叉树的根节点的元素中。
最后,存储子节点元素:将获得的第2个子段至第3个子段的数字,分别存储至多叉树的第1层子节点的元素中;在存储第3个子段的数字的元素的下一层子节点中,存储的连续数字(10-255)作为一个元素,并在该元素中存储IP地址段的地域信息Y,存储结果参见图1b。
实例二:
例如,待存储的IP地址段为:(5.1.10.12-5.1.255.255),其携带的地域信息为Y。
首先,将首地址和末地址进行比较,获得首地址和末地址数字不同的子段中,第1个子段的序号M=3,M<N。
然后,根据IP地址的分配规则和子段的分段规则,将IP地址拆分出多段连续IP地址段:(5.1.10.12-5.1.10.255)和(5.1.11.0-5.1.255.255)。
先存储IP地址段(5.1.10.12-5.1.10.255):依次获得各个子段的数字(5、1、10、12-255);将获得第一个子段的数字5存储至多叉树的根节点的第一元素中;判断第2子段不是连续数字,则将第2子段数字存储至多叉树的第1层子节点的元素中,再判断得第3子段仍不是连续数字,则将第3子段数字存储至多叉树的第2层子节点的元素中,再判断得第4子段为连续子段,则将该连续数字存储至多叉树的第3层子节点的元素中,并在该元素中存储IP地址段的地域信息Y。
再存储IP地址段(5.1.11.0-5.1.255.255):依次获得各个子段的数字(5、1、11-255);将获得第一个子段的数字5存储至多叉树的根节点的第一元素中;判断第2子段不是连续数字,则将第2子段数字存储至多叉树的第1层子节点的元素中,再判断得第3子段是连续数字,则将该连续数字存储至多叉树的第2层子节点的元素中,并在该元素中存储IP地址段的地域信息Y,存储结果参见图1c。
实例三:
例如,待存储的IP地址段为:(5.1.10.0-5.1.10.11)和(5.1.10.12-5.1.10.255),前者携带的地域信息为Y1,后者携带的地域信息为Y2。
首先,先存储IP地址段(5.1.10.0-5.1.10.11):
显然,首地址和末地址数字不同的子段中,第1个子段的序号M=4,M=N;将该IP地址段拆分为1段连续IP地址段,且该连续IP地址段中第4个子段是连续数字;存储根节点元素:将获得的第一个子段的数字5存储至多叉树的根节点的元素中;存储子节点元素:将获得的第2个子段至第3个子段的数字,分别存储至多叉树的第1层子节点的元素中;在存储第3个子段的数字的元素的下一层子节点中,存储的连续数字(0-11)作为一个元素,并在该元素中存储IP地址段的地域信息Y1。
然后,再以同样的方式存储IP地址段(5.1.10.12-5.1.10.255):
显然,首地址和末地址数字不同的子段中,第1个子段的序号M=4,M=N;将该IP地址段拆分为1段连续IP地址段,且该连续IP地址段中第4个子段是连续数字;存储根节点元素:将获得的第一个子段的数字5存储至多叉树的根节点的元素中;存储子节点元素:将获得的第2个子段至第3个子段的数字,分别存储至多叉树的第1层子节点的元素中;在存储第3个子段的数字的元素的下一层子节点中,存储的连续数字(12-255)作为一个元素,并在该元素中存储IP地址段的地域信息Y2。
完成对IP地址段(5.1.10.0-5.1.10.11)和(5.1.10.12-5.1.10.255)的存储,存储结果参见图1d。
实例四:
例如,待存储的IP地址段为:(5.1.0.0-5.2.255.255),其携带的地域信息为Y。
首先,将首地址和末地址进行比较,获得首地址和末地址数字不同的子段中,第1个子段的序号M=2,M<N。
根据IP地址的分配规则和子段的分段规则,将IP地址拆分出多段连续IP地址段:(5.1.0.0-5.1.255.255)和(5.2.0.0-5.2.255.255)。
然后,存储拆分得到的IP地址段(5.1.0.0-5.1.255.255):依次获得首地址和末地址中各个子段的数字(5、1、0、0)和(5、1、255、255);将获得第一个子段的数字5存储至多叉树的根节点的第一元素中;判断第2子段不是连续数字,则将第2子段数字1存储至多叉树的第1层子节点的元素中,再判断得第3子段数字为连续子段,则将该连续数字(0-255)存储至多叉树的第2层子节点的元素中,并在该元素中存储IP地址段的地域信息Y。
最后,存储拆分得到的IP地址段(5.2.0.0-5.2.255.255):依次获得首地址和末地址中各个子段的数字(5、2、0、0)和(5、2、255、255);将获得第一个子段的数字5存储至多叉树的根节点的第一元素中;判断第2子段不是连续数字,则将第2子段数字存储至多叉树的第1层子节点的元素中,再判断得第3子段为连续子段,则将该连续数字(0-255)存储至多叉树的第3层子节点的元素中,并在该元素中存储IP地址段的地域信息Y。
由于,该实例中的IP地址段是基于ipv4的,且对其分段是按照其二进制数字的长度均分的,每个子段的位数为8,因此该子段的取值范围为0-28,即(0-255)。因此,可以将地域信息存储至第1层子节点的元素中,即存储至第2子段1和2对应的元素中,存储结果参见图1e。
实例五:
例如,待存储的IP地址段为:(5.1.10.11-5.4.13.15),其携带的地域信息为Y。
首先,将首地址和末地址进行比较,获得首地址和末地址数字不同的子段中,第1个子段的序号M=2,M<N。
根据IP地址的分配规则和子段的分段规则,将IP地址拆分出多段连续IP地址段:(5.1.10.11-5.1.10.255)、(5.1.11.0-5.1.255.255)、(5.2.0.0-5.3.255.255)、(5.4.0.0-5.4.12.255)和(5.4.13.0-5.4.13.15)。
第一步,参照实例一中存储IP地址段(5.2.1.10-5.2.1.255)方法,存储本实例中拆分得到的IP地址段(5.1.10.11-5.1.10.255)和(5.4.13.0-5.4.13.15);
第二步,参照实例二中存储拆分得到的IP地址段(5.1.11.0-5.1.255.255)的方法,存储本实例中拆分得到的IP地址段(5.1.11.0-5.1.255.255)和(5.4.0.0-5.4.12.255);
第三步,参照实例四中存储拆分得到的IP地址段(5.1.0.0-5.2.255.255)的方法,存储本实例中的IP地址段(5.2.0.0-5.3.255.255);存储结果参见图1f。
显然,应用本发明实施例,在对IP地址值或IP地址段的地域信息进行存储的过程中,并不是一个IP地址值存储一个地域信息,而是采用了多叉树的数据存储结构,因此,减少了存储IP地址的地域信息所占用的存储空间。
图2本发明实施例提供的一种IP地址的地域信息的查询方法的流程示意图,用于查询按照权利要求1存储的IP地址的地域信息,该查询方法可以包括以下步骤:
步骤S201:获得待查询的IP地址值或IP地址段。
具体的,上述提及的“IP地址值或IP地址段”可以包括以下两种情况:(1)ipv4地址值或ipv4地址段;(2)ipv6地址值或ipv6地址段。需要说明的是,本发明并不需要对“IP地址值或IP地址段”的具体情况进行限定。
步骤S202:按照预设的分段规则,将待查询的IP地址值划分成N个子段,每个子段具有一个单独数字;或将获得IP地址段划分成N个子段,其中至少一个子段具有连续数字。
针对ipv4地址值的情况,例如,192.168.1.2,可以将该IP地址值划分成4段,即:192、168、1和2;针对ipv4地址段的情况,例如,192.168.1.2至192.168.1.248,可以将该IP地址段的首地址和末地址分别划分成4段,即:(192、168、1、2)和(192、168、1、248)。需要说明的是,该IP地址段中包含的各个IP地址值所对应的地域信息为同一个,因此,在进行IP地址段的地域信息的存储时,仅需要获取该IP地址段中的首地址和末地址并分别划分成N个IP地址子段。
还需要说明的是,上述实现方式仅仅是本发明众多实现方式中的两种具体情况,本发明实施例不需要对IP地址值或IP地址段划分子段的方式进行限定。进一步的,上述提及的仅仅是按照IP地址值或IP地址段的二进制表示时的位数或长度均分的情况,当然,还可以按照预设的分段规则进行不均匀的划分,本领域内的技术人员需要根据实际应用中的具体情况进行合理的设置。
步骤S203:获得每个子段的单个数字或连续数字。
步骤S204:从第一个子段开始,在多叉树对应的子节点中,查找存储了与该子段的单个数字或连续数字相同的元素,并判断该元素中是否存储了地域信息;当判断出该元素中存储有地域信息时,将该地域信息确定为查询结果。
下面仍以图1b为例,对IP地址的地域信息的查询方法进行下说明:
例如,待查询的IP地址值为5.2.1.120。
首先获得该待查询的IP地址值,并将该IP地址值划分成4个子段(5、2、1、120);从第一子段开始,在多叉树的根节点中查找存储了与第1段数字5相同的元素,然后在第1层的子节点中查找存储了与第2段数字2相同的元素,在第2层的子节点中查找存储了与第3段数字相同的元素,直到在第3层的子节点中查找到存储了与第4段数字相同的元素,判断该元素中存储了地域信息Y,则将该地域信息确定为查询结果。
同样的,仍以图1b为例,对IP地址的地域信息的查询方法进行下说明:
例如,待查询的IP地址值为5.2.1.12-5.2.1.200。
首先获得该待查询的IP地址值,并将该IP地址值划分成4个子段(5、2、1、12-200);从第一子段开始,在多叉树的根节点中查找存储了与第1段数字5相同的元素,然后在第1层的子节点中查找存储了与第2段数字2相同的元素,在第2层的子节点中查找存储了与第3段数字相同的元素,直到在第3层的子节点中查找到存储了与第4段连续数字相同的元素,判断该元素中存储了地域信息Y,则将该地域信息确定为查询结果。
显然,应用本发明实施例,在对IP地址值或IP地址段的地域信息进行存储的过程中,并不是一个IP地址值存储一个地域信息,而是采用了多叉树的数据存储结构,因此,减少了存储IP地址的地域信息所占用的存储空间。
图3为本发明实施例提供的一种IP地址的地域信息的存储装置的结构示意图,该装置可以包括:
IP地址获得模块310,用于从导入的数据源中,获得携带有地域信息的IP地址值或IP地址段;
第一IP地址划分模块320,用于按照预设的分段规则,将获得的IP地址值划分成N个子段;或将获得的IP地址段的首地址和末地址分别划分成N个子段,其中,N为大于1的正整数;
第一地域信息存储模块330,用于按照各个子段的前后顺序,依次将各个子段的数字分别存储至用于存储IP地址地域信息的多叉树的根节点及子节点的不同元素中,并在最末层子节点的元素中存储IP地址值的地域信息;
第二地域信息存储模块340,用于将首地址和末地址的N个子段的数字分别进行比较,根据比较结果、IP地址的分配规则和子段的分段规则,将IP地址段拆分出1段或多段连续IP地址段;其中每段连续IP地址段中至少有一个子段是连续数字;用于对于每段连续IP地址段,按照各子段的前后顺序关系,依次将各个子段的数字存储至多叉树的根节点及子节点的不同元素中,并在每个存储连续数字的子节点的元素中存储IP地址值的地域信息;其中,根节点内部不同元素中存储的子段的数字不相同,且每个子节点内部不同元素中存储的子段的数字不相同。
具体的,第一IP地址划分模块320,可以包括:第一划分子模块和第二划分子模块;
其中,第一划分子模块,用于在的IP地址值或IP地址段为ipv4地址值或ipv4地址段时,按照ipv4地址的格式,将获得的IP地址值划分成4个子段;或将获得IP地址段的首地址和末地址分别划分成4个子段;
第二划分子模块,用于在的IP地址值或IP地址段为ipv6地址值或ipv6地址段时,按照ipv4地址的格式,将获得的IP地址值划分成8个子段;或将获得IP地址段的首地址和末地址分别划分成8个子段。
具体的,第一地域信息存储模块330,可以包括:数字获得子模块、第一根节点存储子模块和第一子节点存储子模块;
其中,数字获得子模块,用于按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
第一根节点存储子模块,用于存储根节点元素,可以包括:当i=1时,将获得的第一个子段的数字存储至多叉树的根节点的第一元素中;
第一子节点存储子模块,用于存储子节点元素,可以包括:当i>1时,将获得的第i个子段至第N个子段的数字,分别存储至多叉树的第i-1层子节点的元素中,并在存储第N个子段的数字的元素中,存储IP地址值的地域信息。
具体的,第二地域信息存储模块340,可以包括:序号获得子模块、第一拆分子模块、第一数字获得子模块、第二根节点存储子模块、第二子节点存储子模块、第二拆分子模块、第二数字获得子模块、第三根节点存储子模块和第三子节点存储子模块;
其中,序号获得子模块,用于将首地址和末地址进行比较,获得首地址和末地址数字不同的子段中,第1个子段的序号M;1<M≤N;
第一拆分子模块,用于当M=N时将IP地址段拆分为1段连续IP地址段,该连续IP地址段中第N个子段是连续数字;
第一数字获得子模块,用于对拆分出的连续IP地址段,按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
第二根节点存储子模块,用于存储根节点元素,可以包括:当i=1时,将获得的第一个子段的数字存储至多叉树的根节点的元素中;
第二子节点存储子模块,用于存储子节点元素,可以包括:当i>1时,将获得的第i个子段至第M-1个子段的数字,分别存储至多叉树的第i-1层子节点的元素中;在存储第M-1个子段的数字的元素的下一层子节点中,存储的连续数字作为一个元素;并在该元素中存储IP地址段的地域信息;
第二拆分子模块,用于当M≠N时,确定第M至第N个子段,均具有连续数字;用于根据IP地址的分配规则和子段的分段规则,将IP地址拆分出多段连续IP地址段;拆分出的每段连续IP地址段中至少有一个子段是连续数字;
第二数字获得子模块,用于对拆分出的每个连续IP地址段,分别按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
第三根节点存储子模块,用于存储根节点元素,可以包括:当i=1时,将获得的第一个子段的数字存储至多叉树的根节点的第一元素中;
第三子节点存储子模块,用于存储子节点元素,可以包括:当i>1时,判断第i子段是否为连续数字,如果是,则将该连续数字存储至多叉树的第i-1层子节点的元素中,并在该元素中存储IP地址段的地域信息;如果否,则将该数字存储至多叉树的第i-1层子节点的元素中,令i=i+1,返回执行本步骤。
具体的,多叉树中的每个节点的数据结构为以下数据存储结构中的一种:
数组存储结构,适用于多叉树中的根节点及子节点;
散列存储结构,适用于多叉树中的根节点及子节点;
间隔存储结构,适用于多叉树中的最末层子节点;
单点存储结构,适用于多叉树中的最末层子节点。
具体的,第一地域信息存储模块330:
针对根节点及子节点:用于以散列存储结构存储各个子段的数字,当满足时,将散列存储结构的类型转换为数组存储结构;其中,si为每个子节点中当前已存储的元素数,mi为每个子段的数字的取值范围的上限值;
针对最末层子节点:用于以间隔存储结构存储各个子段的数字,当满足时,将间隔存储结构的类型转换为数组存储结构;当数组存储结构中存储的元素占满该节点存储空间时,将数组存储结构转换为单点存储结构。
显然,应用本发明实施例,在对IP地址值或IP地址段的地域信息进行存储的过程中,并不是一个IP地址值存储一个地域信息,而是采用了多叉树的数据存储结构,因此,减少了存储IP地址的地域信息所占用的存储空间。
图4本发明实施例提供的一种IP地址的地域信息的查询装置的结构示意图,该装置可以包括:
IP地址查询模块410,用于获得待查询的IP地址值或IP地址段;
第二IP地址划分模块420,用于按照预设的分段规则,将待查询的IP地址值划分成N个子段,每个子段具有一个单独数字;或将获得IP地址段划分成N个子段,其中至少一个子段具有连续数字;
数字获得模块430,用于获得每个子段的单个数字或连续数字;
地域信息查询模块440,用于从第一个子段开始,在多叉树对应的子节点中,查找存储了与该子段的单个数字或连续数字相同的元素,并判断该元素中是否存储了地域信息;当判断出该元素中存储有地域信息时,将该地域信息确定为查询结果。
显然,应用本发明实施例,在对IP地址值或IP地址段的地域信息进行存储的过程中,并不是一个IP地址值存储一个地域信息,而是采用了多叉树的数据存储结构,因此,减少了存储IP地址的地域信息所占用的存储空间。
对于系统或装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (14)
1.一种IP地址的地域信息的存储方法,其特征在于,所述方法包括:
从导入的数据源中,获得携带有地域信息的IP地址值或IP地址段;
按照预设的分段规则,将获得的IP地址值划分成N个子段;或将获得的所述IP地址段的首地址和末地址分别划分成N个子段,其中,N为大于1的正整数;
对IP地址值的地域信息的存储过程,包括:按照各个子段的前后顺序,依次将各个子段的数字分别存储至用于存储IP地址地域信息的多叉树的根节点及子节点的不同元素中,并在最末层子节点的元素中存储所述IP地址值的地域信息;
对IP地址段的地域信息的存储过程,包括:
将首地址和末地址的N个子段的数字分别进行比较,根据比较结果、IP地址的分配规则和子段的分段规则,将IP地址段拆分出1段或多段连续IP地址段;其中每段连续IP地址段中至少有一个子段是连续数字;
对于每段连续IP地址段,按照各子段的前后顺序关系,依次将各个子段的数字存储至所述多叉树的根节点及子节点的不同元素中,并在每个存储所述连续数字的子节点的元素中存储所述IP地址值的地域信息;
其中,根节点内部不同元素中存储的子段的数字不相同,且每个子节点内部不同元素中存储的子段的数字不相同。
2.根据权利要求1所述的方法,其特征在于:
所述的IP地址值或IP地址段为ipv4地址值或ipv4地址段;
所述按照预设的分段规则,将获得的IP地址值划分成N个子段;或将获得所述IP地址段的首地址和末地址分别划分成N个子段,包括:
按照ipv4地址的格式,将获得的IP地址值划分成4个子段;或将获得所述IP地址段的首地址和末地址分别划分成4个子段;
或,
所述的IP地址值或IP地址段为ipv6地址值或ipv6地址段;
所述按照预设的分段规则,将获得的IP地址值划分成N个子段;或将获得所述IP地址段的首地址和末地址分别划分成N个子段,包括:
按照ipv6地址的格式,将获得的IP地址值划分成8个子段;或将获得所述IP地址段的首地址和末地址分别划分成8个子段。
3.根据权利要求1所述的方法,其特征在于,所述对IP地址值的地域信息的存储过程,具体包括:
按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的第一元素中;
存储子节点元素,包括:当i>1时,将获得的第i个子段至第N个子段的数字,分别存储至所述多叉树的第i-1层子节点的元素中,并在存储第N个子段的数字的元素中,存储所述IP地址值的地域信息。
4.根据权利要求1所述的方法,其特征在于,对IP地址段的地域信息的存储过程,具体包括:
将首地址和末地址进行比较,获得首地址和末地址数字不同的子段中,第1个子段的序号M;1<M≤N;
当M=N时:
将IP地址段拆分为1段连续IP地址段,该连续IP地址段中第N个子段是连续数字;
对拆分出的连续IP地址段,按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的元素中;
存储子节点元素,包括:当i>1时,将获得的第i个子段至第M-1个子段的数字,分别存储至所述多叉树的第i-1层子节点的元素中;在存储所述第M-1个子段的数字的元素的下一层子节点中,存储所述的连续数字作为一个元素;并在该元素中存储所述IP地址段的地域信息;
当M≠N时:
确定第M至第N个子段,均具有连续数字;
根据IP地址的分配规则和子段的分段规则,将IP地址拆分出多段连续IP地址段;拆分出的每段连续IP地址段中至少有一个子段是连续数字;
对拆分出的每个连续IP地址段,分别执行:
按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的第一元素中;
存储子节点元素,包括:当i>1时,判断第i子段是否为连续数字,如果是,则将该连续数字存储至所述多叉树的第i-1层子节点的元素中,并在该元素中存储所述IP地址段的地域信息;如果否,则将该数字存储至所述多叉树的第i-1层子节点的元素中,令i=i+1,返回执行本步骤。
5.根据权利要求1所述的方法,其特征在于,所述多叉树中的每个节点的数据结构为以下数据存储结构中的一种:
数组存储结构,适用于多叉树中的根节点及子节点;
散列存储结构,适用于多叉树中的根节点及子节点;
间隔存储结构,适用于多叉树中的最末层子节点;
单点存储结构,适用于多叉树中的最末层子节点。
6.根据权利要求5所述的方法,其特征在于,所述按照各个子段的前后顺序,依次将各个子段的数字分别存储至用于存储IP地址地域信息的多叉树的根节点及子节点的不同元素中,并在最末层子节点的元素中存储所述IP地址值的地域信息,包括:
针对根节点及子节点:以散列存储结构存储所述各个子段的数字,当满足时,将散列存储结构的类型转换为数组存储结构;其中,si为每个子节点中当前已存储的元素数,mi为每个子段的数字的取值范围的上限值;
针对最末层子节点:以间隔存储结构存储所述各个子段的数字,当满足时,将间隔存储结构的类型转换为数组存储结构;当数组存储结构中存储的元素占满该节点存储空间时,将数组存储结构转换为单点存储结构。
7.一种IP地址的地域信息的查询方法,用于查询按照权利要求1存储的IP地址的地域信息,其特征在于,包括:
获得待查询的IP地址值或IP地址段;
按照预设的分段规则,将待查询的IP地址值划分成N个子段,每个子段具有一个单独数字;或将获得所述IP地址段划分成N个子段,其中至少一个子段具有连续数字;
获得每个子段的单个数字或连续数字;
从第一个子段开始,在所述多叉树对应的子节点中,查找存储了与该子段的单个数字或连续数字相同的元素,并判断该元素中是否存储了地域信息;当判断出该元素中存储有地域信息时,将该地域信息确定为查询结果。
8.一种IP地址的地域信息的存储装置,其特征在于,所述装置包括:
IP地址获得模块,用于从导入的数据源中,获得携带有地域信息的IP地址值或IP地址段;
第一IP地址划分模块,用于按照预设的分段规则,将获得的IP地址值划分成N个子段;或将获得的所述IP地址段的首地址和末地址分别划分成N个子段,其中,N为大于1的正整数;
第一地域信息存储模块,用于按照各个子段的前后顺序,依次将各个子段的数字分别存储至用于存储IP地址地域信息的多叉树的根节点及子节点的不同元素中,并在最末层子节点的元素中存储所述IP地址值的地域信息;
第二地域信息存储模块,用于将首地址和末地址的N个子段的数字分别进行比较,根据比较结果、IP地址的分配规则和子段的分段规则,将IP地址段拆分出1段或多段连续IP地址段;其中每段连续IP地址段中至少有一个子段是连续数字;用于对于每段连续IP地址段,按照各子段的前后顺序关系,依次将各个子段的数字存储至所述多叉树的根节点及子节点的不同元素中,并在每个存储所述连续数字的子节点的元素中存储所述IP地址值的地域信息;其中,根节点内部不同元素中存储的子段的数字不相同,且每个子节点内部不同元素中存储的子段的数字不相同。
9.根据权利要求8所述的装置,其特征在于:所述第一IP地址划分模块,包括:第一划分子模块和第二划分子模块;其中,
所述第一划分子模块,用于在所述的IP地址值或IP地址段为ipv4地址值或ipv4地址段时,按照ipv4地址的格式,将获得的IP地址值划分成4个子段;或将获得所述IP地址段的首地址和末地址分别划分成4个子段;
所述第二划分子模块,用于在所述的IP地址值或IP地址段为ipv6地址值或ipv6地址段时,按照ipv6地址的格式,将获得的IP地址值划分成8个子段;或将获得所述IP地址段的首地址和末地址分别划分成8个子段。
10.根据权利要求8所述的装置,其特征在于,所述第一地域信息存储模块,包括:数字获得子模块、第一根节点存储子模块和第一子节点存储子模块;其中,
所述数字获得子模块,用于按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
所述第一根节点存储子模块,用于存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的第一元素中;
所述第一子节点存储子模块,用于存储子节点元素,包括:当i>1时,将获得的第i个子段至第N个子段的数字,分别存储至所述多叉树的第i-1层子节点的元素中,并在存储第N个子段的数字的元素中,存储所述IP地址值的地域信息。
11.根据权利要求8所述的装置,其特征在于,所述第二地域信息存储模块,包括:序号获得子模块、第一拆分子模块、第一数字获得子模块、第二根节点存储子模块、第二子节点存储子模块、第二拆分子模块、第二数字获得子模块、第三根节点存储子模块和第三子节点存储子模块;其中,
所述序号获得子模块,用于将首地址和末地址进行比较,获得首地址和末地址数字不同的子段中,第1个子段的序号M;1<M≤N;
所述第一拆分子模块,用于当M=N时将IP地址段拆分为1段连续IP地址段,该连续IP地址段中第N个子段是连续数字;
所述第一数字获得子模块,用于对拆分出的连续IP地址段,按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
所述第二根节点存储子模块,用于存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的元素中;
所述第二子节点存储子模块,用于存储子节点元素,包括:当i>1时,将获得的第i个子段至第M-1个子段的数字,分别存储至所述多叉树的第i-1层子节点的元素中;在存储所述第M-1个子段的数字的元素的下一层子节点中,存储所述的连续数字作为一个元素;并在该元素中存储所述IP地址段的地域信息;
所述第二拆分子模块,用于当M≠N时,确定第M至第N个子段,均具有连续数字;用于根据IP地址的分配规则和子段的分段规则,将IP地址拆分出多段连续IP地址段;拆分出的每段连续IP地址段中至少有一个子段是连续数字;
所述第二数字获得子模块,用于对拆分出的每个连续IP地址段,分别按照各子段的前后顺序,依次获得第i子段的数字,i为从1~N的正整数;
所述第三根节点存储子模块,用于存储根节点元素,包括:当i=1时,将获得的第一个子段的数字存储至所述多叉树的根节点的第一元素中;
所述第三子节点存储子模块,用于存储子节点元素,包括:当i>1时,判断第i子段是否为连续数字,如果是,则将该连续数字存储至所述多叉树的第i-1层子节点的元素中,并在该元素中存储所述IP地址段的地域信息;如果否,则将该数字存储至所述多叉树的第i-1层子节点的元素中,令i=i+1,返回执行本步骤。
12.根据权利要求8所述的装置,其特征在于,所述多叉树中的每个节点的数据结构为以下数据存储结构中的一种:
数组存储结构,适用于多叉树中的根节点及子节点;
散列存储结构,适用于多叉树中的根节点及子节点;
间隔存储结构,适用于多叉树中的最末层子节点;
单点存储结构,适用于多叉树中的最末层子节点。
13.根据权利要求12所述的装置,其特征在于,所述第一地域信息存储模块,
针对根节点及子节点:用于以散列存储结构存储所述各个子段的数字,当满足时,将散列存储结构的类型转换为数组存储结构;其中,si为每个子节点中当前已存储的元素数,mi为每个子段的数字的取值范围的上限值;
针对最末层子节点:用于以间隔存储结构存储所述各个子段的数字,当满足时,将间隔存储结构的类型转换为数组存储结构;当数组存储结构中存储的元素占满该节点存储空间时,将数组存储结构转换为单点存储结构。
14.一种IP地址的地域信息的查询装置,用于查询按照权利要求1存储的IP地址的地域信息,其特征在于,包括:
IP地址查询模块,用于获得待查询的IP地址值或IP地址段;
第二IP地址划分模块,用于按照预设的分段规则,将待查询的IP地址值划分成N个子段,每个子段具有一个单独数字;或将获得所述IP地址段划分成N个子段,其中至少一个子段具有连续数字;
数字获得模块,用于获得每个子段的单个数字或连续数字;
地域信息查询模块,用于从第一个子段开始,在所述多叉树对应的子节点中,查找存储了与该子段的单个数字或连续数字相同的元素,并判断该元素中是否存储了地域信息;当判断出该元素中存储有地域信息时,将该地域信息确定为查询结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510857658.9A CN105512229B (zh) | 2015-11-30 | 2015-11-30 | 一种ip地址的地域信息的存储、查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510857658.9A CN105512229B (zh) | 2015-11-30 | 2015-11-30 | 一种ip地址的地域信息的存储、查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105512229A CN105512229A (zh) | 2016-04-20 |
CN105512229B true CN105512229B (zh) | 2019-02-22 |
Family
ID=55720211
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510857658.9A Active CN105512229B (zh) | 2015-11-30 | 2015-11-30 | 一种ip地址的地域信息的存储、查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105512229B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106777163B (zh) * | 2016-12-20 | 2020-05-26 | 携程旅游网络技术(上海)有限公司 | 基于红黑树的ip地址所属地查询方法及系统 |
CN107798117B (zh) * | 2017-11-08 | 2020-12-04 | 杭州迪普科技股份有限公司 | 一种数据存储与读取的方法和装置 |
CN108712519B (zh) * | 2018-05-31 | 2022-07-08 | 康键信息技术(深圳)有限公司 | Ip地址的定位方法、装置及存储介质 |
CN108875006B (zh) * | 2018-06-15 | 2021-03-30 | 泰康保险集团股份有限公司 | 确定ip地址所属地区的方法及装置 |
CN109710542B (zh) * | 2018-12-28 | 2021-03-16 | 北京像素软件科技股份有限公司 | 一种满n叉树构建方法及装置 |
CN110505322B (zh) * | 2019-08-28 | 2022-07-01 | 杭州迪普科技股份有限公司 | 一种ip地址段查找方法及装置 |
CN111125449B (zh) * | 2019-12-24 | 2020-11-13 | 腾讯科技(深圳)有限公司 | 对象信息存储方法、装置及存储介质 |
CN111970368B (zh) * | 2020-08-24 | 2021-11-23 | 北京微步在线科技有限公司 | 一种基于ip信誉数据的信息处理方法、服务端及系统 |
CN115460168B (zh) * | 2022-08-22 | 2024-05-14 | 浪潮通信信息系统有限公司 | 一种基于资源管理的IPv6容量分析方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101159658A (zh) * | 2007-11-02 | 2008-04-09 | 华为技术有限公司 | 虚拟私用网路由查找的方法和装置 |
CN101437016A (zh) * | 2007-11-16 | 2009-05-20 | 北京乾坤化物数字技术有限公司 | ip地址结构树的构建方法 |
CN103561133A (zh) * | 2013-11-19 | 2014-02-05 | 中国科学院计算机网络信息中心 | 一种ip地址归属信息索引方法及快速查询方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7797348B2 (en) * | 2003-05-01 | 2010-09-14 | The Hong Kong Polytechnic University | Data structure and system for IP address lookup and IP address lookup system |
-
2015
- 2015-11-30 CN CN201510857658.9A patent/CN105512229B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101159658A (zh) * | 2007-11-02 | 2008-04-09 | 华为技术有限公司 | 虚拟私用网路由查找的方法和装置 |
CN101437016A (zh) * | 2007-11-16 | 2009-05-20 | 北京乾坤化物数字技术有限公司 | ip地址结构树的构建方法 |
CN103561133A (zh) * | 2013-11-19 | 2014-02-05 | 中国科学院计算机网络信息中心 | 一种ip地址归属信息索引方法及快速查询方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105512229A (zh) | 2016-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105512229B (zh) | 一种ip地址的地域信息的存储、查询方法及装置 | |
US9933979B2 (en) | Device and method for storing data in distributed storage system | |
CN101901248B (zh) | 一种布隆过滤器的生成、更新以及查询元素方法和装置 | |
CN108255958A (zh) | 数据查询方法、装置和存储介质 | |
EP3236365A1 (en) | Data query method and device | |
US8819076B2 (en) | Distributed multidimensional range search system and method | |
CN102137145B (zh) | 分布式内容管理的方法、装置及系统 | |
CN105389367B (zh) | 基于Mongo数据库的电网图形多时态多级分布式存储方法 | |
CN103970870A (zh) | 数据库查询方法和服务器 | |
CN105095371B (zh) | 时序图的图数据管理方法及其装置 | |
CN106599091B (zh) | 基于键值存储的rdf图结构存储和索引方法 | |
CN109271449A (zh) | 一种基于文件的分布式存储查询系统及查询方法 | |
CN110738577A (zh) | 社区发现方法、装置、计算机设备和存储介质 | |
CN109710542B (zh) | 一种满n叉树构建方法及装置 | |
CN108572958A (zh) | 数据处理方法及装置 | |
CN110427364A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN104486777A (zh) | 一种实现数据处理的方法及装置 | |
CN109299111A (zh) | 一种元数据查询方法、装置、设备及计算机可读存储介质 | |
CN110532307A (zh) | 一种流滑动窗口的数据存储方法及查询方法 | |
CN107656989A (zh) | 云存储系统中基于数据分布感知的近邻查询方法 | |
CN105159925A (zh) | 一种数据库集群数据分配方法及系统 | |
CN107566505A (zh) | 数据存储资源管理方法、主节点、系统、装置及存储介质 | |
US20200004720A1 (en) | Data center management system and method | |
CN113297266B (zh) | 数据处理方法、装置、设备及计算机存储介质 | |
CN103761316A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |