python - 哪个更快?内存缓存还是文件查询? (使用 maxmind geoip.dat 文件)

标签 python google-app-engine optimization memcached

我在 Appengine 上使用 Python 并正在查找 IP 地址的地理位置,如下所示:

import pygeoip
gi = pygeoip.GeoIP('GeoIP.dat')
Location = gi.country_code_by_addr(self.request.remote_addr)

(pygeoip 可以在这里找到:http://code.google.com/p/pygeoip/)

我想为用户定位我的应用程序的每个页面,所以目前我查找 IP 地址一次,然后将其存储在内存缓存中。

我的问题 - 哪个更快?每次从 .dat 文件中查找 IP 地址或从内存缓存中获取它?还有其他我需要注意的优点/缺点吗?

对于像这样的一般查询,是否有好的指南可以教我如何优化我的代码并自己运行速度测试?我是 python 和一般编码的新手,如果这是一个基本概念,我深表歉意。

谢谢!

汤姆

编辑:感谢您的回复,内存缓存似乎是正确的答案。我认为 Nick 和 Lennart 建议我将整个 gi 变量添加到内存缓存中。我认为这是可能的。仅供引用 - 整个 GeoIP.dat 文件刚刚超过 1MB,所以不是那么大。

最佳答案

需要时间的是从 dat 文件加载数据库。一旦你把它记在内存中,查找时间就不重要了。因此,如果您可以将 gi 变量保存在内存中,这似乎是最好的解决方案。

如果你不能,你可能也不能使用 memcached。

关于python - 哪个更快?内存缓存还是文件查询? (使用 maxmind geoip.dat 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4569780/

相关文章:

python - Xen客户端系统下的NumPy

python - Matplotlib 直方图(基础题)

google-app-engine - 消息队列与任务队列的区别

optimization - 如果更新失败,MySQL 函数插入记录?

python - 从 Apache 日志文件获取 Pandas 数据框

python - 用python删除文件中的最后一行

python - 动态创建的方法和装饰器,得到错误 'functools.partial' 对象没有属性 '__module__'

java - 应用程序部署后的函数调用

google-app-engine - 如何在 Google Cloud Platform 上为 font awesome new CDN 设置 "Access-Control-Allow-Origin" header ?

php - 优化 MySQL 或 PHP 的搜索功能