28 puntos por GN⁺ 2024-08-23 | 2 comentarios | Compartir por WhatsApp
  • Una base de datos del lado del cliente que facilita la creación de apps colaborativas en tiempo real como Notion o Figma
  • Escribes consultas relacionales y Instant se encarga de obtener los datos, verificar permisos y hacer caché offline
  • También maneja automáticamente las actualizaciones optimistas y el rollback cuando cambian los datos
  • Todas las consultas soportan multijugador por defecto
  • También soporta actualizaciones efímeras como cursores o estado en línea
  • Actualmente ofrece SDK para Javascript, React y React Native

Motivación de desarrollo

  • El desarrollo moderno de apps requiere mucho trabajo: configurar servidores, bases de datos, caché, ORM y endpoints
  • También hay que escribir código del lado del cliente, gestionar estado y renderizar la UI
  • Al agregar funciones multijugador, hay que considerar un servidor con estado, y para soportar modo offline, IndexedDB y colas de transacciones
  • Cada vez que se agrega una nueva función, hay que volver a escribir repetidamente modelos, endpoints, manejo de estado y UI
  • En 2021 se dieron cuenta de que la mayoría de los problemas que enfrenta un ingeniero de UI son en realidad problemas de base de datos
  • Si existiera una base de datos del lado del cliente, bastaría con escribir consultas sin tener que pensar en gestión de estado, endpoints ni caché local
  • Si las consultas soportan multijugador por defecto, no hay que preocuparse por un servidor con estado
  • Si la base de datos soporta rollback, se obtienen actualizaciones optimistas gratis
  • Por eso desarrollaron Instant. Instant ofrece una base de datos utilizable desde el cliente para que puedas concentrarte en construir la UX

Resumen de la arquitectura

  • Instant guarda todos los datos de usuario en una sola gran base de datos Postgres en forma de triples
  • Ofrece un nivel gratuito con una configuración multi-tenant
  • Un servidor de sincronización escrito en Clojure se comunica con Postgres
  • Escribieron un motor de consultas que entiende InstaQL, similar a Datalog y GraphQL
  • Inspirados por WorldStore de Asana y LiveGraph de Figma, rastrean el WAL de Postgres para detectar datos nuevos e invalidar las consultas relacionadas
  • En el frontend, escribieron un triple store del lado del cliente
  • El SDK guarda la caché de consultas recientes en IndexedDB en web y en AsyncStorage en React Native
  • Todos los datos se procesan a través de un sistema de permisos impulsado por la biblioteca CEL de Google

Resumen de GN⁺

  • Instant es una base de datos del lado del cliente que facilita la creación de apps colaborativas en tiempo real
  • Mediante consultas relacionales, automatiza la obtención de datos, la verificación de permisos y el caché offline
  • Soporta por defecto funciones multijugador, actualizaciones optimistas y rollback
  • Inspirado en Asana y Figma, rastrea el WAL de Postgres para detectar datos nuevos e invalidar las consultas relacionadas
  • Gestiona los datos de forma eficiente mediante un triple store del lado del cliente y un sistema de permisos

2 comentarios

 
stargt 2024-08-23

Parece un proyecto realmente prometedor, en la misma línea que Supabase.

 
GN⁺ 2024-08-23
Opiniones en Hacker News
  • Fundador de Firebase: Está entusiasmado con la combinación de Instant de modo offline, tiempo real, consultas relacionales y código abierto. Hubo muchas solicitudes de consultas relacionales. El cliente de Firebase es de código abierto, pero no lograron abrir el backend

  • Retroalimentación: Los ejemplos de código no están completos. No está claro de dónde vienen transact y useQuery. Los pequeños detalles importan

  • Posibilidad de self-hosting: A menudo, algunas partes de la herramienta no pueden alojarse por cuenta propia. Esto debería quedar claro

  • Alternativa al modelo offline-first: Eligió PowerSync. WatermelonDB también está bien. ElectricSQL aún está inmaduro. CouchDB y PocketDB no están actualizados. Planea usar PowerSync y Supabase como backend

  • Relación con las apps CRUD: Es difícil entender la relación entre las apps CRUD y el concepto de InstantDB o Firebase. Para un editor de texto colaborativo, usaría una implementación de CRDT en Javascript

  • Experiencia usando Instant: Ha usado Instant durante 6 meses y quedó satisfecho. Las funciones de tiempo real, relacionales y offline eran importantes. Probó otras herramientas, pero fracasaron. Desde Instant, ya no usa otras herramientas

  • Resumen del sistema de permisos: Firebase separa la lógica de búsqueda/actualización de datos y las políticas de acceso. Instant evalúa la lógica de permisos según los resultados de la consulta. Firebase verifica la seguridad antes de ejecutar la consulta

  • Exposición del motor Datalog: Hay otros motores Datalog que soportan consultas recursivas. Está preguntando sobre la posibilidad de caché de consultas y uniones. En el pasado hubo un Java InstantDB con el mismo nombre. Proporciona una lista de otros motores Datalog implementados en Clojure

    • Datomic
    • XTDB
    • Datascript
    • Datalevin
    • datahike
    • Naga
  • Quiere una experiencia tipo ActiveRecord: Quiere trabajar en React/Vue/Solid de una forma parecida a ActiveRecord. Quiere una API tipo grafo de objetos. No quiere una API tipo SQL. Quiere que el ORM funcione como si tuviera en memoria todo el grafo de objetos

  • Problema de rendimiento de triple store: Cuando la mayoría de las consultas traen el objeto completo o varios campos del mismo objeto, el rendimiento de un triple store no es bueno. Postgres tampoco destaca mucho. Está preguntando por experiencias relacionadas con esto