Разработчиците на SQLite развиват експериментален VFS модул CBS (Cloud Backed SQLite), който позволява съхранение на съдържанието на базата данни не в локален файл, а във външно облачно хранилище. За съхранение се използва специално оптимизиран формат на базата, позволяващ динамично зареждане на данни от външното хранилище по необходимост, без предварително копиране на цялата БД в локалната система. В момента се поддържат облачни хранилища като Azure Blob Storage и Google Cloud Storage. Всички приложения, които работят с обикновена SQLite, могат да бъдат прехвърлени за работа с CBS.
VFS модулът може да работи в фонов режим и активен режим. Във фонов режим в системата постоянно работи фонов процес, който позволява достъп до външната БД само в режим на четене, но поддържа общ кеш, към който различни процеси могат да имат достъп. В активен режим е разрешено четене и запис, но само локалният кеш на текущия процес се използва. Във всеки момент само един клиент може да извършва запис, а другите клиенти няма да видят записаните промени, докато не ги поискат явно от облачното хранилище. За да се разделят различните заявки за запис, се прилага типова система за блокировки на SQLite, базирана на WAL лог.
На разработчиците е предоставен разширен C API и интерфейс на командния ред, позволяващи извършване на операции като създаване и почистване на външно хранилище, зареждане и извеждане на БД в/от външното хранилище, създаване на копия на БД в облачното хранилище, преглед на списъка с БД в облачното хранилище, изтриване на неизползвани блокове от облачното хранилище.
Отделно разработчиците на проекта libSQL (разширен форк на SQLite) анонсираха сървърен вариант на SQLite — sqld, който позволява организиране на работа на споделена СУБД, като свързването на клиенти се осъществява чрез използването на протокол PostgreSQL или HTTP. Например, за свързване към sqld могат да се използват съществуващи клиентски библиотеки, създадени за СУБД PostgreSQL, включително CLI интерфейса psql. Към сървъра sqld също така може да се получава достъп чрез API на базата на протокола HTTP, което опростява интеграцията с уеб приложенията. Кодът на sqld е написан на езика Rust и е разпространен под лиценз MIT.
Като области на прилагане на sqld се отбелязват резервното копиране, репликация към други системи и организиране на достъп до базата данни SQlite в безсървърни инфраструктури, в които липсва постоянно хранилище и е невъзможно да се осигури поддържане на базата данни в локален файл. В безсървърните системи, базата данни, с която работи sqld, може да се репликира от други. сървъри. За осигуряване на висока достъпност и устойчивост на сривове се поддържа интеграция с mvSQLite (разпределен вариант на SQLite, работещ върху FoundationDB). Има режим за поддържане на активна резервна копие, реализиран чрез периодично запазване на снимки с състоянието на базата данни и репликация на промените от WAL-журнал в облачно хранилище, съвместимо с Amazon S3.
За приложенията се предоставя съвместима с SQLite библиотека, която може да се зарежда чрез LD_PRELOAD за преминаване от съхранение на данни в локален файл към работа през sqld. Възможно е зареждане на разширения за SQLite. Клиентските библиотеки са подготвени за TypeScript, JavaScript, Rust, Go и Python. С базата данни, свързана с 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.
Източник: opennet.ru
