当前位置: 首页 > 知识库问答 >
问题:

如何加快cron作业/数据库更新

章子航
2023-03-14

我有一个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次!

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

共有1个答案

令狐阳秋
2023-03-14

这看起来并不复杂,应该在几秒钟内运行。所以在不知道数据库的情况下,我的第一个猜测是数据库中缺少索引。因此,请检查您的id字段上是否有索引。如果您的代码> ID 字段不是您唯一的密钥,您应该考虑在2个字段上添加另一个索引:代码> ID <代码>和<代码>小时<代码>。如果这些还没有出现,这应该可以节省大量时间。

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

 类似资料:
  • 我不熟悉使用cron job。我甚至不知道怎么写。我试着在网上搜索,但还是不太懂。我想创建一个cron作业,它每分钟都会执行我的代码。我正在使用PHP创建它。它不起作用。 示例 run.php(每分钟都会执行的代码) cron.php 假设这两个文件在同一个文件夹中。 是我做错的代码吗?如果有问题,请告诉我如何解决。

  • 我有一些数据库表,我在其中插入数据在每个月手动,它是重复的条目,插入在同一天,在1日,从我的laravel应用程序的相同数量。我是laravel新手,所以我想知道如何在cron作业处理函数中编写代码,以便在db表MySQL中插入循环数据。请让我知道一些可能的代码和引用。真的很感谢你的帮助。

  • 问题内容: 我正在为我的网站使用Codeigniter。我必须使用cron作业来运行控制器功能之一。我在网站上使用路线。而且我不在网址中使用index.php。 例如http://my-domain.com/welcome/show,这里Welcome是我的控制器,而show是该控制器的功能名称。 我已经习惯了 它给出了“没有这样的目录” 如何在CPANEL中为上述网址设置cron jon。 谢谢

  • 我试图写一个过程,它从存储在数据库中的一组记录中读取cron表达式,并运行一个作业(如果该表达式在接下来的一个小时内触发,则执行一个程序)。数据库中带有cron表达式的记录可以有不同的触发时间(如星期五或每小时等)。 带有cron表达式的表示例。 用户可以更新表中的crons。 设计这种应用程序的最佳方式是什么? 我在这里看到的主要问题如下:假设我每1小时运行一次工作,并在接下来的一个小时内记录计