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 тоже есть что-то подобное, однако, заметка не об этой ОС.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: