当初选择做这么一个项目,不是为了拷贝一份库自己做服务,也不是为了其他目的,只是单纯的熟悉关于http和mysql方面的知识。 下面言归正传。 1、淘宝IP地址库简介 此地址库可以根据用户提供的IP地址,快速查询出该IP地址所在的地理信息和地理相关的信息,包括
当初选择做这么一个项目,不是为了拷贝一份库自己做服务,也不是为了其他目的,只是单纯的熟悉关于http和mysql方面的知识。
下面言归正传。
1、淘宝IP地址库简介
此地址库可以根据用户提供的IP地址,快速查询出该IP地址所在的地理信息和地理相关的信息,包括国家、省、市和运营商。
用户也可以主动提交信息来纠错。
主要优势表现为:
(1)地域
覆盖度:94.54% 精确到市级
准确度:96.5% 精确到市级
(2)运营商
覆盖度:93.8%
准确度:暂无统计数据
(3)查询速度
10qps
注:阿里同机房内网,实测速度为4qps左右。
(4)接口
符合REST规范,方便扩展;
使用JSON作为数据格式,方便使用;
2、基础数据
下面介绍一下,需要使用到的一些基础数据项,以及来源。
首先,我们来分析一下淘宝IP地址库的返回数据,
{
"code" : 0, // 请求成功/失败
"data" : {
"country" : "\u4e2d\u56fd", // 国家
"country_id" : "CN", // 国家代码
"area" : "\u534e\u5317", // 地区
"area_id" : "100000", // 地区代码
"region" : "\u5317\u4eac\u5e02", // 省(自治区、直辖市、特别行政区)
"region_id" : "110000", // 省代码
"city" : "\u5317\u4eac\u5e02", // 市(地区、自治州、盟及国家直辖市所属市辖区和县)
"city_id" : "110000", // 市代码
"county" : "", // 县(市辖区、县级市、旗)
"county_id" : "-1", // 县代码
"isp" : "\u4e2d\u56fd\u79d1\u6280\u7f51", // 运营商
"isp_id" : "1000114", // 运营商代码
"ip" : "210.75.225.254" // ipv4/ipv6
}
}
其中:
国家与国家代码,由联合国统计局统一制定。详见:http://zh.wikipedia.org/wiki/ISO_3166-1
地区、省、市、县以及相应的代码,由中华人民共和国国家统计局统一制定,详见:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html
运营商与运营商代码,由国际电联电信标准化部门统一制定,不过已经很久没有维护,不可用。到目前为止,本人也没有找到一份完整的编码表,希望知晓者告知。暂且就以淘宝IP地址库中编码为准。
国家IP地址段,由互联网IP地址分配中心统一管理,在此附上中文版的地址段信息,详见程默的博客,在此表示感谢:http://ipblock.chacuo.net/
3、数据库设计
(1)数据项及命名
国家 country
地区 region
省(自治区、直辖市、特别行政区) province
市(地区、自治州、盟及国家直辖市所属市辖区和县) city
县(市辖区、县级市、旗) county
镇(乡、城镇) town
村(村庄) village
运营商 isp
IP ip
(2)IP表
国家代码 2个字节 CHAR(2)
县代码 6位整形 UINT(20)
村代码 12位整形 UINT(40)
运营商代码 7位整形 UINT(24)
IP地址 4个字节 UINT(32)
(3)国家表
二位字母 2个字节 CHAR(2)
三位字母 3个字节 CHAR(3)
三位数字 3位整形 UINT(10)
ISO英文用名 48个字节 CHAR(48)
中文用名 48个字节 CHAR(48)
(4)地区表
代码 1位整形 UINT(4)
名称 4个字节 CHAR(4)
(5)县(市辖区、县级市、旗)表
代码 6位整形 UINT(20)
名称 48个字节 CHAR(48)
(6)村(村庄)表
代码 12位整形 UINT(40)
名称 48个字节 CHAR(48)
(7)运营商表
代码 7位整形 UINT(24)
名称 48个字节 CHAR(48)
4、数据采集
IP运营商信息来源于各个运营商,IP所属地域信息来源于CNNIC,不过这些信息不太容易拿到完整的。
所以,此处就以淘宝IP地址库为来源。
5、实现方案
使用 nodejs + python 实现,nodejs主要实现网络交互集中的部分,python主要实现网页抓取。数据库使用常见的 mysql。
(1)国家代码抓取
使用 python 实现从
http://zh.wikipedia.org/wiki/ISO_3166-1 地址抓取代码信息,并保存文本country.txt。当然,也可以直接手动拷贝粘贴到文本中。
使用 nodejs 按行读取上一步抓取到的文本,做处理,使用 node-mysql 写入数据库。
(2)县代码抓取
使用 python 实现从
http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html 地址抓取代码信息,并保存文本cncounty.txt。当然,也可以直接手动拷贝粘贴到文本中。
使用 nodejs 按行读取上一步抓取到的文本,做处理,使用 node-mysql 写入数据库。
(3)国内IP段抓取
使用 python 实现从
http://ipblock.chacuo.net/ 地址抓取IP段信息,并保存文本cnip.txt。当然,也可以直接手动拷贝粘贴到文本中。
(4)IP地址信息查询
使用 nodejs 读取 cnip.txt 文本,每次解析10000个IP,使用 http 模块从淘宝IP地址库查询结果,并使用 node-mysql 写入数据库。
由于在 nodejs 中 http 处理和 mysql 处理都是异步操作,所以,增加一个缓冲区,保存http请求结果。笔者使用了经典的生产者消费者模型来处理这个问题。
6、结果
为了保证请求的稳定,使用阿里云服务器运行此系统。
实际运行时,每秒可以稳定的请求到5个IP信息,中国目前(截止2014年1月)拥有3.3亿IP,完成全部请求大约需要2.98天。
完成全部存储,数据库大小为22.3GB。
转载请注明来自隐居士(石硕)的CSDN博客:blog.csdn.net/shishuo365
如有疑问请发邮件shishuo365#126.com(将#更换为@)

存储过程是MySQL中的预编译SQL语句集合,用于提高性能和简化复杂操作。1.提高性能:首次编译后,后续调用无需重新编译。2.提高安全性:通过权限控制限制数据表访问。3.简化复杂操作:将多条SQL语句组合,简化应用层逻辑。

MySQL查询缓存的工作原理是通过存储SELECT查询的结果,当相同查询再次执行时,直接返回缓存结果。1)查询缓存提高数据库读取性能,通过哈希值查找缓存结果。2)配置简单,在MySQL配置文件中设置query_cache_type和query_cache_size。3)使用SQL_NO_CACHE关键字可以禁用特定查询的缓存。4)在高频更新环境中,查询缓存可能导致性能瓶颈,需通过监控和调整参数优化使用。

MySQL被广泛应用于各种项目中的原因包括:1.高性能与可扩展性,支持多种存储引擎;2.易于使用和维护,配置简单且工具丰富;3.丰富的生态系统,吸引大量社区和第三方工具支持;4.跨平台支持,适用于多种操作系统。

MySQL数据库升级的步骤包括:1.备份数据库,2.停止当前MySQL服务,3.安装新版本MySQL,4.启动新版本MySQL服务,5.恢复数据库。升级过程需注意兼容性问题,并可使用高级工具如PerconaToolkit进行测试和优化。

MySQL备份策略包括逻辑备份、物理备份、增量备份、基于复制的备份和云备份。1.逻辑备份使用mysqldump导出数据库结构和数据,适合小型数据库和版本迁移。2.物理备份通过复制数据文件,速度快且全面,但需数据库一致性。3.增量备份利用二进制日志记录变化,适用于大型数据库。4.基于复制的备份通过从服务器备份,减少对生产系统的影响。5.云备份如AmazonRDS提供自动化解决方案,但成本和控制需考虑。选择策略时应考虑数据库大小、停机容忍度、恢复时间和恢复点目标。

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

在MySQL中优化数据库模式设计可通过以下步骤提升性能:1.索引优化:在常用查询列上创建索引,平衡查询和插入更新的开销。2.表结构优化:通过规范化或反规范化减少数据冗余,提高访问效率。3.数据类型选择:使用合适的数据类型,如INT替代VARCHAR,减少存储空间。4.分区和分表:对于大数据量,使用分区和分表分散数据,提升查询和维护效率。

tooptimizemysqlperformance,lofterTheSeSteps:1)inasemproperIndexingTospeedUpqueries,2)使用ExplaintplaintoAnalyzeandoptimizequeryPerformance,3)ActiveServerConfigurationStersLikeTlikeTlikeTlikeIkeLikeIkeIkeLikeIkeLikeIkeLikeIkeLikeNodb_buffer_pool_sizizeandmax_connections,4)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

WebStorm Mac版
好用的JavaScript开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版
视觉化网页开发工具