我一直在努力为我们的应用程序找到一个合适的GeoIP数据库,据我所知,MaxMind City可能是最好的(如果我错了,请告诉我!)。我目前正在试用免费版本,它在英国并不准确,但它可以用于测试目的。
所以回到主题:
我们的应用程序是用PHP编写的,最终我们会有很多传入流量。我们使用GeoIP数据库的原因是,我们需要在每次页面加载时显示城市、地区和国家,并将特定访问者的数据保存到mysql数据库中。因此,我开始考虑在每个页面请求上加载二进制数据会导致服务器消耗大量RAM,并提高处理速度。这就是为什么我想知道是否有可能将其缓存在RAM中并用PHP进行处理,因为它是26Mb(我知道它看起来可能不多),但当我们开始每秒收到数千个页面请求时,这将导致性能下降,而我们显然希望避免这种情况。
服务器:
处理器:16 GHz(8 x 2 GHz)
内存:16384 MB
HDD:400 GB
Apache+Nginx+Varnish、PHP5.3、MySQL5.1
我们对大规模应用程序开发还很陌生,所以如果您对如何提高总体性能有任何建议,或者对我们的案例有任何其他与提高性能有关的提示,请告诉我。
谢谢!
我们将MaxMinds GeoIP City用于Adserver应用程序(因此流量非常大)。一些基于MaxMind测试脚本的测试将数据库放入内存,对我们来说效率不够。因为每个PHP进程都缓存了数据。因此,我们决定将这两个表(ip2location和city)放入MySQL中(您必须下载CSV文件),MySQL也会将表缓存在内存中,因为它们非常小。使用ip2location
表上的聚集索引,我们可以在大约10ms的时间内查询loc_id
的IP,所以您只需要基于该loc_id
获取城市数据,但这也应该非常快。