文档首页/ 云数据库 GeminiDB/ GeminiDB Redis接口/ 开发参考/ 使用紧凑型编码实现小对象存储
更新时间:2025-07-29 GMT+08:00

使用紧凑型编码实现小对象存储

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 时生效;若对象大小超过该阈值,仍使用传统编码。
  • 查看对象的编码格式

    执行以下命令可查看指定 Key 的存储格式:

    OBJECT STORAGEFORMAT <key>

  • 手动转换对象的编码格式

    若需将紧凑型编码的 Key 切换回传统编码,可执行:

    OBJECT REFORMAT <key> NORMAL

    注意:不支持将传统编码转换为小对象编码。

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