一、OT
操作转换(OT)
广泛用于协作编辑中的冲突解决的技术,一种【无锁】、【非阻塞】的冲突解决方法。若协作者之间的操作冲突,OT会解析冲突并将正确的汇聚状态推给最终用户。因此,OT为用户提供一致性。
OT 使用位置索引方法执行操作来解析上面讨论的那些冲突。通过保持交换律、幂等性来解决上述问题。
基于 OT 的协作编辑器在满足以下两个属性时一致:
因果关系保持:如果操作 a 发生在操作 b 前,那先执行操作 a,然后执行操作 b
收敛:不同客户端上的所有文档副本最终相同
上述属性是 CC 一致性模型的一部分,CC 一致性模型是协作编辑中一致性维护的模型。
OT的缺点
对字符的每个操作都可能需要更改位置索引。这意味着操作之间存在顺序依赖关系。它的开发和实现具有挑战性。
OT是一组复杂算法,其正确实现在实际应用中已被证明有挑战性。Google Wave 团队花两年时间实现OT。
二、CRDT
无冲突复制数据类型 (CRDT)
是为了改进 OT。CRDT 具有:
复杂的数据结构
但简化的算法
CRDT 通过为每个字符分配两个关键属性来满足交换律和幂等性:
为每个字符赋予全局唯一标识
全局订购每个字符
每个操作现在都有一个更新后的数据结构:CRDT 简化的数据结构
SiteID 唯一标识请求操作的用户站点,带有一个值和一个 PositionalIndex。PositionalIndex值可以是分数:
某些操作不会改变其他字符的 PositionalIndex
避免不同用户操作之间的顺序依赖性
示例描绘来自站点 ID 123e4567-e89b-12d3 的用户在 PositionalIndex 为 1.5 的位置插入一个值为 A 的字符。尽管添加了新字符,但使用小数索引保留了现有字符的位置索引。因此,避免了操作之间的顺序依赖性。如下所示,在 O 和 T 之间插入()并没有影响 T 的位置。
防止操作之间的顺序依赖性:
CRDT 确保用户之间的强一致性。即使一些用户处于离线状态,当他们重新联机时,最终用户处的本地副本也将汇聚。
尽管众所周知的在线编辑平台如 Google 文档、Etherpad 和 Firepad 使用 OT,但 CRDT 使协作文档编辑中的并发和一致性变得容易。事实上,使用 CRDT,可以实现无服务器点对点协作文档编辑服务。
注意
OT 和 CRDT 是协作编辑中冲突解决的良好解决方案,但我们使用 WebSockets 可高亮协作者的光标。其他用户也能预期该协作者的下一个操作的位置,并自然和自觉地避免冲突。
三、基于CRDT实现的开源文档协作产品有哪些
这些项目的源代码都提供了丰富的文档和示例,可以帮助您了解如何使用CRDT来实现文档协作功能。您可以通过阅读这些项目的文档和示例来深入了解它们的工作原理和用法。
Yjs: Yjs 是一个流行的开源 CRDT 库,它提供了用于构建实时协作应用程序的工具和协议。Yjs 可以用于构建各种类型的协作应用,包括文档编辑、绘图、笔记和聊天等。Yjs 得到了广泛的应用,并且有许多与它集成的文档协作产品。
Automerge: Automerge 是另一个流行的开源 CRDT 库,它专注于实现分布式协作和同步的数据结构。Automerge 可以用于构建支持实时协作编辑的文档、表格和其他数据类型的应用程序。
ShareDB: ShareDB 是一个实时协作后端库,它基于 CRDT 实现了实时编辑功能。它可以与各种前端框架和库结合使用,用于构建实时协作的文档编辑和应用程序。
关于基于CRDT实现的开源文档协作产品的源码案例,您可以查看以下项目:
Yjs:Yjs 项目本身就是一个开源的实时协作库,其源代码托管在 GitHub 上。您可以在 GitHub - yjs/yjs: Shared data types for building collaborative software 找到 Yjs 的源代码,并且该仓库中也包含了一些示例和演示。
Automerge:Automerge 也是一个开源项目,其源代码同样托管在 GitHub 上。您可以在 GitHub - automerge/automerge: A JSON-like data structure (a CRDT) that can be modified concurrently by different users, and merged again automatically. 找到 Automerge 的源代码,并且该仓库中包含了详细的文档和示例。
ShareDB:ShareDB 是另一个开源的实时协作后端库,其源代码同样托管在 GitHub 上。您可以在 GitHub - share/sharedb: Realtime database backend based on Operational Transformation (OT) 找到 ShareDB 的源代码,并且该仓库中也包含了示例和用法说明。
一个符合您需求的开源项目是 Apache Wave。Wave 最初是由 Google 开发的实时协作平台,后来成为 Apache 基金会的一个孵化项目,并采用了 Apache 2.0 许可证。Wave 使用了 CRDT 技术来实现实时协作功能,包括文本编辑、评论、版本控制等。
您可以在 Apache Wave 的 GitHub 仓库中找到源代码和文档:https://github.com/apache/incubator-wave。
对比:
2024/3/29 18:32:00
当涉及到 Yjs、Automerge 和 ShareDB 这三种技术时,它们都提供了基于 CRDT 的实时协作功能,但在一些方面可能有所不同。以下是它们的一些比较:
Yjs:
Yjs 提供了一个灵活而强大的实时协作框架,可以用于构建各种类型的协作应用程序。
Yjs 提供了丰富的文档、示例和社区支持,使得学习和使用它相对容易。
Yjs 支持多种数据类型的实时协作,包括文本、数组、地图等。
Yjs 采用了一种称为 “微调整”(fine-tuning)的策略来处理并发编辑,以减少冲突的发生,并且提供了一些自定义策略的选项。
Automerge:
Automerge 提供了一个简单且易于使用的 CRDT 库,专注于实现分布式协作和同步的数据结构。
Automerge 的设计目标是提供类似于 Git 的数据模型,以便跟踪和管理复杂的编辑历史。
Automerge 适用于构建支持实时协作编辑的文档、表格和其他数据类型的应用程序。
Automerge 的实现相对轻量,并且在处理大量编辑时表现良好。
ShareDB:
ShareDB 是一个实时协作后端库,可以与各种前端框架和库结合使用。
ShareDB 提供了一种基于 JSON 文档的数据模型,可以用于构建实时协作编辑功能。
ShareDB 具有良好的可扩展性和性能,并且在处理大规模协作编辑时表现良好。
ShareDB 还提供了一些附加功能,如权限控制、版本控制等。
总体而言,这三种技术都提供了可靠的基于 CRDT 的实时协作功能,但它们在设计理念、功能特性和用法上有所差异。选择哪种技术取决于您的具体需求和偏好,以及项目的特点和规模。您可以根据自己的情况仔细评估和选择合适的技术。
AI时代的职场新潮流
听说AI要来抢工作了?别担心,新岗位可比旧岗位有趣多了!想象一下,你从搬砖工升级成了机器人操作员,从算盘小能手变成了大数据分析师,这不是美滋滋吗?所以,社会生产效率提升了,我们也能更轻松地工作。不过,想成为AI界的佼佼者?那就得赶紧学起来,不然就会被同行们甩得连AI的尾巴都摸不着了!
如何学习AI大模型?
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】

一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。
