前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Boltdb源码分析(三)----meta结构

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

作者头像
月牙寂道长
发布2019-07-02 14:19:21
5170
发布2019-07-02 14:19:21
举报
文章被收录于专栏:月牙寂

版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。golang群:570992072。qq 29185807 个人公众号:月牙寂道长 公众号微信号yueyajidaozhang https://cloud.tencent.com/developer/article/1454572

本文公众号文章链接:https://mp.weixin.qq.com/s/c_L0wF09o_hXnShxeoyG1Q

本文csdn博客文章链接:https://cloud.tencent.com/developer/article/1454572

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

前面文章已经讲解了

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

node结构Boltdb源码分析(二)----node结构

本文分析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结构是如何的

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

代码语言:javascript
复制
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中

龚浩华

月牙寂道长

QQ 29185807

2018年04月09日

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年04月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档