Проекты CBS и sqld развивают облачный и серверный варианты SQLite

Разработчики SQLite развивают экспериментальный VFS-модуль CBS (Cloud Backed SQLite), позволяющий хранить содержимое базы данных не в локальном файле, а во внешнем облачном хранилище. Для хранения используется специально оптимизированный для внешнего хранения формат базы, позволяющий загружать данные из внешнего хранилища динамически по мере необходимости, без предварительного копирования всей БД на локальную систему. Из облачных хранилищ в настоящее время поддерживаются Azure Blob Storage и Google Cloud Storage. На использование CBS могут быть переведены любые приложения, поддерживающие работу с обычным SQLite.

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

© OpenNet