在RAM + Server性能中缓存MaxMind City绑定数据库

时间:2012-02-22 12:54:57

标签: php performance caching geoip

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

回到主题:

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

服务器:

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

RAM:16384 MB

HDD:400 GB

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

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

谢谢!

1 个答案:

答案 0 :(得分:3)

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