两个方案都在脑图协作中尝试过,比较如下。
Yjs(基于 CRDT 算法)和 ShareDB(基于 OT 算法)是两种实时协作编辑方案,各自有不同的适用条件。
Yjs(基于 CRDT 算法)的特点:
- 离线支持和冲突解决: CRDT 算法考虑离线工作和冲突解决,Yjs 可在无需中心化服务器参与的情况下解决冲突。用户可离线编辑,重新连接时将更改与其他副本合并,不产生冲突。
- 分布式和去中心化: CRDT 不需要中心服务器解决冲突,因此 Yjs 可用于不同网络环境,包括 peer-to-peer 网络。
- 性能和可伸缩性: Yjs 的实现可用于大量用户协作编辑大型文档。
Yjs(基于 CRDT 算法)的限制:
- 数据负载: CRDT 保持所有操作的历史记录以解决冲突,文档大小可能随时间和操作数量增长,影响网络传输和存储。
- 复杂性: CRDT 的理论和实现比 OT 更复杂,可能增加学习和实施难度。
ShareDB(基于 OT 算法)的特点:
- 实时同步: ShareDB 通过 WebSocket 提供实时数据同步,在低延迟网络环境中可用。
- 灵活性: ShareDB 支持任何 JSON 可序列化的数据类型,适用于更多类型的应用。
ShareDB(基于 OT 算法)的限制:
- 需要中心服务器: OT 需要中心服务器处理和转换操作以解决冲突,因此 ShareDB 更依赖中心服务器和网络连接。
- 离线支持和冲突解决: ShareDB 提供离线支持,但没有服务器参与时,冲突解决更复杂。在脑图协作的实践中出现过乱序和内容丢失。
- 性能和可伸缩性: 与 CRDT 相比,OT 的性能和可伸缩性可能受到更多限制,尤其是在大量用户协作编辑大型文档时。
选择方案时,需要结合具体项目和公司工程基础设施能力。
