Boltdb源码分析(一)-page结构

admin 2019-7-17 144

boltdb是一个纯粹的key Value数据库,其宗旨是提供一个简单,快速,可信的数据库。此数据库广泛应用于各大开源组件中。

源码目录为:

源码比较多,且其内部逻辑比较复杂,本文只分析其中的page结构。

github.com/boltdb/bolt/page.go

page结构体。page指的是内存中的页,这个结构体其实是用来对应页,然后将其管理起来的数据结构。

id:是pgid类型,是给page的编号。

flags:是指的此页中保存的具体数据类型。(有好几种)

count:记录具体数据类型中的计数,不同的类型具有不同的含义

overflow:用来记录是否有跨页

ptr:是具体的数据类型。这种用法让我想起来了c语言中的用法。在Linux内核中经常用到。比如典型的场景就是虚拟文件系统的接口。

这个是具体的数据类型。上面写的有4种。

branchPageFlag:分支节点

leafPageFlag:叶子节点

以上是用树结构来管理页的关系

metaPageFlag:meta页

freelistPageFlag:freelist页(这个以后文章再说吧)

上面的pageHeaderSize很难解释。还是画图来看吧。

从上面的图就可以很直接的看到了。page的头部包含了一些信息,最后的ptr是具体的数据结构。

获取到meta格式的数据结构

上面是叶子节点的转换

主要是数组的整个转化[0x7FFFFFFFF]leafpageElement 类型,

指针是p.ptr,返回了数组转化后的[:]

pos就是相对的偏移

ksize,key的大小

vsize,value的大小

具体可以看下图结构

分支节点的类似的转化

pos为相对于branchPageElement的偏移位置

看下这个具体的内存分布结构图

github.com/boltdb/bolt/db.go

meta相对比结构会固定,但内容更多

后续文章再分析吧

龚浩华

月牙寂道长

2018年04月03日

如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。


少客联盟- 版权声明 1、本主题所有言论和图片纯属会员个人意见,与少客联盟立场无关。
2、本站所有主题由该帖子作者发表,该帖子作者admin少客联盟享有帖子相关版权。
3、少客联盟管理员和版主有权不事先通知发贴者而删除本文。
4、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者admin少客联盟的同意。
5、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
6、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
7、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。
8、官方反馈邮箱:chinasuc@chinasuc.cn


上一篇:如何将PG,PPAS,oracle,mysql,ms sql,sybase 迁移到 PG, PPAS (支持跨版本升级)
下一篇:Boltdb源码分析(二)-node结构
Whatever is worth doing is worth doing well. juvenile hacker league
最新回复 (0)
    • 少客联盟
      2
        登录 注册 QQ登录(停用)
返回