WiredTiger引擎被MongoDB收购,WiredTiger数据结构不是b-tree,不是b-tree,不是b-tree。
WiredTiger数据结构官方说明
简单截图作为证明。
在这里插入图片描述
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无需主键的原因.
网友评论