LevelDB源码解析(3) 变长编码

你也可以通过我的独立博客 —— www.huliujia.com 获取本篇文章

背景

LevelDB在内存中存储key、value时,最后是以单值形式存储到一个跳跃表中的,跳跃表我们在上一篇文章LevelDB源码解析之SkipList(跳跃表)聊过了。这里主要想谈一下,LevelDB是如何把key、value编码到一个单值里面的,顺带分析一下为什么要这样做。

思考题

如何把一对key、value编码到一个单值中呢?很自然的一个想法是用冒号做分割,存储成key:value这种格式。但是如果key或者value里面有冒号怎么办?总不能规定不允许使用冒号吧?所以使用特殊符号做区分是不够通用的。

一种常见的方法是用size-value的方式。比如先用4字节存储key的size,然后再存储key,再存储value的size和value。这种方式避免了使用特殊符号分割的局限性,通用性是OK的。缺点是多了两个size域,额外占用8个字节的存储。如果key和value都是比较小的,那么size域产生的存储开销就很可观了。假设key和value也都是4个字节,总共8个字节。size域的8个字节就使用了一半的存储空间了。

既然key和value这么小,我能不能只用2个字节存储size呢?如果key和value的大小能够限制在2^18大小,这样是可以的。但是如果有的key或者v

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值