0%

《其他》Boltdb原理浅析

bucket

bucket类似于一个表

全局有一个记录所有bucket的bucket,就是存储表信息的总表,key是bucket名称,value是指向bucket数据的bucket结构体

每个bucket从磁盘加载出来都是一颗B+tree树,树的每个节点占用一个页

下面是bucket整体的逻辑结构图

内联bucket

内联bucket是指叶子结点某元素的value直接存储的一个bucket

内联bucket有且只有一个叶子结点

子bucket

子bucket是指叶子结点某元素的value指向的另一个bucket

内联bucket数据少,独占一个page浪费空间,所以直接存储数据,相对于内联bucket,子bucket就是内联bucket的指针

叶子结点物理结构

非叶子结点物理结构

事务原理

  1. begin: 复制最新的meta,root bucket引用拿过来
  2. 修改数据:只是内存中改动
  3. commit:会为脏 node 分配新的 page,同时将之前使用的 page 释放,放入pending中。虽然会修改磁盘数据,但是不会覆盖原来数据,只要meta没写入磁盘,修改就不会成功
  4. rollback:就是不提交meta修改,前面分配的新page都释放

meta写入磁盘时中断导致meta损坏怎么办

meta.checksum 用于检测 metadata 的完整性

metadata 交替保存在文件前2个 page 中,当发现一个新写入的 metadata 出错时会使用另一个




微信关注我,及时接收最新技术文章