实时协作-yjs和ShareDB对比
April 30, 2017
两个方案都在脑图的协作中尝试了一下,大体总结如下:
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 的性能和可伸缩性可能会受到更多的限制,特别是在大量用户协作编辑大型文档的情况下。
具体项目中实践可能要结合公司工程基建能力思考下怎么选择。
Written by xi ming You should follow him on Github