Uma nova abordagem para replicação na edge
- A sincronização de dados é um problema mais difícil do que parece. As soluções existentes geralmente se dividem entre sincronizar o conjunto completo de dados com o cliente ou rastrear alterações lógicas.
- O Graft foi projetado para resolver esse problema e é um mecanismo de armazenamento open source que combina replicação física simples com replicação lógica eficiente.
Sincronização preguiçosa: sincronize no ritmo que você quiser
- O Graft permite que o cliente escolha quando sincronizar, o que o torna adequado para ambientes de edge com conexão de rede intermitente.
- O servidor fornece o índice das páginas alteradas desde o último snapshot do cliente, e o cliente pode buscar seletivamente apenas os dados de que precisa.
Sincronização parcial: sincronize apenas o necessário
- Em ambientes de edge, não é possível baixar o conjunto completo de dados, por isso o Graft oferece suporte à sincronização parcial, buscando seletivamente apenas as páginas necessárias.
- O Graft pode buscar antecipadamente as páginas necessárias usando algoritmos de predição genéricos e conhecimento de domínio.
Edge: sincronização perto de onde é necessário
- O Graft fornece dados por meio de servidores de edge no mundo todo, mantendo baixa latência e alta responsividade independentemente de onde o usuário esteja.
- O cliente foi projetado para ser leve e pode ser integrado facilmente a navegadores, apps móveis e ambientes serverless.
Consistência: sincronização segura
- O Graft oferece um modelo de consistência forte para lidar com segurança com conflitos entre clientes.
- Os clientes podem obter uma visão consistente dos dados por meio do modelo de isolamento por snapshot, e as escritas são estritamente serializadas.
O que dá para criar com o Graft?
- O Graft fornece uma base poderosa para vários aplicativos edge-native.
- São possíveis apps offline-first, dados multiplataforma, réplicas de leitura sem estado e replicação de dados arbitrários.
Extensão SQLite do Graft (libgraft)
- O
libgraft é uma extensão nativa do SQLite que replica apenas a parte do banco de dados realmente usada pelo cliente, permitindo executar SQLite mesmo em ambientes com recursos limitados.
- Ele oferece recursos como replicação assíncrona, replicação parcial preguiçosa, isolamento por snapshot e recuperação para um ponto no tempo.
Como participar
- O Graft está sendo desenvolvido no GitHub e recebe contribuições da comunidade.
- É possível participar no Discord ou enviar feedback por e-mail.
- Você pode entrar na lista de espera do serviço gerenciado do Graft.
Roadmap
- O Graft ainda está em desenvolvimento e há planos para suporte a WebAssembly, integração com SQLSync e suporte a várias bibliotecas cliente.
- Também estão previstas funcionalidades como redução da latência de escrita, coleta de lixo, autenticação e autorização, volume forking e tratamento de conflitos.
Comparação com outras soluções de replicação para SQLite
- O Graft tem vantagens únicas em comparação com mvSQLite, Litestream, cr-sqlite, Cloudflare Durable Objects, Cloudflare D1, Turso & libSQL, rqlite & dqlite, Verneuil e outros.
- Sincronização parcial, suporte a estruturas de dados arbitrárias e replicação eficiente na edge são seus principais diferenciais.
1 comentários
Comentários do Hacker News
O modelo de consistência não está claro
O autor do Graft agradece
Entende que o modelo de consistência é semelhante ao do git
Quando o cliente busca o Graft, ele consegue saber exatamente o que mudou
Não entra em detalhes de implementação
Acha divertido usar VFS como um "hack"
O projeto que usa o algoritmo Leap é muito interessante
Podem surgir problemas quando clientes móveis estiverem em conexões lentas
A abordagem de usar páginas como unidade básica de sincronização é interessante
É um problema muito desafiador