一、什么是 KV 分离
KV 分离的核心思想:当某条记录的 Value 大小超过设定阈值时,把 Value 单独存放到独立的 Blob 文件中,SST 文件中只保留一个指向 Blob 的指针。这样:
·SST 文件体积大幅缩小,Compaction 只需搬运指针
·大 Value 数据"沉淀"在 Blob 文件中,几乎不参与 Compaction
·写放大显著下降,磁盘 I/O 与 SSD 寿命同步受益
数据布局对比
TDStore 的 KV 分离能力基于 RocksDB 7.x Integrated BlobDB 实现,并在此之上增加了多项 TDStore 自研增强(详见 性能优化点)。
二、核心收益
| 收益 | 说明 |
| 写放大降低 | 大 Value 不再参与 Compaction,整体写放大可下降数倍 |
| 写吞吐提升 | Compaction 压力下降后,前台写入更平稳,长尾延迟改善 |
| SSD 寿命延长 | 总写盘量减少,SSD 磨损降低 |
| 备份/迁移更高效 | SST 体积变小,Region 迁移、Snapshot 同步更快 |
注意:说明:
注意:实测一览(详见 性能效果(实测数据)):
三、适用与不适用场景
推荐开启 KV 分离的场景:
·单行平均 Value 大小 ≥ 1KB,典型如:
·富文本、文章正文、聊天消息记录(TEXT / LONGTEXT)
·图片缩略图、二进制小附件(BLOB)
·大 JSON 文档(用户画像、商品详情、日志聚合)
·写多读少,或读取以点查/主键查为主
·业务已观察到明显的 Compaction 压力或写放大问题
不建议开启 KV 分离的场景:
·大部分 Value 都很小(< 256 B),开启反而带来一次额外的指针解引用,得不偿失
·对点查 P99 延迟高度敏感的业务(开启后单次读多一次 Blob 文件 I/O)
·大量短生命周期记录(频繁更新/删除),Blob GC 压力较大
·范围扫描密集且每条都需要读取 Value 的分析型查询
决策流程图
注意:说明:
注意:建议先在测试环境对照基准压测(启用 vs 关闭),观察写放大、QPS、延迟,再决定是否上生产。