Разработка & Кодинг Jul 18, 2026В закладки

Джулия Эванс публикует свои заметки о SQLite: ничего сенсационного, но очень полезно тем, кто сомневается в возможности запускать реальное приложение на этом небольшом файле.
Джулия Эванс — чьи зин и статьи обучили целое поколение разработчиков внутренним механизмам Linux, HTTP, DNS — 17 июля 2026 года опубликовала на своём блоге jvns.ca заметку под названием « Learning a few things about running SQLite ». Это не введение в тему и не религиозная проповедь: это полевой дневник человека, который запустил SQLite в продакшн на своём собственном сервисе и записал, что его удивило. Просто удовольствие.
Мы не будем спойлерить статью — прочитайте её сами, она короткая и на английском, — но несколько тем регулярно всплывают в обсуждениях SQLite в продакшн и стоит их напомнить тем, кто интересуется:
По умолчанию SQLite использует режим журнала DELETE, где записи блокируют чтение. В режиме WAL (Write-Ahead Logging) чтение больше не блокирует записи и наоборот:
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL; synchronous = NORMAL (вместо FULL) допускает потерю максимум последней транзакции при резком отключении питания в обмен на значительный прирост производительности. Именно так работают Litestream и большинство современных серверов SQLite.
В отличие от PostgreSQL, SQLite не параллелит записи. Классический паттерн на Rust или Go: одно соединение для записи, пул соединений для чтения. Так работает, например, библиотека rusqlite в связке с deadpool-sqlite с таким разделением, или библиотека Go mattn/go-sqlite3 с sql.DB, где SetMaxOpenConns(1) настроен для записи.
Создавать бэкап файла SQLite «на лету», когда транзакция ещё не завершена, — лучший способ получить повреждённый бэкап. Два инструмента правят бал:
SQLite легко выдерживает десятки тысяч запросов в секунду на одном файле, если включён WAL и правильно проиндексировано. Настоящий потолок — не в SQL, а в диске: NVMe локальный >> сетевой диск, EBS gp3 >> EFS. Многие провалы SQLite в продакшн происходят из-за того, что файл размещён на сетевом хранилище (например, NFS — SQLite прямо в документации sqlite.org/faq.html#q5 предупреждает об этом жирным шрифтом).
Точка зрения Джулии Эванс, как всегда, проста: попробовать, измерить, записать, что нашли. Никаких «SQLite масштабируется» или «вам нужен PostgreSQL для всего серьёзного». Просто: это поведение меня удивило, вот почему, вот что я изменила.
Для любого разработчика, который сомневается, стоит ли доставать тяжёлую артиллерию реляционных баз для односерверного приложения или side-проекта, такая статья стоит сотни синтетических бенчмарков.
Запрос `SELECT * FROM pragma_compile_options;` возвращает список флагов, с которыми был собран ваш бинарник SQLite. На Debian/Ubuntu часто отсутствует `SQLITE_ENABLE_FTS5` (полнотекстовый поиск). Проверьте перед тем, как строить на этом приложение.
Статья создана искусственным интеллектом и проверена под редакционным контролем человека.