通常我们想要知道某个 IP 具体的地理位置,所以网络上出现了很多 IP 地理位置查询的服务,比如我们常用的 cip.cc 和 ipip.net 等。当我们想要在项目中使用时,通过 HTTP 查询的方式就不可行了,因为这通常是这些网站提供的收费服务。比如 ipip.net,其免费 API 每秒最多 5 次请求。
这时,如果有一个本地数据库,不仅不用受限于请求频率限制,而且还能降低了查询延迟。虽然 ipip.net 也提供免费版本的本地数据库,但其免费数据库不定期更新,而且国外的只能具体到国家。所以这里找到一个国外的数据库 GeoIP。他有免费版本和收费版本,区别就是收费的精度更高。
如果我们没有非常高的精度需求,选择免费的就足够了,可以在 这里 找到数据库的下载地址。一共有 3 类数据库,分别是 城市数据库,国家数据库以及 ASN 数据库。城市和国家就是对应的精度,每个月的第一个星期二更新,ASN 如果不需要则不用了解。其中每类分别提供 MaxMind DB 二进制格式 和 CSV 格式。
官方没有给出哪种格式的查询速度更快,但显而易见地, MaxMind DB 格式更小。如果你是将数据导入到本地的数据库,哪种格式的查询更快就无关紧要了。关于 MaxMind DB 格式的解析也不必担心,这个页面 提供了常见语言的 API,具体的使用方法就查看 API 文档吧。
官方还提供了一个自动更新程序 geoipupdate 来更新本地数据库。对于免费用户,查看 For Free GeoLite2 Databases 一节来修改配置文件。