此代码仅适用于包含大约1K记录的csv文件。但是,如果我尝试插入文件,让它说100K,它就会挂起。 我在网上搜索并发现了许多建议,比如调整php超时执行,增加为php分配的内存(这有点帮助),但我需要导入大数据文件,如100万条记录。
我正在使用codeigniter。 有没有办法加快这个过程: 关于这个功能的描述: - 第一个" INSERT INTO"插入表="客户端"登录的客户端(admin_id)和时间创建的(create_time)。
- 第二个" INSERT INTO"插入表=" client_attribute_value" attribute_id,client_id和value。
function Add_multiple_users($values)
{
$err = '';
foreach($values as $rows)
{
$clientQuery = 'INSERT INTO
client
(
admin_id,
create_time
)
VALUES
(
"'.$this -> session -> userdata('user_id').'",
"'.date('Y-m-d H:i:s').'"
)';
$clientResult = @$this -> db -> query($clientQuery);
if($clientResult)
{
$client_id = $this -> db -> insert_id();
foreach($rows as $row)
{
$attrQuery = 'INSERT INTO
client_attribute_value
(
attribute_id,
client_id,
value
)
VALUES
(
"'.$row['attribute_id'].'",
"'.$client_id.'",
"'.addslashes(trim($row['value'])).'"
)';
$attrResult = @$this -> db -> query($attrQuery);
if(!$attrResult)
{
$err .= '<p class="box error">Could not add attribute for<br>
Attribute ID: '.$row['attribute_id'].'<br>
Client ID: '.$client_id.'<br>
Attribute Value: '.trim($row['value']).'</p>';
}
}
}
}
return $err;
}
答案 0 :(得分:0)
我之前已经处理过这个问题了。 How to parse Large CSV file without timing out?
上传文件本身或查找文件的位置并使用cron作业来处理它。没有超时。我个人做的方式是设置一个队列系统,其中包含一个指向该文件并具有状态标志的数据库表。一旦cron作业拿起那个项目,它就会开始插入CSV文件(当天结束时它的大小约为300mb)。一旦cron作业完成插入数据库,它将删除csv文件,更新该排队项目的状态,并通过电子邮件发送给我说它已完成。