版本向量(Version Vector)
版本向量是分布式系统中的核心概念,通过记录每个 peer 提交的操作数量,完整追踪所有节点的状态。
什么是版本向量?
版本向量是一个从 peer ID 到操作计数的映射,它显式列出每个 peer 及其对应的操作数量,从而完整描述某个版本包含的操作。
示例:{ "peer-A": 5, "peer-B": 3 } 表示该版本包含 peer A 的 0-4 号操作,以及 peer B 的 0-2 号操作。
主要特性
- 信息完整:显式列出全部 peer 及其操作计数
- 随 peer 数量增长:加入节点越多,结构越大
- 无需访问历史:仅凭版本向量即可判断包含哪些操作
- 便于比较版本:可以直接判断一个版本是否包含另一个版本
基本用法
import { } from "loro-crdt";
const = new ();
.("1");
const = .("content");
.(0, "Hello");
// 获取版本向量
const = .();
.(.()); // Map { "1" => 1 }何时使用版本向量
版本向量适用于:
- 同步协议——用于判断需要与其他节点交换哪些更新
- 网络通信——提供自包含的版本信息
- 分布式系统——跨多节点追踪状态
与 Frontiers 的对比
| 维度 | 版本向量 | Frontiers |
|---|---|---|
| 大小 | O(peer 数量) | 通常 O(1-2) |
| 信息量 | 完整的 peer 状态 | 仅包含边界操作 |
| 适用场景 | 同步 | 检查点 |
| 是否依赖历史 | 否 | 是(需历史信息) |
与 Frontiers 互转
import { } from "loro-crdt";
const = new ();
const = .();
const = .(); // 转为 Frontiers
const = .(); // 再转回版本向量