AttributeMap 分区
单个 Attribute 会逐渐变成一个很大的 value,每次写入都要重写它。这两种模式都把数据拆到有大小上限的 AttributeMap instance 中,让一次读取或写入只涉及一个 instance。
- 顺序分块 AttributeMap — 将有序历史 append 到有大小上限的不可变 chunk。
- Hash 分区 AttributeMap — 通过稳定业务 key 直接查找和更新结构化记录。
按访问方式选择:
- 只追加且要保持顺序的数据:Sequentially Chunked。
- 按稳定 key 查找或更新:Hash-Partitioned。
对比
| 维度 | Sequentially Chunked | Hash-Partitioned |
|---|---|---|
| 分组方式 | 按递增 sequence,每 100 条形成一个 chunk | Canonical key 的 FNV-1a hash modulo 1,000 |
| 主要目标 | 高效 append 和按顺序分页 | 按稳定业务 key 直接 lookup 和 upsert |
| 典型数据 | Subscriber history、agent messages、audit events | Customer profiles、account metadata、配置目录 |
| 单次读取 | 一个顺序 chunk | 一个 hash bucket |
| 单次写入 | 重写活动 chunk;rollover 时额外写 archive | 重写目标 bucket |
| 顺序 | 天然保留写入顺序 | 没有自然全局顺序 |
| 按 key 查找 | 通常需要扫描多个 chunk 或额外索引 | 直接计算一个 partition |
| 更新旧数据 | 不适合;archive chunk 应保持不可变 | 适合在目标 bucket 内 upsert |
| 写入并发 | 所有 append 竞争同一个活动 chunk | 不同 partition 使用独立 lock |
| 数据增长 | 自动创建新 chunk,不需要 rehash | Partition 数固定,每个 bucket 随总量增长 |
| 分布 | 按记录数天然均衡 | 通常近似均衡,但可能出现热点 partition |
| 修改参数 | 新数据可以使用带版本的 chunk 策略 | 修改 partition 数需要 rehash 和 migration |
| 全量枚举 | 按顺序读取所有 chunk | 读取最多 1,000 个 partition |
| 最适合 | Append-only、有时间或 sequence 顺序的数据 | 有稳定 lookup key 的结构化 value |