保存搜索结果的最佳方式


Best way to save results for searching

我有这个函数:

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'];
}

使用谷歌api计算两个位置之间的距离。这个脚本每次调用函数通常需要0.3-0.6秒。所以我想做的是"缓存"结果,这样它就不需要每次都调用url了?将结果和搜索条件放在数据库中是最好的方式吗?然后在使用功能之前检查它们是否在DB中

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

这现实吗?我不知道你的应用程序是用来做什么的,但如果用户可以输入任何地址,就会有一个几乎无限的距离列表。对于如此繁重的计算,平均半秒的等待时间是非常快的。在数据库中挖掘数百万条记录比API调用花费更多的时间。

然而,如果经常使用相同的参数(因此是地址)调用此方法,则使用该结果建立一个小数据库甚至JSON文件可能不是一个坏主意。JSON比MySQL快很多,所以如果你真的必须缓存结果,我会使用它。

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

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

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

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

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

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