博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Boltdb源码分析(一)-------page结构
阅读量:4030 次
发布时间:2019-05-24

本文共 935 字,大约阅读时间需要 3 分钟。

本文公众号文章链接:

本文csdn博客链接:

 

 

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相对比结构会固定,但内容更多

后续文章再分析吧

 

 

 

 

龚浩华

月牙寂道长

QQ 29185807

2018年04月03日

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

第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注

你可能感兴趣的文章
揭底JVM,怎么能不了解G1垃圾收集器
查看>>
如何优雅的编程,lombok你怎么这么好用
查看>>
@RequestParam、@QueryParam等Spring常见参数注解区别,你知道吗
查看>>
玩转远程Debug,两步轻松开启IDEA远程调试
查看>>
Jmeter压测错误,Address already in use: connect
查看>>
Intellij IDEA常用快捷键,最全总结
查看>>
前端干货,超实用的JQuery小技巧
查看>>
Spring Boot 几个常见的核心注解
查看>>
程序员需要懂的一些Linux基本命令
查看>>
程序员需要掌握的一些网络协议汇总
查看>>
搞定Windows下的Hadoop环境安装
查看>>
设计模式之单例模式的五种写法
查看>>
Nginx开启Gzip压缩,使你的网页急速加载
查看>>
一文看清HBase的使用场景
查看>>
除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单
查看>>
解析zookeeper的工作流程
查看>>
搞定Java面试中的数据结构问题
查看>>
深入理解Apache Flink核心技术
查看>>
SpringCloud 各组件原理图,面试必备
查看>>
面试题总结:可能是全网最好的MySQL重要知识点
查看>>