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