如何加快我的cron作业/数据库更新速度

时间:2017-11-25 18:51:53

标签: php mysql cron

我有一个每小时运行一次的cron作业,用来自API的每小时数据更新本地数据库。

数据库按行存储每小时数据,API返回24个数据点,代表过去24小时。

有时会错过数据点,所以当我收回数据时,我只能更新最新的小时 - 我还需要检查我之前是否有这些数据,并填写找到空白的任何空白。< / p>

所有东西都在运行和运行,但是cron作业每次至少需要30分钟才能完成,我想知道是否有办法让这次运行更好/更快/更有效率?

我的代码执行以下操作:(简洁的摘要代码!)

// loop through the 24 data points returned
for($i=0; $i<24; $i+=1) {

// check if the data is for today, because the past 24 hours data will include data from yesterday
if ($thisDate == $todaysDate) {

// check if data for this id and this time already exists
$query1 = "SELECT reference FROM mydatabase WHERE ((id='$id') AND (hour='$thisTime'))";

// if it doesnt exist, insert it
if ($datafound==0) {
$query2 = "INSERT INTO mydatabase (id,hour,data_01) VALUES ('$id','$thisTime','$thisData')";
}

}
}

并且有1500个不同的ID,所以这样做了1500次!

有什么方法可以加快或优化这段代码,使其运行得更快更有效率?

1 个答案:

答案 0 :(得分:1)

这似乎并不复杂,应该在几秒钟内运行。所以我不知道你的数据库的第一个猜测是你缺少数据库的索引。因此,请检查id字段中是否有索引。如果您的id字段不是您的唯一键,则应考虑在2个字段idhour上添加其他索引。如果这些已经存在,那么这将导致大量的时间节省。

另一个想法可能是在单个sql查询中检索过去24小时内的所有数据,将值存储在数组中并执行检查,如果您已经只在阵列上读取了这些数据。