[英]how can I speed up my cron job / database update
我有一个cron作业,每小时运行一次,用来自API的每小时数据更新本地数据库。
数据库按行存储每小时数据,API返回24个数据点,代表过去24小时。
有时会丢失一个数据点,所以当我取回数据时,我只能更新最近的时间-我还需要检查以前是否有此数据,并填补发现空白的任何空白。
一切都在运行,但每次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次!
有什么办法可以加快或优化此代码,使其运行得更快,更有效?
这似乎不太复杂,应该在几秒钟内运行。 因此,我不知道您的数据库的第一个猜测就是您缺少数据库的索引。 因此,请检查您的id
字段上是否有索引。 如果您的id
字段不是唯一键,则应考虑在2个字段id
和hour
上添加另一个索引。 如果还没有这些,那将节省大量时间。
另一个想法是在单个sql查询中检索过去24小时内的所有数据,将值存储在数组中,然后检查是否仅在数组中读取了该数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.