先介绍下背景:我负责微爱的后端,微爱是一款专给情侣使用的应用,官网地址:http://www.welove520.com 。
最近我想做这么一件事:分析用户的地域分布,比如北京多少人,四川多少人。现在有的数据是用户IP地址,所以首先需要根据IP地址查询用户所在省市,然后再统计分析。这个问题的关键是如何通过IP查询到用户所在地区。解决方案有俩:1. 搭建自己的IP 地址库,2. 使用其他网站提供的IP查询API。 最后我选择了方案1,下面把详细方法分享出来,互联网的精神就在于共享,希望此举对其他人有用。
步骤:
1. 下载纯真IP地址数据库,据说这个是国内最准确的,百度一下就可以找到很多下载。下载后安装运行,如下图:
![](http://dl.iteye.com/upload/attachment/0074/2520/58f22f60-bc6b-3835-bec6-1c5124ec8649.png)
我的IP地址是117.79.229.18,查询出来是在江苏,其实我在北京,IP库不是特别准确,有误差,免费的就凑合用吧,不想花钱买收费的。
2. 点击解压,会生成一个txt文件,如下图:
![](http://dl.iteye.com/upload/attachment/0074/2524/49e5ddf3-6e9a-3979-8702-c26776ad8b85.png)
每一行的含义是这样的,比如第10行,表示:IP地址在1.1.0.0---1.1.0.255之间的是福建电信的。
3. 将IP数据导入数据库,我的DB是mysql,系统Linux。
表结构是这样的:
![](http://dl.iteye.com/upload/attachment/0074/2527/ce349a1b-d979-3e19-a090-e420aa25cc91.png)
其中 ip_segment_begin_long 和 ip_segment_end_long是将IP地址转换成long型后存入的,并且这两个字段联合为唯一键,这么做是为了查询更快。
数据导入我就不多说了,用mysql的load data即可。导完后有44万行数据。
4. 至此,自己的IP地址库算是有了。接下来就是查询了,我的sql语句如下:
select * from ip_address where ip_segment_begin_long <= ? and ip_segment_end_long >= ?
问号处是将IP地址转换成long型后的值。这样,我就可以根据IP查询用户所在地了!