Answer the question
In order to leave comments, you need to log in
Importing large price lists into a MySQL database?
Привет всем. Делаю интернет-магазин на фреймворке CodeIgniter. Возник вопрос импорта крупных CSV прайсов (от 700тыс. позиций) по крону раз в сутки.
Как правильно разбить загрузку в скрипте чтобы скрипт после прохода 500 строк и импорта их в базу редиректился сам на себя, передавая оффсет и начинал импорт со следующих 500 строк? Или как это еще реализуется что бы успеть по таймауту и без использования ajax?
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
include(APPPATH . 'libraries/vendor/PHPExcel/Classes/PHPExcel.php');
# include parseCSV class.
include(APPPATH . 'libraries/vendor/parsecsv.lib.php');
class Import extends CI_Controller {
public function import_cross()
{
set_time_limit(0);
$data = array();
$csv_file = FCPATH.'FTP/cross.csv';
$count = count(file($csv_file));
for ($i=1; $i < $count; $i+500) {
$csv = new parseCSV();
$csv->delimiter = ';';
$csv->offset = $i;
$csv->limit = 500;
$csv->parse($csv_file);
foreach ($csv->data as $csv) {
$data[] = array(
'cross_proizv' => $csv[0],
'cross_articul' => $csv[1],
'cross_original_list' => $csv[2],
);
}
$this->db->insert_batch('sp_cross', $data);
unset($csv);
unset($data);
}
}
}
Answer the question
In order to leave comments, you need to log in
// отключаем индексы
ALTER TABLE db.my_table DISABLE KEYS;
// Затем загружаем огромный файл
LOAD DATA INFILE 'price.csv' INTO TABLE db.my_table;
// включаем индексы
ALTER TABLE db.my_table ENABLE KEYS;
If cron is available on the server, then simply php %php_script_file.php% and there should not be any timeout, this is cli.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question