Bitcask模型是一种日志型kv模型。所谓日志型,是指它不直接支持随机写入,而是像日志一样支持追加操作。Bitcask模型将随机写入转化为顺序写入。

任意时刻,系统中只有一个数据文件支持写入,称为active data file。其余的数据文件都是只读文件,称为older data file。即所有写操作都是对最后更新文件的一个追加。

除了增加外,删除和更新也全部不随机读写已有文件。删除只是增加一个带删除标志的记录,随后更新索引hash;而更新也是一样。

文件中的数据结构非常简单,是一条一条的数据写入操作,每一条数据的结构如下:

上面数据项分别为:后面几项的crc校验值,时间戳,key,value,key的大小,value的大小。
而数据文件存储的就是连续一条条上面格式的数据,如下图:

kv之间的映射是通过中间的一个hash结构来处理,包含:记录文件的编号,value长度,value的在文件中的位置和时间戳。

Bitcask的总体数据结构如下图:

总体的流程如下:

为加速重启时建立hash表结构的速度,额外引入了hintfile,它将真实数据内容换成偏移。这样在建立hash时就不需要读数据文件了。

理解bitcask架构,必须要考虑下面的问题:

  1. bitcask hash表内存占用如何计算?
  2. bitcask 文件读取流程?
  3. bitcask 文件写入流程?
  4. bitcask 文件合并流程?

最新文章

  1. jquery常见获取高度
  2. Django1.9开发博客(11)- 富文本与代码高亮
  3. 【T-SQL系列】常用函数—聚合函数
  4. 警惕javascript代码中的“</script>”!
  5. PAT 1080. Graduate Admission (30)
  6. 数学计数原理(Pólya,高精度):SGU 294 He's Circles
  7. iOS异步图片加载优化与常用开源库分析
  8. 单/多行文本添加省略号 (o゚ω゚o)
  9. MVC简单的认识
  10. C#基础知识-面向对象思想之继承(八)
  11. 使用express, create-react-app, mongodb搭建react模拟数据开发环境
  12. java开发都需要学什么
  13. oracle sql developer 出现 : 适配器无法建立连接问题解决方案 The Network Adapter could not establish the connection
  14. day02 运算符
  15. Android Handler、Message、MessageQueue和Looper官方说明
  16. Coursera, Deep Learning 1, Neural Networks and Deep Learning - week1, Introduction to deep learning
  17. ios安装ipa与安卓安装apk
  18. gcc编译器命令使用详解
  19. mysql系列五、mysql中having的用法
  20. python 全栈开发,Day77(图书管理系统)

热门文章

  1. man/info
  2. 在Windows7下启动MongoDB服务的解决方案
  3. 多种方式实现在Android 手机上抓包
  4. django1.9 创建数据表
  5. js流程控制语句
  6. linux下mysql的忘记root密码的解决办法
  7. SSH整合简单实例
  8. php课程---文件操作及文件上传的代码总结
  9. IOS彩票第二天设置界面(2)
  10. 【iCore3 双核心板】例程十四:FATFS实验——文件操作