用完就扔的 CRDT:Eg-walker 内部怎么运作
来源:dev.to — 2026-10-27
📋 概述
论文里有个数字让人停下来:拿 Git 自己 Makefile 的真实编辑历史做合并,用经典的操作转换算法要一小时,用 Eg-walker 只要 24 毫秒。它来自 Joseph Gentle 和 Martin Kleppmann 的论文,2025 年在 EuroSys 上发表。真正有意思的不只是速度,而是背后的窍门——一个只在合并期间存在的 CRDT,用完就丢掉。这就绕开了协作编辑领域长期的两难:操作转换把文档存成纯文本,省内存、打开即用,但合并至少 O(n²);CRDT 合并便宜、能点对点,代价是元数据要整份常驻内存,论文测得现有最好的 CRDT 光是查看和编辑就要用掉操作转换十倍以上的内存。
🔑 核心要点
- 同一份 Git Makefile 历史:操作转换要一小时,Eg-walker 只要 24 毫秒
- 思路是存历史而不是存状态,只在真正合并时才构造 CRDT
- 操作转换合并至少 O(n²),实时输入没问题,长离线分支就很痛苦
- 现有最好的 CRDT 光是打开文档就要操作转换十倍以上的内存
- 生产实现在 Diamond Types,另有以可读性优先的 TypeScript 参考实现
💡 金句
“What makes it interesting isn't just the speed. It's the trick behind it: a CRDT that only exists for the duration of a merge and is then thrown away.”
译:让它有意思的不只是速度,而是背后的窍门:一个只在合并期间存在、随后就被丢弃的 CRDT。
← 返回 dev.to 首页