database - GeoIP 查找——选项和数据持久性

标签 database rest location geoip

尝试确定 GeoIP 查找的最佳解决方案。

选项似乎是:
1.下载高级数据库并进行查找
2.下载免费数据库并进行查找
3. 使用免费的 Web API
4. 使用付费网络 API。

我们必须在用户登录时执行此操作,因此这种情况会经常发生。

一个重要的问题是 IP 地址位置是否发生变化,如果发生变化,频率如何。例如,我们可以使用免费的 Web API 构建我们自己的数据库,存储它返回给我们的每个 IP 位置,但这只有在它们相对持久的情况下才可行。

此外,我们查看的付费数据库每月更新一次,这可能还不够,具体取决于这些更改是否/频率如何。

谢谢!

最佳答案

无法保证某个位置的 IP 持久性如何。事实上,有些公司充当 IPv4 地址的经纪人,因为我们的 IPv4 地址开始不足。 MIT 拥有的 18.0.0.0/8 可能已经在一个地方呆了 30 年了。其他人可能搬家的次数更多。

就维护来自某种 Web API 的地址的本地缓存而言,我建议不要这样做。如果您执行 1:1 IP->lat/long 表,则总共有 2^32 个条目,每个条目 50 字节 = 200GB。显然,这些可以被压缩到子网等中,但现在您开始做 GeoIP 公司非常擅长的工作,并且拥有显着的领先优势。 Debian 附带的免费 IP->国家数据库仅安装在我的机器上 5MB。

从程序员生产力的角度来看,在速度和可靠性方面,很难用客户端库击败可下载数据库。

MaxMind 拥有 IP->国家和 IP->城市的免费数据库,但您必须在您的网站/产品上添加通知,例如“该产品包括由 MaxMind 创建的 GeoLite 数据,可从 http://www.maxmind.com 获取”。商业决策多于技术决策。

关于database - GeoIP 查找——选项和数据持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654073/

相关文章:

ios - 使用预填充的 Parse 数据存储发送 iOS 应用程序

mysql - 关系中的 SQL 搜索

java - 从 H2 1.3.175 迁移到 1.4.195 的推荐方法是什么

java - MULTIPART_FORM_DATA : No injection source found for a parameter of type public javax. ws.rs.core.Response

ios - 在 IOS 中从蜂窝网络获取纬度和经度

php - 检查mysql字段是否包含mysql查询中的某个数字

ruby-on-rails - ruby rails : cURL DELETE token authentication

java - 如何仅使用一个 HTTP 请求(JSON 文件)实例化 2 个不同的对象

java - 将窗口对话框或框架附加到另一个的磁性效果

javascript - window.location.hash 在 Chrome 中刷新?