Os desenvolvedores do SQLite estão desenvolvendo um módulo VFS experimental chamado CBS (Cloud Backed SQLite), que permite armazenar o conteúdo do banco de dados não em um arquivo local, mas em um armazenamento em nuvem externo. Para armazenamento, é utilizado um formato de banco de dados especialmente otimizado para armazenamento externo, permitindo carregar dados do armazenamento externo dinamicamente conforme necessário, sem a necessidade de copiar todo o banco de dados para o sistema local. Atualmente, os serviços de armazenamento em nuvem suportados incluem Azure Blob Storage e Google Cloud Storage. Qualquer aplicativo que suporte o funcionamento com o SQLite comum pode ser migrado para o CBS.
O módulo VFS pode operar em modo em segundo plano e ativo. No modo em segundo plano, um processo de fundo é executado continuamente no sistema, permitindo acesso ao banco de dados externo apenas em modo de leitura, mas suportando um cache compartilhado que pode ser acessado por diferentes processos. No modo ativo, tanto a leitura quanto a gravação são permitidas, mas apenas o cache local do processo atual é utilizado. Em um dado momento, apenas um cliente pode realizar gravações, e outros clientes não verão as alterações gravadas até que as solicitem explicitamente do armazenamento em nuvem. Para separar diferentes solicitações de gravação, é aplicada um sistema de bloqueios do SQLite baseado em WAL-log.
Os desenvolvedores têm acesso a uma API C estendida e uma interface de linha de comando, permitindo realizar operações como criar e limpar armazenamento externo, carregar e descarregar bancos de dados para/de um armazenamento externo, criar cópias de bancos de dados no armazenamento externo, visualizar a lista de bancos de dados no armazenamento em nuvem e remover blocos não utilizados do armazenamento em nuvem.
Os desenvolvedores do projeto libSQL (um fork estendido do SQLite) anunciaram uma versão servidor do SQLite — sqld, que permite organizar o funcionamento de um SGBD compartilhado, ao qual os clientes se conectam usando o protocolo PostgreSQL ou HTTP. Por exemplo, bibliotecas de clientes existentes, desenvolvidas para SGBDs PostgreSQL, podem ser utilizadas para se conectar ao sqld, incluindo a interface de linha de comando psql. O servidor sqld também pode ser acessado através de uma API baseada no protocolo HTTP, facilitando a integração com aplicativos web. O código do sqld é escrito em Rust e é distribuído sob a licença MIT.
As áreas de aplicação do sqld incluem backup, replicação para outros sistemas e organização de acesso a bancos de dados SQLite em infraestruturas sem servidor, onde não há armazenamento persistente e não é possível manter um banco de dados em um arquivo local. Em sistemas sem servidor, o banco de dados com o qual o sqld opera pode ser replicado de outros. servidores. Para garantir alta disponibilidade e resiliência a falhas, há integração com o mvSQLite (uma versão distribuída do SQLite que opera sobre o FoundationDB). Existe um modo de manter um backup ativo, implementado através do salvamento periódico de snapshots do estado do banco de dados e replicação de alterações do log WAL para um armazenamento em nuvem compatível com o Amazon S3.
Para aplicações, há uma biblioteca compatível com SQLite que pode ser carregada via LD_PRELOAD para transitar do armazenamento de dados em arquivo local para operar através do sqld. É possível carregar extensões para o SQLite. As bibliotecas do cliente estão preparadas para TypeScript, JavaScript, Rust, Go e Python. Com o banco de dados conectado ao sqld, é possível trabalhar simultaneamente com as ferramentas padrão do SQLite, ou seja, o sqld atua como uma camada para fornecer acesso à rede ao banco de dados, replicação e backup. Por exemplo: # Iniciando o servidor para o banco de dados SQLite foo.db: sqld -d foo.db -p 127.0.0.1:5432 —http-listen-addr=127.0.0.1:8000 # Acessando o banco de dados com as ferramentas PostgreSQL: psql -q postgres://127.0.0.1 # Conectando-se localmente ao banco de dados com as ferramentas do SQLite: sqlite3 foo.db # Acessando via HTTP: curl -s -d "{\"statements\": [\"SELECT * from databases;\"]} " http://127.0.0.1:8000
Por fim, vale mencionar o projeto LiteFS, desenvolvido pela empresa Fly.io. O LiteFS é um módulo FUSE para organizar a operação de um banco de dados SQLite compartilhado em vários hosts. O LiteFS replica o estado do banco de dados entre vários sistemas interceptando operações de escrita em arquivo do banco de dados e transmitindo essas operações para outros sistemas, utilizando um mecanismo semelhante a transações e salvamento de transações em um arquivo separado no formato LTX. O código do LiteFS é escrito em Go e distribuído sob a licença Apache 2.0.
Fonte: opennet.ru
