bitcask
2015-08-06 21:02
369 查看
Bitcask模型是一种日志型kv模型。所谓日志型,是指它不直接支持随机写入,而是像日志一样支持追加操作。Bitcask模型将随机写入转化为顺序写入。
任意时刻,系统中只有一个数据文件支持写入,称为active data file。其余的数据文件都是只读文件,称为older data file。即所有写操作都是对最后更新文件的一个追加。
除了增加外,删除和更新也全部不随机读写已有文件。删除只是增加一个带删除标志的记录,随后更新索引hash;而更新也是一样。
文件中的数据结构非常简单,是一条一条的数据写入操作,每一条数据的结构如下:
上面数据项分别为:后面几项的crc校验值,时间戳,key,value,key的大小,value的大小。
而数据文件存储的就是连续一条条上面格式的数据,如下图:
kv之间的映射是通过中间的一个hash结构来处理,包含:记录文件的编号,value长度,value的在文件中的位置和时间戳。
Bitcask的总体数据结构如下图:
总体的流程如下:
为加速重启时建立hash表结构的速度,额外引入了hintfile,它将真实数据内容换成偏移。这样在建立hash时就不需要读数据文件了。
理解bitcask架构,必须要考虑下面的问题:
bitcask hash表内存占用如何计算?
bitcask 文件读取流程?
bitcask 文件写入流程?
bitcask 文件合并流程?
任意时刻,系统中只有一个数据文件支持写入,称为active data file。其余的数据文件都是只读文件,称为older data file。即所有写操作都是对最后更新文件的一个追加。
除了增加外,删除和更新也全部不随机读写已有文件。删除只是增加一个带删除标志的记录,随后更新索引hash;而更新也是一样。
文件中的数据结构非常简单,是一条一条的数据写入操作,每一条数据的结构如下:
上面数据项分别为:后面几项的crc校验值,时间戳,key,value,key的大小,value的大小。
而数据文件存储的就是连续一条条上面格式的数据,如下图:
kv之间的映射是通过中间的一个hash结构来处理,包含:记录文件的编号,value长度,value的在文件中的位置和时间戳。
Bitcask的总体数据结构如下图:
总体的流程如下:
为加速重启时建立hash表结构的速度,额外引入了hintfile,它将真实数据内容换成偏移。这样在建立hash时就不需要读数据文件了。
理解bitcask架构,必须要考虑下面的问题:
bitcask hash表内存占用如何计算?
bitcask 文件读取流程?
bitcask 文件写入流程?
bitcask 文件合并流程?
相关文章推荐
- 如何获取XML
- Single Number
- POJ 3694 Network
- poj 2513 Colored Sticks(欧拉回路 并查集 路径压缩 字典树)(困难)
- 反向代理
- Android如何跳过小米和魅族手机对Toast的限制
- C++ 管道
- 使用存储过程实现数据库的还原与备份[转]
- rpm的使用入门
- C++ 管道
- C++ Primer 学习笔记_76_模板和泛型编程 --模板定义[继续]
- ubuntu php安装 curl扩展
- 浅谈对回调函数的理解
- 图结构练习——最小生成树 Kruskal算法
- 九度OJ 题目1032:ZOJ
- 该离开了吗?
- 连续特征离散化的好处
- 读《数学之美》第三章 统计语言模型
- uwsgi 和 flask的使用
- Leetcode(58)题解:Length of Last Word