2 个版本 (1 个稳定版本)
1.0.0 | 2022 年 8 月 25 日 |
---|---|
0.1.0 | 2021 年 7 月 26 日 |
#15 in #text-editing
655KB
11K SLoC
钻石类型
此仓库包含一个高性能的 Rust CRDT 用于文本编辑。这是一个特殊的数据类型,支持在 P2P 网络中由多个用户并发编辑列表或字符串(文本文档),而无需中央服务器。
此版本的钻石类型仅支持纯文本编辑。目前正在努力添加对其他 JSON 风格数据类型的支持。有关详细信息,请参阅 more_types
分支。
此项目最初是一个原型,用于查看如何快速优化 CRDT。答案是真的很快 - 比其他类似库快。此库目前正在扩展成为一个快速且功能丰富的 CRDT。
有关此库如何工作的更多详细信息,请参阅
- 我在最近的 braid 用户会议 上关于此库的演讲或
- INTERNALS.md 中的此仓库。
- 关于使钻石类型比竞争性 CRDT 实现快 5000 倍的博客文章
- 自那篇博客文章发布以来,性能提高了 10-80 倍(!)。
此外,此库还设计为与位置更新兼容。这允许简单的对等体通过操作转换与数据结构交互。
内部结构
每个客户端/设备都有一个唯一的 ID。每个设备上键入或删除的每个字符都分配一个递增的序列号(从 0 开始)。因此,文档中的每个字符都可以通过 (客户端 ID, 序列号)
元组唯一标识。这使得文档中的任何位置都可以唯一命名。
内部数据结构旨在优化两个主要操作
- 文本编辑到 CRDT 操作(例如,“用户 A 在位置 100 插入”->“用户 A seq 1000 在 (B, 50) 插入”)
- CRDT 操作到文本编辑(“用户 A seq 1000 在 (B, 50) 插入”->“在文档位置 100 插入”)
有关内部数据结构的更多详细信息,请参阅 INTERNALS.md。
许可协议
此代码根据 ISC 许可协议发布。
致谢
此工作得到了 Invisible College 的资助。
依赖项
~2.5MB
~52K SLoC