Назад
Що Джулія Еванс дізналася про роботу SQLite за сайтом на Django
SiTech AI Team2 წთ. საკითხავი

Що Джулія Еванс дізналася про роботу SQLite за сайтом на Django

Вона розповідає про запит повнотекстового пошуку, який виконувався п'ять секунд, поки його не врятував ANALYZE, про очищення рядків, що валить воркерів, і про резервні копії з restic та Litestream.

Джулія Еванс опублікувала нотатки про роботу SQLite під сайтом на Django — це вже четвертий її вебпроєкт на вбудованій базі даних. Вона пише, що порада використовувати SQLite у продакшені для невеликого сайту слушна, але досвід підкреслив те, про що блоги зазвичай мовчать: SQLite усе одно база даних, бази даних складні, а їхня експлуатація — окреме вміння.

ANALYZE і запит на п'ять секунд

Першою несподіванкою став запит повнотекстового пошуку через розширення FTS5 до таблиці на 4000 рядків, який виконувався п'ять секунд. Запуск ANALYZE відразу скоротив його приблизно до 0,05 секунди. ANALYZE збирає статистику, яку планувальник запитів використовує для кращого плану; Еванс зізнається, що досі не знає, що саме було не так із початковим планом, і підозрює випадкову квадратичність. SQLite у вебпроєктах вона використовує з 2022 року, а про існування ANALYZE дізналася лише тепер.

Прибирання рядків складніше, ніж здається

Видалення зайвих рядків — наприклад, завершених завдань, які залишає django-tasks-db — уже кілька разів створювало проблеми. Коли команда прибирання триває довше п'яти секунд, інший воркер намагається писати в базу, перевищує налаштований п'ятисекундний ліміт, падає й забирає з собою віртуальну машину. Виходом стали прибирання малими партіями, щоб жоден запит не перевищував ліміт. За словами Еванс, цей випадок допоміг їй краще зрозуміти, чому комусь потрібна база на кшталт Postgres із кількома одночасними письменниками; можливо, для майбутніх прибирань вона плануватиме технічну перерву.

Резервні копії: restic і Litestream

Поточна рутина вивантажує базу через VACUUM INTO, стискає її та надсилає на S3 за допомогою restic — спершу розблоковуючи сховище, бо вбитий процес копіювання лишає замок, а потім прибираючи старі знімки. Нещодавно вона почала тестувати Litestream для інкрементальної реплікації з вікном збереження 400 годин — зокрема тому, що запуски restic іноді вбивав брак пам'яті. Копії контролюються сторожовим таймером, але відновлення авторка, за її словами, досі не перевіряла.

Щодо продуктивності Еванс навмисно спокійна: запити вона пише через Django ORM і не стежить за повільними планами, а база налічує близько 10 000 рядків і, за її очікуваннями, лишиться невеликою. Коли таблицям не потрібно жити разом, вона розносить їх у кілька файлів — цей підхід використано і в Mess with DNS, що працює на SQLite вже чотири роки, з 2022-го.

SSiTech

SiTech — веброзробка з підтримкою AI

Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.