保存搜索结果的最佳方法

时间:2016-05-16 12:20:05

标签: php mysql

我有这个功能:

function dist($addr, $addr2){
    $url = 'https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins='.urlencode($addr).'&destinations='.urlencode($addr2).'&key=<key>';
    $json = curl_download($url);
    //$json = preg_replace('/^\xEF\xBB\xBF/', '', $json);
    $array = json_decode($json, TRUE);
    return $array['rows'][0]['elements'][0]['distance']['text'];
}

使用google api计算两个位置之间的距离。该函数每次调用通常需要0.3-0.6秒。所以我想做的是“缓存”结果,所以不需要每次都调用url?将结果和搜索条件放在DB中是最好的方法吗?然后在使用函数

之前检查它们是否在DB中

如何加快搜索速度并尽可能快地加载页面?

3 个答案:

答案 0 :(得分:0)

这是现实吗?我不知道您的应用程序的用途,但如果用户可以输入任何地址,则会有一个接近无限的距离列表。这种繁重计算的平均等待时间平均为半秒,速度极快。挖掘数据库中的数百万条记录比API调用花费更多时间。

但是,如果通常使用相同的参数(因此地址)调用此方法,则设置一个小数据库甚至是具有该结果的JSON文件可能不是一个坏主意。 JSON比MySQL快很多,所以如果你真的需要缓存结果,我会使用它。

答案 1 :(得分:0)

我们倾向于使用name/key value商店来做类似的事情。

您有一个表,它只存储请求参数和返回响应。

Key1 | Key2 | Value | 
POSTCODE1 | POSTCODE2 | {response from google} |

现在,在您进行谷歌搜索之前,先检查此表,如果存在,只需使用响应即可。如果它不存在,那么进行查找,并将其存储在数据库中。

我应该指出,我相信Google在他们的ToS中说你不应该缓存这些数据。

答案 2 :(得分:0)

你可以将结果保存在Redis(http://redis.io/)中这是一个内存中的数据库Ram,速度很棒。 :d