1

Тема: Експорт великого csv файлу в БД SQLite

Вітаю, підкажіть будь-ласка спосіб для міграції великих об'ємів даних (1 млн. рядків, 12 стовпчиків) із csv файлу в базу даних SQLite (не вдаючись до итерації в циклі, це дуже повільно та неефективно).

2 Востаннє редагувалося koala (16.10.2020 09:35:25)

Re: Експорт великого csv файлу в БД SQLite

Здається, ваше питання:
https://stackoverflow.com/questions/171 … -of-sqlite

Там докрутили до 96000 INSERTів на секунду.

3

Re: Експорт великого csv файлу в БД SQLite

Спробую підсумувати те, що сказано там:
1. Використовуйте транзакцію. Тоді всі зміни (і всі гальма) настануть в кінці операції.
У прикладі швидкість зросла в 270 разів.
2. Використовуйте підготовлені вирази (prepared statement).
Швидкість зростає ще у 2 рази.
3. Відключити синхронізацію

PRAGMA synchronous = OFF

Ще +30% швидкості.
4. Перенести журнал у пам'ять

PRAGMA journal_mode = MEMORY

Ще +20%.
5. Створюйте індекс після додавання даних. Якщо він є - видаліть, потім створіть.
Ще +50%.
6. Збільште

PRAGMA page_size = 16384

наприклад. Звісно, якщо пам'ять не дуже важлива.
7. Використовуйте SQLITE_STATIC при зв'язуванні, але тоді стежте, щоб дані не зникли з пам'яті до виконання команди.

Останні дві поради за посиланням не вимірювалися.

Подякували: leofun011

4

Re: Експорт великого csv файлу в БД SQLite

Можу додати, що при можливості файл слід спершу розмістити в тій же файловій системі, де працює база, тоді виключимо ще певний відсоток затримки при трансфері між хостами.