持久化 Loro 文档的最佳实践
最简单的做法是在导入和导出时都使用完整快照,流程如下:
- 加载文档时导入整个快照。
- 保存更改时导出完整快照。
- 使用防抖或节流,在累计一定次数编辑后触发快照保存。
这种方式便于搭建初期的应用,但缺点是用户的编辑不会立即保存。下面介绍如何在减少资源消耗的前提下,快速保存每次编辑。
兼顾即时保存与资源效率
要同时实现快速保存与资源高效,可按以下策略:
- 使用
快照编码定期存储完整文档。 - 使用
更新编码频繁导出增量(例如每次按键后防抖/节流导出),并将这些二进制数据写入磁盘或键值数据库等快速存储,从而以较低成本实现快速保存。 - 加载文档时,先导入快照再导入所有相关增量,即可恢复最新状态。
- 导入完成后导出新的快照替换旧快照,并清理已导入的增量,以加快下一次加载。
- 如果
LoroDoc体量庞大且旧历史可以安全回收,可使用“浅快照编码”缩小快照体积;在此之前的历史可归档到冷存储中。
在协作场景下,快照或增量导出的二进制数据可以通过任意媒介传输,例如 WebRTC、WebSocket 或 HTTP。
CRDT 的强最终一致性保证:只要各节点拥有相同的操作集合,就会收敛到一致的文档状态,而无需担心操作到达的顺序、重复或延迟。