Оптимизация времени выполнения с PHP - PullRequest
0 голосов
/ 18 октября 2018

Я обрабатываю примерно не менее 25 000 записей.Однако это как-то превышает максимальное время выполнения.Я использую Codeigniter 3.0.

Записи - это текстовые данные из PDF-файла, обработанные созданной мной библиотекой.Казалось, что оно не превышает время выполнения, если я только показываю его, но когда все становится сложным, например, обработка его в базе данных (MySQL), оно превышает 300 секунд (я переконфигурировал это) время выполнения.

Чтобы проиллюстрировать

  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 или текстовый файл перед его обработкой?

1 Ответ

0 голосов
/ 18 октября 2018

Храните ваши данные в массиве и обновляйте / вставляйте их партиями.

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);
}

Более того, вы можете получить свои старые записи партиями перед циклом и отформатировать их в массив, чтобы вы могли получить к ним доступпо номеру: $old_records[$dt['id']]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...