28 pontos por GN⁺ 2024-08-23 | 2 comentários | Compartilhar no WhatsApp
  • Um banco de dados no lado do cliente que facilita a criação de apps colaborativos em tempo real, como Notion ou Figma
  • Ao escrever consultas relacionais, o Instant cuida da busca de dados, verificação de permissões e cache offline
  • Também lida automaticamente com atualizações otimistas e rollback quando os dados mudam
  • Todas as consultas oferecem suporte multiplayer por padrão
  • Também oferece suporte a atualizações transitórias, como cursor ou status online
  • Atualmente fornece SDKs para Javascript, React e React Native

Motivação para o desenvolvimento

  • O desenvolvimento moderno de apps exige muito trabalho, como configuração de servidor, banco de dados, cache, ORM e endpoints
  • Também é necessário escrever código no lado do cliente, gerenciar estado e renderizar a UI
  • Ao adicionar recursos multiplayer, é preciso considerar um servidor com estado; ao oferecer suporte offline, é preciso pensar em IndexedDB e filas de transações
  • Sempre que um novo recurso é adicionado, é preciso repetir a escrita de modelos, endpoints, gerenciamento de estado e UI
  • Em 2021, perceberam que a maioria dos problemas enfrentados por engenheiros de UI eram, na verdade, problemas de banco de dados
  • Se houver um banco de dados no lado do cliente, basta escrever consultas sem precisar pensar em gerenciamento de estado, endpoints ou cache local
  • Se as consultas oferecerem suporte multiplayer por padrão, não é preciso se preocupar com um servidor com estado
  • Se o banco de dados oferecer suporte a rollback, atualizações otimistas vêm “de graça”
  • Por isso desenvolveram o Instant. O Instant fornece um banco de dados utilizável no cliente, permitindo foco na construção da UX

Visão geral da arquitetura

  • O Instant armazena todos os dados dos usuários em um único grande banco de dados Postgres, em forma de triplas
  • Oferece uma camada gratuita com configuração multi-tenant
  • Um servidor de sincronização escrito em Clojure se comunica com o Postgres
  • Foi criado um mecanismo de consultas que entende o InstaQL, semelhante a Datalog e GraphQL
  • Inspirado no WorldStore da Asana e no LiveGraph da Figma, ele rastreia o WAL do Postgres para detectar novos dados e invalidar consultas relacionadas
  • No frontend, foi criado um triple store no lado do cliente
  • O SDK armazena o cache das consultas recentes em IndexedDB na web e em AsyncStorage no React Native
  • Todos os dados passam por um sistema de permissões alimentado pela biblioteca CEL do Google

Resumo do GN⁺

  • O Instant é um banco de dados no lado do cliente que facilita a criação de apps colaborativos em tempo real
  • Por meio de consultas relacionais, ele lida automaticamente com busca de dados, verificação de permissões e cache offline
  • Oferece suporte nativo a recursos multiplayer, atualizações otimistas e rollback
  • Inspirado na Asana e na Figma, ele rastreia o WAL do Postgres para detectar novos dados e invalidar consultas relacionadas
  • Gerencia os dados com eficiência por meio de um triple store no lado do cliente e de um sistema de permissões

2 comentários

 
stargt 2024-08-23

Parece um projeto realmente muito promissor, na mesma linha do Supabase.

 
GN⁺ 2024-08-23
Opiniões no Hacker News
  • Fundador do Firebase: animado com a combinação do Instant de offline, tempo real, consultas relacionais e código aberto. Havia muitos pedidos por consultas relacionais. O cliente do Firebase é open source, mas não conseguiram abrir o código do backend

  • Feedback: os exemplos de código não estão completos. A origem de transact e useQuery não está clara. Pequenos detalhes importam

  • Se é possível fazer self-hosting: muitas vezes parte da ferramenta não pode ser hospedada pelo próprio usuário. Isso precisa ficar claro

  • Alternativas ao modelo offline-first: escolheu PowerSync. WatermelonDB também é bom. ElectricSQL ainda é imaturo. CouchDB e PocketDB não são modernos. Pretende usar PowerSync e Supabase como backend

  • Relação com apps CRUD: é difícil entender a relação entre apps CRUD e os conceitos do InstantDB ou Firebase. Para editores de texto colaborativos, usaria uma implementação CRDT em Javascript

  • Experiência usando Instant: usou Instant por 6 meses e ficou satisfeito. Recursos de tempo real, relacional e offline eram importantes. Tentou outras ferramentas, mas falhou. Desde o Instant, não usa mais outras ferramentas

  • Resumo do sistema de permissões: o Firebase separa a lógica de busca/atualização de dados das políticas de acesso. O Instant avalia a lógica de permissões com base no resultado da consulta. O Firebase verifica a segurança antes de executar a consulta

  • Se o motor Datalog é exposto: há outros motores Datalog que suportam consultas recursivas. Pergunta se é possível fazer cache e composição de consultas. No passado houve um Java InstantDB com o mesmo nome. Fornece uma lista de outros motores Datalog implementados em Clojure

    • Datomic
    • XTDB
    • Datascript
    • Datalevin
    • datahike
    • Naga
  • Quer uma experiência tipo ActiveRecord: quer trabalhar em React/Vue/Solid de uma forma parecida com ActiveRecord. Quer uma API tipo grafo de objetos. Não quer uma API parecida com SQL. Quer que o ORM funcione como se tivesse todo o grafo de objetos em memória

  • Problema de desempenho de triple store: quando a maioria das consultas busca o objeto inteiro ou vários campos do mesmo objeto, a performance de triple stores não é boa. O Postgres também não é tão excelente assim. Está perguntando sobre experiências relacionadas