TDSQL Boundless TDStore KV 分离(Key-Value Separation)

在 LSM-Tree 存储引擎中,键(Key)和值(Value)默认存储在同一个 SST 文件内。当 Value 较大(例如几 KB 到几十 KB 的 TEXT / BLOB / JSON 字段)时,每一次 Compaction 都需要把这些大 Value 反复读出、写入下一层,造成严重的写放大(Write Amplification)。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

一、什么是 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、延迟,再决定是否上生产。

赞 (0)
上一篇 4天前
下一篇 4天前