PHP百万大数据快速写入mysql数据库的简单测试
之前因工作需求,需要写一个产品的防伪码,16位纯数字字符串,要求录入数据库50W条数据,简单寻找了方法来实现数据库大数据量的写入。方法可能并不是最好的方法,但对于写入百万数据也是可以接受的。
50w数据确保是唯一的,暂定为code字段,且用户查询后便失效。code值务必是unique,添加字段ischecked来判断该防伪码是否被查询过,切记要为code字段创建索引。
防伪码的创建可自行书写,这里只是简单的来测试下数据的录入,简单的测试代码如下:
set_time_limit(0);
try{$conn = new PDO('mysql:host=localhost;dbname=test','root','');
}catch(PDOException $e){
echo $e->getMessage(); die;
}
$min = 10000;
$max = 99999;
$num = 2000000;
$rand = 1;
$start = microtime(true);
$sql = 'insert into code(code) values(1)';
for ($i=0; $i < $num; $i++) {$rand = mt_rand($min, $max); $sql .= ", ('$rand')";
}
$res = $conn->query($sql);$end = microtime(true);
echo round($end - $start , 4);
注意几点:
- set_time_limit(0); //取消时间限制
- SET GLOBAL max_allowed_packet=3210241024; //mysql设置,处理大数据信息
- show VARIABLES like '%max_allowed_packet%'; //mysql查看当前最大允许值
简单测试200w条数据写入,大约需要不到30s的时间(当然,测试字符串仅仅为5位数,比实际要求的16位还是有差距的),不过还是一个可以满足需求的做法。