主要观点:
- 探索用于分类同步引擎的九个维度,重点介绍对象同步引擎,如 Linear、Figma、Asana 等公司都有自己的对象同步引擎,Replicache 也能创建通用的对象同步引擎,Convex 正在研发自己的对象同步引擎。
- 对象同步引擎同步客户端和集中式服务器之间的对象图,应用将对象图存储在本地存储中,同步引擎处理两者的同步,本地和服务器存储常有差异,开发者需对数据模型的逻辑变更进行两次实现。
- 每个有集中式服务器的同步引擎都有本地存储、服务器存储和同步协议三个主要部分,分别介绍了 LunaDB、Replicache 和 Convex 在这三方面的实现及特点。
- 同步平台通过同步协议将客户端的本地存储和服务器存储连接起来,不同的同步引擎有不同的同步协议,Convex 也有自己的改进计划。
- 应用需求不同,框架需为开发者提供可编程性,分别介绍了本地模式、本地存储 API 和服务器存储 API 在不同同步引擎中的实现。
关键信息:
- 九个维度:大小约 100MB、更新率 1Hz、结构高、输入延迟 500ms、离线支持高、并发客户端无限、集中化服务器权威、灵活性高、一致性高。
- 本地存储:关键是“无 spinner”和离线支持,需处理并发、版本控制等,LunaDB 和 Replicache 用 IndexedDB,Convex 初期也用 IndexedDB 未来可能切换为 SQLite。
- 服务器存储:用于存储数据,有多种原因,如易用性、耐久性等,多数同步应用实现通知推送,不同引擎有不同的服务器存储实现方式,Convex 作为反应式数据库有独特支持。
- 同步协议:有初始同步、增量同步、突变等责任,不同引擎有不同的同步协议,Convex 有改进计划。
- 编程部分:包括本地模式、本地存储 API 和服务器存储 API,不同引擎在这方面各有特点,Convex 有独特设计。
重要细节:
- LunaDB 的同步引擎基于 DDP,用自定义应用服务器和 MySQL 存储数据,通过定制的失效服务推送更新。
- Replicache 是后端无关的,用 BroadcastChannel 协调更新,有轻量级多版本方案,后端可运行在 Vercel 等上,存储在 Supabase 等。
- Convex 的 WebSocket 协议通过同步一组查询来协调客户端和服务器的交互,有改进离线同步的计划。
- LunaDB 用类似 GraphQL 的查询语言编程协议,Replicache 鼓励通过代码共享实现类似结果,Convex 让开发者在代码中指定模式并在运行时验证。
- Replicache 通过订阅实现本地存储的读取,通过异步回调指定突变,LunaDB 用 GraphQL 片段解决预加载数据的问题,Convex 的本地查询和突变类似现有设计。
- Replicache 提供多种后端策略,Convex 的服务器突变简单,读取方面可通过两个 API 实现灵活编程。
总结:本文详细介绍了对象同步引擎的各个方面,包括其组成部分、不同引擎的实现及编程要点,Convex 正在努力构建自己的对象同步引擎,以提供更好的本地优先用户体验和服务器可编程性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。