跳到主要内容

Granite 键值封装与工作流

Granite 数据库初始化

Granite 封装了 RocksDB,以统一的方式管理数据库初始化及列族(CF)相关操作。

配置输入:

  • 数据库路径
  • 列族定义
  • 重置现有数据库或创建目录的相关选项

初始化流程:

  1. 重置(可选):如需重置则删除旧数据。
  2. 目录创建(可选):确保父目录存在。
  3. 数据库存在性检查
  • 已存在:打开数据库并获取现有列族句柄。
  • 不存在:创建新数据库并初始化所有必需的列族。
  1. 列族句柄管理:自动跟踪列族句柄及用于监控的监听器或回调钩子。

Granite 键封装

Granite 引入 KeyBuilderElementValue,标准化键的构建与解码流程。

ElementValue

支持多种数据类型:

  • 整数类型:int8int16int32int64
  • 字符串类型:变长字符串
  • 固定字符串类型:固定长度字符串

KeyBuilder

  • 支持前缀与后缀分离设计:
  • 前缀(Prefix):用于 RocksDB 前缀查找或切片转换
  • 后缀(Suffix):额外的键元素,可用于二级索引或排序
  • 核心方法:
  • build_key(values)——构建完整键
  • build_prefix_key(values)——仅构建前缀
  • build_suffix_key(values)——仅构建后缀
  • decode_key(key)——解析完整键
  • decode_prefix_key(key)——解析前缀
  • decode_prefix_key_with_filter(key)——解析前缀和后缀(支持可选过滤)

多前缀/可扩展性

  • _schema.prefix() 支持多前缀字段
  • _schema.suffix() 允许扩展额外字段
  • _key_filter 可对前缀+后缀进行自定义筛选
  • 兼容 RocksDB 固定前缀转换或自定义切片转换
  • 自动计算固定和可变前缀长度(_fixed_prefix_var_fixed_prefix
  • 支持大端/小端转换,确保 RocksDB 的前缀排序顺序

优势:

  • 封装键的序列化/反序列化逻辑
  • 在多列族和多前缀场景中无缝工作
  • 确保 SST 导入及快照/备份流程的一致性与正确性

SST 文件处理

  • Granite 封装了 RocksDB 的 SstFileWriter
  • 每个 SST 文件对应单个列族
  • 多列族场景下会生成多个 SST 文件
  • 导入时必须遵循 SST 文件的生成顺序,以维持数据一致性
  • 恢复与复制:
  • 从节点可通过主节点快照追平数据
  • SST 导入为顺序操作
  • 导入后可继续重放预写日志(WAL),恢复正常复制流程
  • KeyBuilder 保障:
  • 符合 RocksDB 的前缀排序要求
  • 后缀字段保留查询所需的完整业务逻辑

备份/检查点

Granite 支持两种备份方式:

1. 快照备份(基于 SST 文件)

  • 按列族生成 SST 文件
  • 恢复时按正确顺序导入 SST 文件
  • 支持增量备份和副本追平

2. 检查点备份(基于目录)

  • 创建 RocksDB 检查点目录
  • 恢复时直接打开检查点目录即可

Granite 优势:

  • 自动管理列族句柄
  • 跟踪 SST 文件及导入顺序
  • 提供导入、刷盘、压缩及事务操作的统一 API
  • 完全兼容多前缀和多列族 schema

与原生 RocksDB 的对比

特性原生 RocksDBGranite
列族初始化用户手动管理自动管理,缺失时自动创建
键构建用户自行处理KeyBuilder 支持多类型、多前缀、多后缀
前缀转换手动配置支持自定义切片转换,可选过滤功能
SST 写入手动实现封装实现,自动处理多列族排序
备份/恢复手动操作,需维护列族顺序自动导入/刷盘/压缩/事务 API
多前缀/多列族配置复杂通过前缀+后缀+过滤机制全面支持
监听器/钩子手动集成内置支持
事务/刷盘/压缩直接调用 DB APIGranite 统一 API

总结

Granite 提供了基于 RocksDB 的统一封装层,核心管理以下能力:

  • 数据库与列族初始化
  • 支持多类型、多前缀的键构建与解析
  • SST 文件生成与导入
  • 备份、检查点及副本追平

KeyBuilder + ElementValue 机制确保:

  • 全面支持多前缀场景
  • 保留 RocksDB 基于前缀的排序特性
  • 保障导入和恢复过程中的列族一致性
  • 无缝集成键过滤与扩展能力

Granite 抽象了大量重复的 RocksDB 底层逻辑,同时为生产级工作负载提供高可靠性、可扩展性和正确性保障。