• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Redis与KV存储(RocksDB)融合之编码方式

redis 海叔叔 17小时前 3次浏览 已收录 0个评论

Redis与KV存储(RocksDB)融合之编码方式

简介
Redis 是目前 NoSQL 领域的当红炸子鸡,它象一把瑞士军刀,小巧、锋利、实用,特别适合解决一些使用传统关系数据库难以解决的问题。Redis 作为内存数据库,所有的数据全部都存在内存中,特别适合处理少量的热数据。当有巨量数据超过内存大小需要落盘保存时,就需要使用 Redis + KV存储的方案了。

本文涉及的Ardb就是一个完全兼容Redis协议的NoSQL的存储服务。其存储基于现有成熟的KV存储引擎实现,理论上任何类似B-Tree/LSM Tree实现的KV存储实现均可作为Ardb的底层存储实现,目前Ardb支持LevelDB/RocksDB/LMDB.

本文以Ardb为例,介绍Redis与KV存储之间融合时编解码层的实现。

编码方式
Redis与KV存储的融合方案中, 编解码层是一个很重要的环节。通过编解码层,我们可以屏蔽了各种kv存储实现的不同,可以在任意一个简单的kv存储引擎上,封装实现Redis中string,hash,list,set,sorted set等复杂类型的数据结构。

对于String类型,很显然可以与KV存储中的一个KV对一一对应;

对于其它的容器类型,我们需要

1、一个KV来存储其整个Key的元信息(比如List的成员个数,过期时间等);
2、每一个成员需要一个KV来保存成员的名称和值;
对于sorted set,其每个成员有score和rank两个属性,所以需要:

1、一个KV保存整个Key的元信息
2、每一个成员需要一个KV保存 score信息
3、每一个成员需要一个KV保存每个成员对应 rank 信息
Key的编码格式
对于所有的Key, 包含同样的前缀,编码格式定义如下:

[]
namespace用于支持类似redis中的库概念, 可以为任意字符串, 不限制必须为数字;
key则是一个变长二进制字符串
type用于定义一个简单key-value的类型,此类型隐含表明key的数据结构类型;一个字节
meta信息的key中type固定为KEY_META;具体类型将在value中定义(参考下一节)
除以上三部分外,不同类型的key可能有附加字段;如Hash的key可能需要附加field字段


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址