3

我一直在尝试为我们的应用程序找到合适的 GeoIP 数据库,据我所知 MaxMind City 可能是最好的(如果我错了,请告诉我!)。我目前正在试用在英国并不准确的免费版本,但它可以用于测试目的。

那么回到主题:

我们的应用程序是用 PHP 编写的,最终我们将获得大量传入流量。我们将使用 GeoIP 数据库的原因是因为我们需要在每次页面加载时显示城市、地区、国家,并将特定访问者的数据保存到 mysql 数据库中。所以我开始认为在每个页面请求上加载二进制数据会导致服务器消耗大量 RAM 并会提高处理速度。这就是为什么我想知道是否有可能将它缓存在 RAM 中并使用 PHP 来处理它,因为它是 26Mb(我知道它可能看起来并不多),但是当我们开始每秒收到数千个页面请求时,这仍然是将导致我们显然希望避免的性能下降。

服务器:

处理器:16 GHz (8 x 2 GHz)

内存:16384 MB

硬盘:400 GB

Apache + Nginx + Varnish,PHP5.3,MySQL5.1

我们对大规模应用程序开发还很陌生,所以如果您对如何提高总体性能有任何建议,或者有任何其他与提高我们案例的性能相关的提示,请告诉我。

谢谢!

4

1 回答 1

4

我们将 MaxMinds GeoIP City 用于 Adserver 应用程序(因此流量非常大)。一些基于 MaxMind 将数据库放入内存的测试脚本的测试对我们来说效率不够。因为每个 PHP 进程都缓存了数据。所以我们决定将这两个表(ip2location 和 city)放到 MySQL 中(你必须下载 CSV 文件),这也会将表缓存在内存中,因为它们非常小。通过ip2location表上的聚集索引,我们可以loc_id在大约 10 毫秒内查询一个 IP,因此您只需要基于此获取城市数据loc_id,但这也应该非常快。

于 2012-02-22T13:09:37.410 回答