Тема: Експорт великого csv файлу в БД SQLite
Вітаю, підкажіть будь-ласка спосіб для міграції великих об'ємів даних (1 млн. рядків, 12 стовпчиків) із csv файлу в базу даних SQLite (не вдаючись до итерації в циклі, це дуже повільно та неефективно).
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C#, .NET → Експорт великого csv файлу в БД SQLite
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Вітаю, підкажіть будь-ласка спосіб для міграції великих об'ємів даних (1 млн. рядків, 12 стовпчиків) із csv файлу в базу даних SQLite (не вдаючись до итерації в циклі, це дуже повільно та неефективно).
Здається, ваше питання:
https://stackoverflow.com/questions/171 … -of-sqlite
Там докрутили до 96000 INSERTів на секунду.
Спробую підсумувати те, що сказано там:
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 при зв'язуванні, але тоді стежте, щоб дані не зникли з пам'яті до виконання команди.
Останні дві поради за посиланням не вимірювалися.
Можу додати, що при можливості файл слід спершу розмістити в тій же файловій системі, де працює база, тоді виключимо ще певний відсоток затримки при трансфері між хостами.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися