Operations 与 Changes
快速概览
Operation 是原子级编辑;Change 是带有元数据的逻辑操作组。理解二者有助于你优化同步与性能。
核心概念
Operations
- 改变的原子单元(插入单个 Unicode 字符、删除单个字符、向 Map 插入条目等)
- 内部会自动合并以提升效率
- 每个操作都有唯一 ID:
(peerId, counter)
Changes
- 连续操作的集合
- 包含元数据(时间戳、依赖、peer ID)
- 通过
commit()或自动提交创建
const = new ();
const = .("text");
.(0, "Hello"); // Operation
.(5, " World"); // Operation
.(); // 合并为一个 Change自动合并
来自同一 peer 的连续操作会自动合并到一个 Change 中:
const = new ();
const = .("text");
.(0, "abc");
.(); // Change #1
.(3, "def");
.(); // 与 #1 合并(同一 peer,连续操作)何时会创建新的 Change
- 跨 peer 依赖:在导入远端操作之后
- 时间间隔:启用时间戳时,若提交间隔超过合并阈值(默认 1000 秒)
- 不同的提交信息:
const = new ();
.("text").(0, "v1");
.(); // Change #1
// 导入其他 peer 的操作
const = new ();
.("text").(0, "v1");
const = .({ : "update" });
.();
// 下一次提交会新建 Change(存在远端依赖)
.("text").(0, "v2");
.(); // Change #2对同步与存储的影响
- 历史记录:Change 追踪逻辑工作单元
- 同步:依赖关系保证因果顺序
- 存储:自动合并减少元数据开销