如何快速查找IP归属地
这两天遇到这么一个问题就是查找一个IP的归属地。当然我会有一个IP段的分配列表格式如下
16777472 16778239 XX省XX市
第一列是IP段的起始IP第二列是IP段的终止IP第三列是对应的省份。一共大概200万条左右。
那么好了如何进行查找呢
想到的最简单的办法就是二分查找。首先对这些IP段进行首位相接的排序之后一个二分查找。那么有没有比这个还快的方法呢
我们分析一下上面的二分查找的一个缺点就是要在所有的IP段上进行二分查找大概要查找log(2000000)次才能找到一个IP的归属地。那么我们一个自然的想法就是缩小二分的IP段的数量。可以这样做
根据IP的前两个字节把IP段进行分组。之后在对要查找的IP首先根据IP的前两个字节快速定位到某一个分组之后在这个分组中进行查找。 由于分组后每一个组中的IP段会少很多。所以这个方法要比赤裸裸的二分快50%左右。
左面代表所有两字节组合每个单元都有两个索引记录其在右侧数组中的起始位置。起始位置之间的IP的前两字节都等于左侧单元编号。
当来一个ip时 首先计算ip>> 16之后找到相应的索引区间之后在相应的区间上进行查找。
其实第二中方法就是一个以空间换时间的方法。如果内存放得下我们完全可以计算出每个IP的对应的省和市存放在一个大小为2^32次方的表中。在这里我们取了一个折中。
分类:算法
关于CYUN商家在之前有介绍过一次,CYUN是香港蓝米数据有限公司旗下的云计算服务品牌,和蓝米云、蓝米主机等同属该公司。商家主要是为个人开发者用户、中小型、大型企业用户提供一站式核心网络云端部署服务,促使用户云端部署化简为零,轻松快捷运用云计算。目前,CYUN主要运营美国、香港、台湾、日本、韩国CN2线路产品,包括云服务器、站群服务器和独立服务器等。这次看到CYUN夏季优惠活动发布了,依然是熟悉的...
收到好多消息,让我聊一下阿里云国际版本,作为一个阿里云死忠粉,之前用的服务器都是阿里云国内版的VPS主机,对于现在火热的阿里云国际版,这段时间了解了下,觉得还是有很多部分可以聊的,毕竟,实名制的服务器规则导致国际版无需实名这一特点被无限放大。以前也写过几篇综合性的阿里云国际版vps的分析,其中有一点得到很多人的认同,那句是阿里云不管国内版还是国际版的IO读写速度实在不敢恭维,相对意义上的,如果在这...
看到群里网友们在讨论由于不清楚的原因,有同学的网站无法访问。他的网站是没有用HTTPS的,直接访问他的HTTP是无法访问的,通过PING测试可以看到解析地址已经比较乱,应该是所谓的DNS污染。其中有网友提到采用HTTPS加密证书试试。因为HTTP和HTTPS走的不是一个端口,之前有网友这样测试过是可以缓解这样的问题。这样通过将网站绑定设置HTTPS之后,是可以打开的,看来网站的80端口出现问题,而...