B+ Tree Implementation in boltdb
如何存储和表示 B+ 树 前面已经知道,page 是代表 B+ 树被序列化到了磁盘上的结构,一个 page 就是一个 B+ 树节点,通过 mmap 把磁盘上的页映射到内存,然后用 unsafe.Pointer(p) 直接把二进制序列化成 page 结构。也正因为如此,x86 架构上生成的 db 文件是不能在 ARM 架构的机器上打开的。 而 node 结构同样也表示内存中一个 B+ 树的节点,node 与 page 的区别是 node 按需创建的,对于不需要修改的B+树节点,boltdb直接从page中读取数据,当需要修改某个 B+ 树节点时,比如插入删除数据,boltdb 从 page 结构生成成 node 。(此处存疑,我觉得应该是 Cursor 在游走的过程中就会把 page 转化成 node) Bucket.node() 函数中就有如下一段话 func (b *Bucket) node(pgid pgid, parent *node) *node { // Retrieve node if it's already been created. if n := b.nodes[pgid]; n != nil { return n } // Read the page into the node and cache it....