VFS-модуль может работать в фоновом и активном режиме. В фоновом режиме в системе постоянно выполняется фоновый процесс, позволяющий обращаться к внешней БД только в режиме чтения, но поддерживающий общий кэш, к которому совместно могут обращаться разные процессы. В активном режиме допускается чтение и запись, но используется только локальный кэш текущего процесса. В каждый момент времени только один клиент может осуществлять запись, а другие клиенты не увидят записанные изменения, пока явно не запросят их из облачного хранилища. Для разделения разных запросов на запись применяется типовая система блокировок SQLite на основе WAL-лога.
Разработчикам предоставляется расширенный C API и интерфейс командной строки, позволяющие выполнять такие операции, как создание и очистка внешнего хранилища, загрузка и выгрузка БД в/из внешнего хранилища, создание копии БД на внешнем хранилище, просмотр списка БД в облачном хранилище, удаление неиспользуемых блоков из облачного хранилища.
Отдельно разработчиками проекта libSQL (расширенный форк SQLite) анонсирован серверный вариант SQLite — sqld, позволяющий организовать работу совместно используемой СУБД, подключение клиентов к которой осуществляется через применение протокола PostgreSQL или HTTP. Например, для подключения к sqld могут применяться существующие клиентские библиотеки, созданные для СУБД PostgreSQL, и, среди прочего, CLI-интерфейс psql. К серверу sqld также можно обращаться при помощи API на базе протокола HTTP, что упрощает интеграцию с web-приложениями. Код sqld написан на языке Rust и распространяется под лицензией MIT.
В качестве областей применения sqld отмечается резервное копирование, репликация на другие системы и организация доступа к БД SQlite в бессерверных инфраструктурах, в которые отсутствует постоянное хранилище и невозможно обеспечить ведение базы в локальном файле. В бессерверных системах, БД, с которой работает sqld, может реплицироваться с других серверов. Для обеспечения высокой доступности и устойчивости к сбоям поддерживается интеграция с mvSQLite (распределённый вариант SQLite, работающий поверх FoundationDB). Имеется режим поддержания активной резервной копии, реализованный через периодическое сохранение снапшотов с состоянием БД и репликацию изменений из WAL-лога в облачное хранилище, совместимое с Amazon S3.
Для приложений предоставляется совместимая с SQLite библиотека, которая может загружаться через LD_PRELOAD для перехода с хранения данных в локальном файле на работу через sqld. Возможна загрузка расширений к SQLite. Клиентские библиотеки подготовлены для TypeScript, JavaScript, Rust, Go и Python. C БД, привязанной к sqld, одновременно можно работать при помощи штатного инструментария SQLite, т.е. sqld выступает как надстройка для предоставления сетевого доступа к БД, репликации и резервного копирования. Например:
# Запускаем сервер для SQLite БД foo.db: sqld -d foo.db -p 127.0.0.1:5432 --http-listen-addr=127.0.0.1:8000 # Обращаемся к БД при помощи утилит PostgreSQL: psql -q postgres://127.0.0.1 # Подключаемся локально к БД при помощи инструментария SQLite: sqlite3 foo.db # Обращаемся через HTTP: curl -s -d "{"statements": ["SELECT * from databases;"] }" http://127.0.0.1:8000
В заключение можно упомянуть проект LiteFS, развиваемый компанией Fly.io. LiteFS представляет собой FUSE-модуль для организации работы с одной общей БД SQLite на нескольких хостах. LiteFS реплицирует состояние БД между несколькими системами через перехват операций записи в файл с БД, и трансляцию этих операций на другие системы, используя подобие механизма транзакций и сохранение транзакций в отдельном файле в формате LTX. Код LiteFS написан на языке Go и распространяется под лицензией Apache 2.0.
Источник: http://www.opennet.ru/opennews/art.shtml?num=59431