Главная > Unix-like, Администрирование > Linux: Как ускорить вставку большого объёма данных в sqlite3?

Linux: Как ускорить вставку большого объёма данных в sqlite3?

К сожалению, мой первый и, пока, единственный SSD-диск сдох около месяца назад, а вот возможность где бы он мог проявить всю свою мощь появилась буквально только что. Мне предстояло импортировать достаточно большой объём JSON-данных в БД на sqlite3 через Django, а именно - надо было перенести около 150MB в эту БД (для sqlite3 это достаточно много, на мой взгляд). Код импорта я писал сам, поэтому его ещё предстояло отладить, писать тесты почти бесполезно, т.к. исходные данные были не идеальные и не всегда консистентные, ошибки исходных данных находились и обрабатывались индивидуально.

Когда мне надоело ловить очередной баг на 20-30-40 минутах импорта, я задумался о том, как можно ускорить свою работу и вспомнил что как-то слышал о ramdisk'е, который даёт возможность создать файловую систему в RAM.

Как вариант, в linux, вы можете использовать tmpfs (так же известную как shmfs). Эта реализация файловой системы выделяет память динамически и перемещает неиспользуемые страницы в swap. На большинстве современных дистрибутивов вы можете использовать уже подмонтированную tmpfs просто переместив свою БД в /run/shm, либо, создав и подмонтировав эту FS вручную.

Однако, стоит помнить, что если у вас мало памяти и большой объём данных, то это может привести к ухудшению производительности - система начнёт активно использовать swap. Так же не стоит там хранить данные постоянно, т.к. это RAM-память, а значит, после перезагрузки все данные в ней будут утеряны.

После переноса sqlite3-БД в /run/shm/ на время импорта данных мне понадобилось около минуты чтобы достигнуть того же прогресса, что и после 25-минутного импорта при использовании HDD.

Кажется, в Windows тоже есть что-то подобное, однако, заметка не об этой ОС.

Пожалуйста, оцените полезность и качество данной статьи. Одна звезда - плохо, 5 - хорошо.
1/5. Мы будем признательны, если вы напишете комментарий с причиной низкой оценки.2/5. Мы будем признательны, если вы напишете комментарий с причиной низкой оценки.3/5. Мы будем признательны, если вы напишете комментарий с причиной низкой оценки.4/5.5/5. (Еще не оценили)
Загрузка...
  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.