SQLite по факту это спецификация библиотеки, которая позволяет оперировать над файлами базы данных, напрямую из языка программирования
Из преимуществ– Благодаря тому что скорость работы SQLite зависит от скорости языка + мощности процессора + пропускной способности IO, теоритически это одна из самых быстрых БД, как минимум, потому что в ней полностью отсутствует вся сетевая сложность стандартных баз– Если другие встроенные хранилища это просто key-value (rocksdb, leveldb, badger), или NoSQL со своим уникальным SDK (couchdb-like), то SQLite это полноценная SQL база, сравнивая по возможностям SQL с PostgreSQL: схема, индексы, транзакции, локи, джоины, констрайнты, все есть короче– Соответственно и опыт на любой другой БД, будет релевантен, что делает SQLite очень привлекательной для разработчиков– И из этого же вытекает то, что можно практически безболезненно пересесть со SQLite на PostgreSQL / MySQL, когда / если придет время– Из-за своей простоты SQLite или уже интегрирован (барузер, мобилки, нативки) или легко добавляется (видел железки с минимальным Linux на борту, на которых приложения пользуют SQLite)– Можно работать с одним инстансом сразу из нескольких процессов– Для бэкапа БД, нужно просто закинуть файлы на S3– Суперпростое интеграционное тестирование, потому что вы можете хоть на каждый тест свой sqlite инстанс (например, inmemory) – Если вы создадите SaaS без multitenancy и будете распространять его как коробочное решение, то без проблем сможете открывать по инстансу на клиента– Настолько бесплатно, насколько возможно
Из недостатков– Классические сетевые файловые системы не позволиляют с нескольких серверов / контейнеров работать с одной и той же SQLite базой (обнаружил только информацию про VFS, но пока не понимаю насколько это рабочий вариант)– Если что-то произойдет с файловой системой при записи данных, есть шанс поломаться так, что просто не восстановитесь
Кейсы применения– Локальная БД для приложения с фронтом (веб, мобилки, десктопы)– Локальная БД для удаленных агентов (приложение, которое собирает и отправляет данные в клауд с устройств, с сервера на складе)– Кэш для одного инстанса (например, для акторов)– База данных для стартапа / проекта, требующего работу с большим объемом данных, но при этом нет желания платить много денег за инстанс PostgreSQL / MySQL
Решение недостатковНам нужны 2 вещи:– Sync Read реплики, чтобы можно было переключиться при падении master– WAL Streaming Backup для надежных бэкаповОпционально, async read реплики, для чтения с задержкой или вообще CRDT для превращения ее в distributed multi-master p2p базуИ в идеале все это встраиваемое в саму sqlite, то есть встроиваемое в язык, или как sidecar процесс. Иначе, мне кажется, использование SQLite просто теряет смысл
Интересные проекты–
Pocketbase – админка, Firebaselike HTTP API, email, auth, file storage, logs и много чего другого прямо из коробки–
Turso – распределенный SQLite на Edge среде–
Electric – на стороне клиента SQLite, который синхронизируется с PostgreSQL, используя CRDT, превращающие SQLite в multi-master edge базу данных–
LiteFS – репликация SQLite базы на уровне файловой системы–
libSQL – форк SQLite, на котором построен Turso, с возможностью разворачивать сервер, реплики, автосинк WAL в S3 и так далее–
rqlite – превращение SQLite в полноценную БД с read репликами, написанная на Go–
dqlite – примерно тоже самое, что rqlite, но на С