使用Python API实现MaxMind IP查找速度

时间:2014-02-04 16:27:56

标签: python performance python-2.7 maxmind

我正在构建一个脚本来处理Web服务器日志,我试图将MaxMinds的IP数据集(http://dev.maxmind.com/geoip/legacy/geolite/)合并到脚本中,以便让国家/地区获得热门来自。

目前,我的脚本工作正常,我只需要提取我想要的信息,但是当我尝试添加IP查找时,它减慢了很多 - 大约1800%。所以,我很好奇这是否与我的代码有关,或者是否有办法让我加快速度。

例如,当我运行以下代码提取日期和IP地址时,对于此实验,它花了大约6.5秒。

extractedData = []

for log in logList:
    ip = log[-1]
    date = log[0]
    dateIP = [date, ip]
    extractedData.append(dateIP)

当我添加pyGeoIP并尝试合并国家/地区代码时,它会变慢。以下代码需要2分钟和7个密码才能运行。

extractedData = []

gi = pygeoip.GeoIP('/path/to/GeoIP.dat') 

for log in logList:
    ip = log[-1]
    country = gi.country_name_by_addr(ip)
    date = log[0]
    dateCountry = [date, country]
    extractedData.append(dateCountry)

那么,有没有办法加快速度,因为这种查找速度会降低太多。

谢谢!

2 个答案:

答案 0 :(得分:2)

由于您正在进行许多查询,因此应将数据库加载到内存中。就目前而言,你是在反复阅读磁盘,这是非常缓慢的。

交换此行:

gi = pygeoip.GeoIP('/path/to/GeoIP.dat') 

到此:

gi = pygeoip.GeoIP('/path/to/GeoIP.dat', pygeoip.MEMORY_CACHE) 

答案 1 :(得分:0)

我有同样的问题,但在CentOS盒子上尝试了Python和PHP。通过Python脚本运行3M ip-addresses花了19.5分钟。应用MEMORY_CACHE优化将其降低到8分钟。通过PHP脚本运行相同的数据需要2-2 / 3分钟。