Boltdb源码分析(三)-meta结构

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

前面文章已经讲解了

本文分析meta结构

page结构中我们已经见识到了meta是其中的一种结构

要了解meta得从db的初始化开始

github.com/boltdb/bolt/db.go

以上是打开数据文件

文件锁,防止多个操作数据库文件

重点来了,如果文件大小是0的话,说明是一个新的数据库,则进行init。

如果不是0的话,说明是一个已有数据的数据库文件,则进行加载。加载中,加载了第一个pagesize。

接着是对数据库文件进行内存映射mmap。再往下就是freelist的初始化。

到目前我们还不知道meta是什么

那么我们从数据库从0开始init的时候来看

申请了一个4个page的buf。在pgid0,pgid1两个page上面初始化了meta

在pgid2上面初始化了freelist,pgid3上初始化了leafpage。

最后将buf写入文件中,其中offset为0。并将数据同步到了磁盘中。

这里的文件前4个page结构为

下面我们看看meta结构是如何的

这里面看看几个数据的含义

m:=p.meta()

m.magic=magic 魔数,不解释

m.version=version 版本号

m.pageSize=uint32(db.pageSize) pagesize

m.freelist=2 指向freelist的pgid2

m.root=bucket{root:3} 指向bucket的pgid3

m.pgid=4 正式数据是从pgid4开始的

m.txid=txid(i) 事务序列号

m.checksum=m.sum64() checksum

再看看如何将meta写入page中的

首先根据事务的id号计算page id

重新计算checksum,然后将meta内容copy到page中

龚浩华

月牙寂道长

2018年04月09日

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180409G0XR1Q00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券