#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. Я вставил начало и конец транзакции, инкапсулируя пакетную вставку. Может быть, я сделал это действительно универсально и в принципе не сделал ничего особенного, но вот как я это попробовал (обновленный код). Не могли бы вы, пожалуйста, подробнее рассказать о пакетных вставках? Вы имеете в виду разбить массив на части и вставлять его по частям?