MongoDB数据结构b+tree

WiredTiger引擎被MongoDB收购,WiredTiger数据结构不是b-tree,不是b-tree,不是b-tree。
WiredTiger数据结构官方说明
简单截图作为证明。

image.png
对于WiredTiger存储引擎来说,集合所在的数据文件和相应的索引文件都是按b-tree结构来组织的,不同之处在于数据文件对应的b-tree叶子结点上除了存储键名外(keys),还会存储真正的集合数据(values),所以数据文件的存储结构也可以认为是一种b+tree,其整体结构如下图所示:
在这里插入图片描述

rootpage、internal page和leaf page,前两者包含指向其子页的page index指针,不包含集合中的真正数据,leaf page包含集合中的真正数据。leaf page包含一个页头(page header)、块头(block header)和真正的数据(key/value),其中页头定义了页的类型、页中实际载荷数据的大小、页中记录条数等信息;块头定义了此页的checksum、块在磁盘上的寻址位置等信息。
WiredTiger有一个block manage模块,用来为page分配block。如果要定位某一行数据(key/value)的位置,可以先通过block的位置找到此page(相对于文件起始位置的偏移量),再通过page找到行数据的相对位置,最后可以得到行数据相对于文件起始位置的偏移量offsets。

mongodb和mysql索引数据结构也是采用b+tree,但是叶子节点存储的是数据主键id,这也是为什么mongodb和mysql必须要有主键的原因,而PostgreSQL索引数据结构也是采用b+tree,但叶子节点存储的是数据偏移量,这也是PostgreSQL无需主键的原因.

推荐两篇文章:wiredtiger作者文章预写日志第一篇
wiredtiger作者文章预写日志第二篇

你可能感兴趣的:(MongoDB数据结构b+tree)