我正在处理不少于25,000条记录。但是,它以某种方式超过了最大执行时间。我正在使用Codeigniter 3.0。
记录是我制作的库处理过的PDF文本数据。如果仅显示它,似乎并没有超过执行时间,但是当事情开始变得复杂时,例如将其处理到数据库(MySQL),它就会超过300sec(我重新配置了)执行时间。
为了说明
function process() {
$data = processThePDF(); //outputs the records / 25,000 records
if ($data) {
foreach ($data as $dt) {
$info = $this->just_another_model->view($dt['id']); //get the old record
if ($info) {
//update
$this->just_another_model->update([$params]);
//Log Update
$this->just_another_model->log([$params]);
} else {
//Register
$this->just_another_model->update([$params]);
//Log Register
$this->just_another_model->log([$params]);
}
}
}
}
所以我的问题是: 1.是否有更好的方法来优化此效果? 2.在处理之前写一个json文件或文本文件是否方便?
答案 0 :(得分:0)
将数据存储在数组中,并批量更新/插入。
function process() {
$data = processThePDF(); //outputs the records / 25,000 records
$update_data = array();
$update_data_2 = array();
if ($data) {
foreach ($data as $dt) {
$info = $this->just_another_model->view($dt['id']); //get the old record
if ($info) {
$update_data[] = array($params);
} else {
$update_data_2[] = array($params);
}
}
if(count(update_data) > 0)
$this->just_another_model->update_batch($update_data);
if(count(update_data_2) > 0)
$this->just_another_model_2->update_batch($update_data_2);
}
此外,您可以在循环之前分批获取旧记录并将其格式化为数组,以便可以通过id $old_records[$dt['id']]