此次阅读 BlotDB 源码的目的主要是为了了解BlotDB如何实现如下功能。
1.学习 DB 文件是如何通过字节组织成具体的文件、如何进行读写?
2.BoltDB 如何实现事务?
3.BlotDB 如何实现 MVCC?
4.通过 BlotDB 了解 mmap。
本章主要为了阐述“学习DB文件是如何进行通过字节组织成具体的文件,如何进行读写?”。
page 介绍
在 BlotDB,一个 db 就是一个文件,以 page 为单位进行读写,并且通过 page 来组织 db文 件,具体可以查看page.go,文件定义了 page 的数据结构以及 data 相关类型的定义。
type page struct {
id pgid //页ID
flags uint16 //页类型,区分页保存的具体的数据类型
count uint16 //元素个数
overflow uint32 //对应节点溢出页的个数,即使用 overflow+1 个页来保存对应节点
ptr uintptr //指向具体的数据
}
我们先来看一个简单的例子(Student 这个结构体是固定长度的数据结构)。
type Student struct {
Id int
Age int
}
func SimpleExample(){
pid := pgid(1)
pageSize := os.Getpagesize()
buf := make([]byte,pageSize)
p2 :=