卷曲与远程数据库对本地文件?

时间:2011-09-08 12:08:00

标签: php mysql performance curl

我正在开发一个需要根据IP地址获取国家/地区代码的系统,并且需要在多个服务器上访问各种形状和大小的多个应用程序。

目前,这是通过对先前存在的geo.php库的cURL请求获得的,我认为该库从从MaxMind下载的.dat文件中解析了国家/地区代码。显然,虽然这种方法在重负载下遇到了问题,可能是由于内存泄漏?没人确定。

向我建议的权力是我们应该免除cURLing并从本地地理编码库中获取国家代码,数据也存储在本地文件中。或者可能是托管在例如Amazon S3上的主文件。当然,我有点担心在一百个不同的地方不必要地存储大量的IP到国家的查找文件。

我做过的一件事就是将数据放在mysql数据库中,并通过连接到那里获得所需的结果;我不确定,但在我看来,我们的网站通常在连接到集中式mysql数据时运行迅速有效,所以这不是解决这个特定问题的好方法吗?

我的问题是:以不同方式获取数据的相对开销是多少? cURLing in,向远程数据库发出请求,从本地文件获取它,从托管在其他地方的文件中获取它?很难弄清楚哪些更有效率或效率更低,以及效率的相对提高是否足够重要......

2 个答案:

答案 0 :(得分:0)

你以错误的方式陈述这个问题 只有两种不同的方法:

  • 网络查询
  • 本地资源请求

只有一个答案:

在提供客户请求时,切勿进行任何网络查询。

因此,只要您访问本地资源(好的 - 在同一数据中心的限制内) - 您就可以了。
如果你要求一些遥远的资源 - 无论是卷曲或数据库还是其他什么 - 你都遇到了麻烦。

这条规则对我来说显而易见。

答案 1 :(得分:0)

我有一个网站使用cURL从maxmind获取国家代码文本大约1。5年,据我所知没有问题。我做过的一件事是为cURL请求设置了~1-2秒的超时,如果没有命中,则默认返回到设置的国家代码。我相信,我们经历了大约100万次查询到maxmind,所以它必须被使用....如果它在那段时间没有达到它,我不想再减慢页面速度了。这是使用外部库的主要缺点 - 依赖于它们的响应时间。

至于在本地使用它,最需要关注的是:它是否会在一年后更新?显然,您无法从当前的IPv4池中获取更多不同的IP地址,但可能的ISP可以在不同的国家/地区购买/销售/交易IP(我不知道它是如何工作的,但我已经看到了大量的IP不同的国家,他们似乎永远不会有任何模式lol)。如果没有发生,请忽略该部分:p。关于在本地使用它的另一件事是您可以使用mysql查询缓存来存储结果,这样您就不必担心后续页面加载时的资源,或者只是做我做的并将其存储在Cookie中并首先检查在cURLing(或进行查找)之前。