基于红黑树的IP地址所属地查询方法及系统与流程

文档序号:12465761阅读:294来源:国知局
基于红黑树的IP地址所属地查询方法及系统与流程
本发明涉及一种基于红黑树的IP地址所属地查询方法及系统。
背景技术
:在日常的工作中经常需要查询某个IP地址的所属地信息,传统的实现IP所属地信息查询的方法是把IP地址信息存储到关系型数据库(如MySQL)中,对于并发量比较少,实时性要求不高的情况下是可用的,但是一旦并发量增大时,会对关系型数据库产生很大的压力,并且访问速度会明显减慢,因此对于高并发、实时性要求高的场合这种查询方法就显得捉襟见肘了。技术实现要素:本发明要解决的技术问题是为了克服现有技术中传统的实现IP所属地信息查询的方法在并发量增大时会对关系型数据库产生很大的压力,导致访问速度减慢的缺陷,提供一种基于红黑树的IP地址所属地查询方法及系统。本发明是通过下述技术方案来解决上述技术问题的:本发明提供了一种基于红黑树的IP地址所属地查询方法,其特点在于,包括以下步骤:S1、将IP地址信息存储至数据库中;S2、读取数据库中的IP地址信息到计算机内存中;S3、对IP地址信息进行索引形式的转换;S4、将索引形式的IP地址信息保存至红黑树中;S5、从所述红黑树中查询出与待查询的IP地址所对应的结点;S6、根据所述结点获取所述待查询的IP地址的所属地信息。较佳地,步骤S2中包括:将数据库中的IP地址信息以JSON格式(一种轻量级的数据交换格式)的字符串数据读取到计算机内存中;所述字符串数据包括国家字段、地区字段、城市字段以及城市连续IP段的起始IP和终止IP。较佳地,步骤S3中包括:S31、将IP地址信息封装成Area类数据的集合;其中,Area类数据包括type字段和name字段,所述name字段用于表征国家、地区或城市的名称,所述type字段用于表征国家、地区及城市之间的组合;S32、将所述Area类数据转换为第一数据;其中,所述第一数据包括所述type字段和name字段以及第一index字段,所述第一index字段为所述Area类数据的索引;S33、根据IP地址信息及所述第一数据生成第二数据;其中,所述第二数据包括国家索引字段、地区索引字段、城市索引字段、起始IP字段以及终止IP字段;S34、对国家索引字段、地区索引字段以及城市索引字段相同的第二数据进行合并,生成第三数据;其中,所述第三数据包括国家索引字段、地区索引字段、城市索引字段以及第二数据的索引字段;S35、根据IP地址信息及所述第三数据生成第四数据;其中,所述第四数据包括起始IP字段、终止IP字段以及第三数据的索引字段;S36、将所述第四数据中的起始IP字段和终止IP字段中的IP地址转换为long型整数,以生成第五数据。较佳地,步骤S4中,所述红黑树的结点中包括from字段、end字段以及第二index字段;其中,所述from字段表征起始IP地址转换后的long型整数,所述end字段表征终止IP地址转换后的long型整数,所述第二index字段为所述第三数据的索引字段。本发明的目的在于还提供了一种基于红黑树的IP地址所属地查询系统,其特点在于,包括:存储模块,用于将IP地址信息存储至数据库中;读取模块,用于读取数据库中的IP地址信息到计算机内存中;转换模块,用于对IP地址信息进行索引形式的转换;保存模块,用于将索引形式的IP地址信息保存至红黑树中;查询模块,用于从所述红黑树中查询出与待查询的IP地址所对应的结点;获取模块,用于根据所述结点获取所述待查询的IP地址的所属地信息。较佳地,所述读取模块用于将数据库中的IP地址信息以JSON格式的字符串数据读取到计算机内存中;所述字符串数据包括国家字段、地区字段、城市字段以及城市连续IP段的起始IP和终止IP。较佳地,所述转换模块包括:第一转换单元,用于将IP地址信息封装成Area类数据的集合;其中,Area类数据包括type字段和name字段,所述name字段用于表征国家、地区或城市的名称,所述type字段用于表征国家、地区及城市之间的组合;第二转换单元,用于将所述Area类数据转换为第一数据;其中,所述第一数据包括所述type字段和name字段以及第一index字段,所述第一index字段为所述Area类数据的索引;第三转换单元,用于根据IP地址信息及所述第一数据生成第二数据;其中,所述第二数据包括国家索引字段、地区索引字段、城市索引字段、起始IP字段以及终止IP字段;第四转换单元,用于对国家索引字段、地区索引字段以及城市索引字段相同的第二数据进行合并,生成第三数据;其中,所述第三数据包括国家索引字段、地区索引字段、城市索引字段以及第二数据的索引字段;第五转换单元,用于根据IP地址信息及所述第三数据生成第四数据;其中,所述第四数据包括起始IP字段、终止IP字段以及第三数据的索引字段;第六转换单元,用于将所述第四数据中的起始IP字段和终止IP字段中的IP地址转换为long型整数,以生成第五数据。较佳地,所述红黑树的结点中包括from字段、end字段以及第二index字段;其中,所述from字段表征起始IP地址转换后的long型整数,所述end字段表征终止IP地址转换后的long型整数,所述第二index字段为所述第三数据的索引字段。本发明的积极进步效果在于:本发明基于计算机内存,红黑树算法,关系型数据库,具有良好的可扩展、实时、高并发性能。并且系统启动时就读取了预先存放在关系型数据库中的IP地址信息数据,并且是一次性读取的,用户在查找IP所属地信息时,直接查询的计算机内存中存放的红黑树中的数据,不需要再访问关系型数据库,因此查询的速度非常快,并且当IP地址信息数据发生变动时,只需要把IP地址信息录入到关系型数据库中,重启应用即可,简单、方便、高效,同时便于扩展。附图说明图1为本发明的较佳实施例的基于红黑树的IP地址所属地查询系统的模块示意图。图2为本发明的较佳实施例的基于红黑树的IP地址所属地查询方法的流程图。图3为本发明的较佳实施例的基于红黑树的IP地址所属地查询方法生成的红黑树的结构示意图。具体实施方式下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。如图1所示,本实施例的基于红黑树的IP地址所属地查询系统包括存储模块1、读取模块2、转换模块3、保存模块4、查询模块5以及获取模块6。其中,所述存储模块1用于将IP地址信息存储至数据库中;所述读取模块2用于读取数据库中的IP地址信息到计算机内存中;所述转换模块3用于对IP地址信息进行索引形式的转换;所述保存模块4用于将索引形式的IP地址信息保存至红黑树中;所述查询模块5用于从所述红黑树中查询出与待查询的IP地址所对应的结点;所述获取模块6用于根据所述结点获取所述待查询的IP地址的所属地信息。具体地,所述读取模块2用于将数据库中的IP地址信息以JSON格式的字符串数据读取到计算机内存中;所述字符串数据包括国家字段、地区字段、城市字段以及城市连续IP段的起始IP和终止IP。所述转换模块包括第一转换单元、第二转换单元、第三转换单元、第四转换单元、第五转换单元以及第六转换单元;所述第一转换单元用于将IP地址信息封装成Area类数据的集合;其中,Area类数据包括type字段和name字段,所述name字段用于表征国家、地区或城市的名称,所述type字段用于表征国家、地区及城市之间的组合;所述第二转换单元用于将所述Area类数据转换为第一数据;其中,所述第一数据包括所述type字段和name字段以及第一index字段,所述第一index字段为所述Area类数据的索引;所述第三转换单元用于根据IP地址信息及所述第一数据生成第二数据;其中,所述第二数据包括国家索引字段、地区索引字段、城市索引字段、起始IP字段以及终止IP字段;所述第四转换单元用于对国家索引字段、地区索引字段以及城市索引字段相同的第二数据进行合并,生成第三数据;其中,所述第三数据包括国家索引字段、地区索引字段、城市索引字段以及第二数据的索引字段;所述第五转换单元用于根据IP地址信息及所述第三数据生成第四数据;其中,所述第四数据包括起始IP字段、终止IP字段以及第三数据的索引字段;所述第六转换单元用于将所述第四数据中的起始IP字段和终止IP字段中的IP地址转换为long型整数,以生成第五数据。具体地,所述红黑树的结点中包括from字段、end字段以及第二index字段;其中,所述from字段表征起始IP地址转换后的long型整数,所述end字段表征终止IP地址转换后的long型整数,所述第二index字段为所述第三数据的索引字段。本实施例还提供了一种基于红黑树的IP地址所属地查询方法,如图2所示,包括以下步骤:步骤101、将IP地址信息存储至数据库中;步骤102、读取数据库中的IP地址信息到计算机内存中;步骤103、对IP地址信息进行索引形式的转换;步骤104、将索引形式的IP地址信息保存至红黑树中;步骤105、从所述红黑树中查询出与待查询的IP地址所对应的结点;步骤106、根据所述结点获取所述待查询的IP地址的所属地信息。在本发明中,首先把IP地址信息录入到数据库中进行存储,系统把已经录入好的IP地址信息从数据库中读取到计算机内存,经过一系列的索引形式的转换,把最终的索引以及把IP地址转成long形式的整数后存放到计算机内存中的红黑树中,当有访问请求获取IP的所属地信息时,首先把具体的IP地址转成long形式的整数,根据该整数到红黑树中查询到其对应的结点,获取该结点的索引数据,再根据该索引数据获取到IP所属地信息,并且返回给用户。在TCP/IP协议(传输控制协议/因特网互联协议)中,IP地址以二进制数字的形式出现,总共4个字节,即32个bit,由网络编号(N-ID)和主机编号(H-ID)组成。根据网络地址的不同,IP地址可以分为五类:A类地址、B类地址、C类地址、D类地址以及E类地址。对于同一个物理网络上的计算机主机,其网络编号是相同的,不同的是主机编号。在为各个城市分配IP地址时,通常是把多个连续的IP地址段分配给某一城市,例如:1.12.0.0到1.12.255.255,1.15.168.0到1.15.191.255等连续的IP地址段都属于北京的IP地址。通常每个城市包含了多个连续的IP地址段,在这些IP地址段中的IP地址都属于该城市的IP地址,由于IP是有4个字节组成的,并且没有负数,可以把IP地址段转成两个8字节的long类型整数,在这两个整数之间的数字都属于该城市的IP地址。IP地址是由4段组成的,如1.15.168.0,其对应的4字节二进制形式为00000001.00001111.10101000.00000000,根据计算机的计算特性,可以把第一段左移24位、第二段左移16位、第三段左移8位、第四段不移动,得到整数相加就是IP地址转换后的整数值,即16777216+983040+43008+0=17803264。红黑树是一种非常成熟的数据结构,是每个结点都带有红色或者黑色的二叉查找树,是比较高效的,可以在O(logn)时间内做查找,插入和删除,这里的n是树中元素的数目。红黑树在满足二叉查找树的要求外,还必须满足以下要求:1.结点是红色或黑色。2.根是黑色。3.所有叶子都是黑色(叶子是NIL结点)。4.每个红色结点必须有两个黑色的子结点。(从每个叶子到根的所有路径上不能有两个连续的红色结点。)5.从任一结点到其每个叶子的所有简单路径都包含相同数目的黑色结点。JSON是一种数据格式,主要用于数据交换,易于阅读和编写,同时也易于计算机解析和生成。在上述步骤102中,具体地会将数据库中的IP地址信息以JSON格式的字符串数据读取到计算机内存中;所述字符串数据包括国家字段、地区字段、城市字段以及城市连续IP段的起始IP和终止IP。首先把IP地址信息从数据库中以JSON格式读取到计算机内存中,例如:{"region":"天津","start":"1.15.232.0","end":"1.15.232.255","city":"天津","country":"中国"},{"region":"辽宁","start":"1.14.33.0","end":"1.14.33.255","city":"大连","country":"中国"},{"region":"北京","start":"1.15.186.0","end":"1.15.186.255","city":"北京","country":"中国"},{"region":"北京","start":"1.12.27.0","end":"1.12.27.255","city":"北京","country":"中国"},其中start为数据该城市连续IP段的起始IP,end为终止IP。步骤103具体包括以下步骤:将IP地址信息封装成Area类数据的集合;其中,Area类数据包括type字段和name字段,所述name字段用于表征国家、地区或城市的名称,比如上面的IP地址信息中的中国、天津、北京、辽宁和大连,所述type字段用于表征国家、地区及城市之间的组合,即由country(国家)、region(地区)、city(城市)单独或者任意相加组成,其中country、region、city分别用1、2、4表示,这样当type为1时表示一个国家,为2时表示一个地区,为4时表示一个城市,为3时表示国家名和地区名相同,为5时表示国家名和城市名相同,为7时表示国家、地区、城市的名称相同。转换后的数据如表1所示:表1typename1中国6天津2辽宁4大连6北京然后,将所述Area类数据转换为第一数据;其中,所述第一数据包括所述type字段和name字段以及第一index字段,所述第一index字段为所述Area类数据的索引;转换后的数据如表2所示:表2typename第一index1中国06天津12辽宁24大连36北京4然后,再根据IP地址信息及所述第一数据生成第二数据;其中,所述第二数据包括国家索引字段、地区索引字段、城市索引字段、起始IP字段以及终止IP字段;其中国家索引字段为IP地址信息中country字段对应的表2中第一index列的相应值,地区索引字段为region字段对应的表2中第一index列的相应值,城市索引字段为city字段对应的表2中第一index列的相应值,具体生成的数据如表3所示:表3然后,对国家索引字段、地区索引字段以及城市索引字段相同的第二数据进行合并,生成第三数据;其中,所述第三数据包括国家索引字段、地区索引字段、城市索引字段以及第二数据的索引字段;例如,针对表3中第3、4行,其中的国家索引字段、地区索引字段以及城市索引字段都是相同的,都是国家为中国、地区为北京、城市为北京,为了消除重复数据,再根据第二数据生成第三数据,具体生成的数据如表4所示:表4国家索引地区索引城市索引第二数据的索引011002310442然后,再根据IP地址信息及所述第三数据生成第四数据;其中,所述第四数据包括起始IP字段、终止IP字段以及第三数据的索引字段;具体生成的数据如表5所示:表5第三数据的索引起始IP终止IP01.15.232.01.15.232.25511.14.33.01.14.33.25521.12.27.01.12.27.25521.15.186.01.15.186.255最后,再将所述第四数据中的起始IP字段和终止IP字段中的IP地址转换为long型整数,以生成第五数据,具体生成的数据如表6所示:表6第三数据的索引起始IP终止IP01781964817819903117703168177034232175705601757081521780787217808127然后,将索引形式的IP转换成红黑树保存在计算机内存中,每个红黑树结点包括parent、left、right、color、from字段、end字段、第二index字段;其中parent为父结点、left为左结点、right为右结点、color表示该结点为红色或黑色,所述from字段表征起始IP地址转换后的long型整数,所述end字段表征终止IP地址转换后的long型整数,所述第二index字段为所述第三数据的索引字段,即表6的第一列,具体的红黑树如图3所示,其中方块代表黑色结点,椭圆代表红色结点。由于红黑树中存放的是IP段的起始IP转换后的整数和终止IP转换后的整数,而需要查询的是具体IP地址转换后的整数,因此查询的规则是:先把IP转换为整数,从红黑树的root结点开始查起,当该整数小于结点中的from整数时,继续沿着红黑树中该结点的左边查找,当该整数大于结点中的end整数时,继续沿着红黑树中该结点的右边查找,否则,该查找到的结点即为要查找的IP信息对应的结点。若查找过程中,结点为NIL结点,说明该IP地址不是有效的IP。例如IP地址为1.15.186.10,首先把IP转成long型的整数,即17807882。然后去红黑树中查找该整数对应的红黑树中的结点为2,17807872,17808127,进而取到索引2,即第三数据的索引,根据表4取到数据0,4,4,2,其中2为第二数据的索引,0,4,4为第一数据的最后一列,即为Area类集合的索引,从而找到country为0,即中国,region为4,即北京,city为4即北京。因此该IP对应的国家为中国、地区为北京、城市为北京。当红黑树形成以后,在具体IP查询过程中,从数据库中读取的IP地址信息的JSON格式数据已经不再需要,可以从内存中删除。最终留在内存中的数据为Area类的集合,第三数据,红黑树,这样就可以减少计算机内存的使用。经统计,本系统中IP地址信息的总条数为719296,经过对系统启动前后,计算机内存的比较,系统启动后共占用了大约20兆(MB)的内存,在现在计算机技术快速发展的时代,一般家用的计算机的内存也有2千兆(GB)或者更多,公司专门的服务器的内存甚至高达几十GB,因此这些数据的内存占用量可以说是微不足道的。当IP地址信息的条数增加时,只需要以目前的格式添加到数据库中,然后重启应用程序即可,当需要更详细的IP地址信息时,比如经纬度、运营供应商,除了在数据库中添加相应信息外,只需要增加Area类的相应信息的字段,重启应用程序即可,因此,本发明具有良好的扩展性。本发明通过读取预先存放在关系型数据库中的IP所属地信息数据到计算机内存中,然后把这些数据经过多次索引转换,形成红黑树结构的数据存放在计算机内存中。在查询某一个具体的IP所属地信息时,首先把IP地址转换成long型的整数,然后根据该整数到红黑树中查询具体的结点,再获取到查询到的结点中的索引信息,从而获取到该索引对应的具体IP所属地信息。在系统启动时读取关系型数据库的IP地址信息,经过多次的索引转换最终以红黑树的结构保存在计算机内存中,由于计算机内存的运算速度非常快,并且红黑树的查找性能比较高等特性,使得本发明具有非常快的实时响应以及具有高并发性能。虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1