哈希存储引擎——Bitcask

Bitcask是一个基于哈希表结构的键值存储系统,Append-only,所有的写操作只追加不修改老的数据。每个文件有一定的大小限制,当文件增加到相应大小,就会产生一个新文件,老的文件只读不写。

数据结构

Bitcask数据文件中的数据是一条一条写入操作,记录包含,key,value,主键长度,value长度,时间戳(timestamp)以及crc校验值。(删除操作不会删除旧的条目,而是将value设定为一个特殊的标识值)。
内存中是采用基于hash表的索引数据结构,通过主键快速定位到value。hash表中的每一项包含三个用于定位数据的信息,文件编号,value在在文件中的位置,value长度。通过读取file_id对应文件的value_pos开始的value_sz个字节,得到value值。
写入时,首先将Key-Value记录追加到活跃数据文件的末尾,然后更新内存hash表。
这里写图片描述

定期合并

记录更新后,原来的记录成为垃圾数据。如果一直保存下去,文件会无限膨胀。
需要定期执行合并操作。
对同一个key的多个操作以只保留最新一个的原则进行删除。

快速恢复

hash索引存储在内存中,服务器断电重启后重建hash需要扫描一遍数据文件,如果数据文件很大,这是一个非常耗时的过程。
对老数据进行合并操作后,将产生的新数据文件备份一份到硬盘,当重建hash的时候,不需要扫描所有的数据文件,只需要读取备份文件中的数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值