使用紧凑型编码实现小对象存储
GeminiDB采用RocksDB作为底层存储引擎。由于 RocksDB 仅支持键值(KV)存储模型,系统需要将各类数据结构转换为 KV 格式进行存储,这一过程涉及数据编码。在传统编码方案中,存储包含 N 个 field-value 对的hash对象需要 N+1 个 KV 对,这导致执行 HGETALL 命令时需要执行 N+1 次读取操作。在部分业务场景中,如广告RTA,hash类型数据特征为单个元素字节少且元素数量不多,可使用GeminiDB hash紧凑型编码方案,进一步提升读性能。紧凑型编码方案的核心在于将 N 个 field-value 对与 1 个元数据对编码到单个 KV 对中,从而减少读取次数,使 HGETALL/HMGET 命令的性能得到大幅提升。目前,紧凑型编码方案仅支持hash数据类型的小对象存储优化。
应用场景
由于紧凑型编码将所有 field-value 对存储在同一个 KV 对中,因此不适用于单个hash 对象过大的场景。该编码方式最适合以下特征的 Hash 数据:
- 单个hash对象大小≤1KB。
- 单个hash对象field-value对数量在10-50之间。
使用须知
- 紧凑型编码仅支持hash类型。
- 紧凑型编码不适用于大对象,大对象场景使用紧凑型编码可能导致hset/hmset命令时延上升。
- 不支持编码降级,开关仅对新增对象生效,不会自动对已有对象进行改造。
配置与使用说明
- 启用/禁用紧凑型编码
参考通过负载均衡地址连接实例(推荐)通过执行“ CONFIG SET”命令动态调整“small-hashobj-encode-size”参数,控制是否启用紧凑型编码。
参数
small-hashobj-encode-size
单位
Byte
默认值
0(禁用紧凑型编码,使用传统编码)
推荐值
1024
参数说明
- 0:禁用紧凑型编码,所有 hash 对象均采用传统编码存储。
- 1024:启用紧凑型编码,仅当 Hash 对象大小 ≤ 1024B 时生效;若对象大小超过该阈值,仍使用传统编码。

命令无差别:无论对象采用传统编码或紧凑型编码,所有操作命令(如 HGET、HSET 等)均保持兼容,无需额外适配。