《Notion如何用CRDT解决并发编辑冲突》
标签:
#分布式系统 #协同编辑 #CRDT算法 #数据一致性
总结:
文章要点:
1. Notion在2025年重新设计了底层文本编辑系统,从"最后写入获胜"(LWW)模式转向基于CRDT的并发编辑方案,解决了多人同时编辑同一区块时的数据丢失问题。
2. CRDT(无冲突复制数据类型)允许多个客户端保留本地数据副本,并以确定性方式合并同时发生的更改,确保不会丢失任何人的修改。
3. Notion使用的CRDT基于经典的RGA(可复制增长数组)序列CRDT,这是一个树形数据结构,每个字符都有唯一且稳定的ID,插入和删除操作都引用这些ID。
4. 删除操作采用"墓碑"机制——标记项目为已删除但保留在树中,因为可能有在途或离线操作依赖于已删除字符的ID。
5. 为提升存储效率,Notion将连续字符分组,为整组字符分配一个ID并存储运行长度,而不是为每个字符单独分配ID。
6. 支持富文本格式需要解决注释冲突,Notion引入了基于Peritext算法的操作,支持可扩展和不可扩展的注释类型(如粗体vs超链接)。
7. Notion的区块模型带来了独特挑战:当用户按下回车键分割区块时,需要处理文本在区块间移动时的并发编辑问题。
8. 为解决这一问题,Notion引入了"文本切片"概念——每个区块的文本项属于一个文本切片,分割区块时切片也会相应分割并移动到新区块。
9. 每个文本项ID由会话ID和Lamport时钟组成,确保ID的唯一性;指向同一原点的项目按逻辑时间戳排序,会话ID作为平局决胜因素。
URL:
https://www.notion.com/blog/how-notion-handles-concurrent-editing-with-crdts
标签:
#分布式系统 #协同编辑 #CRDT算法 #数据一致性
总结:
文章要点:
1. Notion在2025年重新设计了底层文本编辑系统,从"最后写入获胜"(LWW)模式转向基于CRDT的并发编辑方案,解决了多人同时编辑同一区块时的数据丢失问题。
2. CRDT(无冲突复制数据类型)允许多个客户端保留本地数据副本,并以确定性方式合并同时发生的更改,确保不会丢失任何人的修改。
3. Notion使用的CRDT基于经典的RGA(可复制增长数组)序列CRDT,这是一个树形数据结构,每个字符都有唯一且稳定的ID,插入和删除操作都引用这些ID。
4. 删除操作采用"墓碑"机制——标记项目为已删除但保留在树中,因为可能有在途或离线操作依赖于已删除字符的ID。
5. 为提升存储效率,Notion将连续字符分组,为整组字符分配一个ID并存储运行长度,而不是为每个字符单独分配ID。
6. 支持富文本格式需要解决注释冲突,Notion引入了基于Peritext算法的操作,支持可扩展和不可扩展的注释类型(如粗体vs超链接)。
7. Notion的区块模型带来了独特挑战:当用户按下回车键分割区块时,需要处理文本在区块间移动时的并发编辑问题。
8. 为解决这一问题,Notion引入了"文本切片"概念——每个区块的文本项属于一个文本切片,分割区块时切片也会相应分割并移动到新区块。
9. 每个文本项ID由会话ID和Lamport时钟组成,确保ID的唯一性;指向同一原点的项目按逻辑时间戳排序,会话ID作为平局决胜因素。
URL:
https://www.notion.com/blog/how-notion-handles-concurrent-editing-with-crdts