Кодовый код 4 Пакетная Вставка

#sqlite #codeigniter-4

Вопрос:

Я использую CI4 для создания приложения, которое считывает список воспроизведения серий, содержащих более 100 тысяч записей.

Проблема в том, что это занимает много времени, а также истощает память даже после добавления:

 ini_set('memory_limit', '1024M');
ini_set('max_execution_time', -1);
 

Хорошо, я могу увеличить лимит памяти, но это все равно займет чертовски много времени.

Я вставляю в бд с помощью:

 $this->db->transStart();
$seriesTable = $this->db->table('tbl_series');
$seriesTable->emptyTable();
$seriesTable->insertBatch($series);
$this->db->transComplete();
 

И элемент $series массива (эпизод) выглядит следующим образом:

 $epidose = array(
  'clm_series_name' => $station['author'],
  'clm_series_media_url' => $station['media_url'],
  'clm_series_group' => $station['group'],
  'clm_series_square' => $station['thumb_square'],
  'clm_series_type' => $station['type'],
  'clm_series_season' => $station['season'],
  'clm_series_episode' => $station['episode']
);
 

Я хотел бы получить предложения о том, как сократить время выполнения.
Использование транзакций не помогло.

Есть какие-нибудь предложения?

Комментарии:

1. Вы должны предоставить более подробную информацию о том, » Использование транзакций не помогло «. Я не знаю воспламенителя кода, но обычный способ успешно увеличить скорость вставки в SQLite-это выполнять пакетные вставки (от нескольких сотен до нескольких тысяч в течение одной транзакции). Очень возможно, что CI4 и/или любая оболочка, которую вы используете между PHP и SQLite, выполняет собственную обработку транзакций, чтобы то, как вы пытались » использовать транзакции «, могло сработать не так, как вы надеялись. Покажите это, и кто-нибудь, кто знает CI4, возможно, сможет помочь.

2. Я вставил начало и конец транзакции, инкапсулируя пакетную вставку. Может быть, я сделал это действительно универсально и в принципе не сделал ничего особенного, но вот как я это попробовал (обновленный код). Не могли бы вы, пожалуйста, подробнее рассказать о пакетных вставках? Вы имеете в виду разбить массив на части и вставлять его по частям?