Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将大量数据插入MySQL_Php_Mysql_Cron - Fatal编程技术网

使用PHP将大量数据插入MySQL

使用PHP将大量数据插入MySQL,php,mysql,cron,Php,Mysql,Cron,所以我的情况如下。我每24小时通过PHP从某个来源获取数据。现在,在这段时间内,这些数据被更改,新的数据被添加或更新。现在,当我每24小时运行一个查询以插入或更新此数据时,执行查询需要很长时间。如果执行时间适中,这不会是一个问题,因为我正计划将其作为一个cron作业,但是现在执行时间太长了。 所以当我获得这些数据时,我正在考虑将这些数据从PHP写入CSV文件。然后将这个CSV文件与MySQL LOAD DATA函数一起使用,该函数可以非常快速地从文件中插入大量数据 因此,问题是是否可以从PHP写

所以我的情况如下。我每24小时通过PHP从某个来源获取数据。现在,在这段时间内,这些数据被更改,新的数据被添加或更新。现在,当我每24小时运行一个查询以插入或更新此数据时,执行查询需要很长时间。如果执行时间适中,这不会是一个问题,因为我正计划将其作为一个cron作业,但是现在执行时间太长了。 所以当我获得这些数据时,我正在考虑将这些数据从PHP写入CSV文件。然后将这个CSV文件与
MySQL LOAD DATA
函数一起使用,该函数可以非常快速地从文件中插入大量数据

因此,问题是是否可以从PHP写入CSV文件,并以适合
加载数据填充
功能的方式对其进行格式化,以及如何在24小时内删除该CSV并使用新插入的数据创建一个新的CSV,我如何正确地使用
LOAD DATA infle
函数来处理这个特定的CSV文件?哦,我能用这一切做一个cron工作吗?谢谢。

您可以阅读该语句,它非常灵活,您可以指定字段、行分隔符和许多其他功能。这将允许您以您想要的任何格式制作csv。
加载数据
确实是在mysql中插入数据的最快方式

在php中,您可以非常简单地将数据写入文件,如图所示


在此之后,您确实需要一个cron作业来加载mysql中的文件,这应该会有所帮助。

假设您从源代码接收数据并准备此数组:

$x=array(1=>array('1','2','3','4'), 2=>array('5','6','7','8'));
创建如下所示的csv文件:

    $file=fopen(<DIRECTORY_PATH>."file.csv","w");
    if(!$file){
       //error
    }

    $csv_data="";

    foreach($x as $row){
     foreach($row as $element){
        $csv_data.=$element.", ";
     }
    //remove the last comma
    $csv_data.="\n";

    }

    fwrite($file,$csv_data);

$query="load data infile '".<DIRECTORY_PATH>."file.csv"."' into table your_table";
if(!mysqli->query($query))
 printf("Error: %s\n", $mysqli->error);
$file=fopen(“.file.csv”,“w”);
如果(!$file){
//错误
}
$csv_data=“”;
外汇($x作为$row){
foreach($行作为$元素){
$csv_数据=$element.“,”;
}
//删除最后一个逗号
$csv_数据=“\n”;
}
fwrite($file,$csv_数据);
$query=“加载数据填充”“文件.csv”“到您的表中”;
如果(!mysqli->query($query))
printf(“错误:%s\n”,$mysqli->Error);

您是否尝试过使用批插入?一个查询中的多个插入比每个查询中的一个插入更快。请看这是正确的程序,实际上您描述了完成此任务的正确方法。简而言之,答案是:是的。批量插入在这里对我没有帮助。我是否需要制作一个cron作业,每24小时用这个新数据生成一个csv文件,然后制作一个mysql过程,使用LOAD data将这个csv插入到表中,或者我可以以某种方式将这两个任务合并到一个cron作业中。为什么批量插入对你没有帮助?您必须插入多少行?我已经尝试过批量插入,它的速度至少快了6倍(至少在我的情况下),记录超过100k。它们不到几秒钟。另外,我使用带有外键的innoDB,速度较慢。