1. Show HN: InstantDB – A Modern Firebase (github.com)
InstantDB 摘要
InstantDB 是一个现代后端即服务(BaaS)平台,旨在简化现代应用开发,尤其适合 AI 编码的应用。它提供了一整套功能,包括身份验证、权限管理、数据存储、在线状态(presence)和实时流(streams),目标是帮助开发者快速构建用户喜爱的应用。
核心功能与优势
- 关系查询与实时同步:开发者可以用类 GraphQL 的
InstaQL语言编写关系查询,声明式地获取所需数据。InstantDB 会自动处理数据获取、权限校验和离线缓存。所有查询默认支持多人实时协作。 - 乐观更新与自动回滚:当数据变更时,平台会自动处理乐观更新(optimistic updates),并在冲突或错误时回滚。
- 临时状态支持:支持如光标位置、谁在线等临时数据。
- 多平台 SDK:提供 JavaScript、React 和 React Native 的 SDK。
代码示例
文章展示了一个极简的实时聊天应用示例(约 12 行代码),体现了其简洁性:通过 useQuery 读取数据,通过 transact 写入数据,界面自动响应更新。
构建动机
传统开发流程涉及设置数据库、缓存、ORM、端点、客户端状态管理等,且添加多人协作和离线支持会进一步增加复杂度。InstantDB 认为这些本质上是数据库问题,因此提出将数据库置于客户端的理念。开发者只需编写查询,无需关心存储、选择器、端点或本地缓存。多人协作和乐观更新等功能由平台内置支持,让开发者专注于用户体验。
架构概览
- 数据存储:所有用户数据以三元组形式存储在一个大型 Postgres 数据库中。多租户架构支持永不暂停的免费层。
- 同步服务器:使用 Clojure 编写,与 Postgres 通信。查询引擎支持 Datalog 和 InstaQL。
- 变更检测与推送:通过跟踪 Postgres 的预写日志(WAL)来检测数据变化并使相关查询失效,灵感来自 Asana WorldStore 和 Figma LiveGraph。
- 客户端存储:客户端有一个三元组存储,SDK 会将近期查询缓存到 Web 端的 IndexedDB 或 React Native 的 AsyncStorage。
- 权限系统:所有数据操作都通过基于 Google CEL 库的权限系统进行校验。
开始使用与贡献
- 入门:在官网 instantdb.com 注册,可在5分钟内创建一个功能应用。
- 社区:有 Discord 社区提供支持。
- 贡献:可通过 Discord 介绍自己,阅读客户端和服务器端的 README 文件了解本地启动和开发流程。
总之,InstantDB 是一个旨在抽象后端复杂性的现代化 BaaS,通过客户端数据库和实时查询引擎,让开发者能更专注于前端交互和用户体验的快速迭代。