intermediate
Limitations
Учитывайте write concurrency, network filesystem risk, extension availability, operational tooling и scale ceilings.
SQLite отличен в своих границах. За их пределами боль от конкуренции, среды деплоя и масштаба — а не от «нехватки SQL» для большинства приложений.
| Ограничение | Практическое влияние | |-------------|----------------------| | Один writer | Много concurrent writers в очереди; WAL помогает читателям | | Сетевые ФС | Риск порчи из-за блокировок — только локальный диск | | Нет встроенного HA | Репликация на уровне приложения (LiteFS, rqlite) или export | | Скромный ops tooling | Нет ролей, нет server-side connection pooling | | Type affinity | Гибкая типизация скрывает баги без strict mode |
PRAGMA journal_mode = WAL; -- читатели меньше блокируют writer
PRAGMA synchronous = NORMAL; -- баланс durability и скорости (знайте риск)
PRAGMA busy_timeout = 5000; -- ждать lock вместо мгновенного SQLITE_BUSY
Обрабатывайте `SQLITE_BUSY` повторами и короткими транзакциями. Для multi-instance backend с тяжёлой записью безопаснее PostgreSQL или MySQL.
На интервью: правило single-writer; предупреждение про NFS; когда откажетесь от SQLite для backend-сервиса.
Типовые ошибки: несколько app servers пишут в один файл; Docker volume на сетевом storage; type affinity без валидации; backup без учёта блокировок приложения.
Компромисс — радикальная простота для embedded и edge против жёсткого потолка параллелизма записи и централизованной эксплуатации.
Чеклист:
- Подтвердите single-writer или примите retry/backoff.
- Файлы БД — на локальной ФС.
- WAL, busy_timeout и стратегия backup.
- Пересмотр при росте write QPS или требований HA.