我知道B-Tree如何在内存中工作,它很容易实现。但是,目前完全超出我的是如何找到在磁盘上有效工作的数据布局,例如:
如果有人能够深入了解磁盘级布局B树结构,我将非常感激。特别是最后一个要点让我头疼不已。我也很欣赏指向书籍,但我见过的大多数数据库文献只解释了高级结构(即"这就是你在内存中的表现方式"),但是跳过了细节的细节。在磁盘布局上。
答案 0 :(得分:6)
UPDATE(oracle index internals的归档版本):http://web.archive.org/web/20161221112438/http://www.toadworld.com/platforms/oracle/w/wiki/11001.oracle-b-tree-index-from-the-concept-to-internals
OLD(原始链接不再存在): 有关oracle index internals的一些信息:http://www.toadworld.com/platforms/oracle/w/wiki/11001.oracle-b-tree-index-from-the-concept-to-internals
注意:
数据库不直接实现基于B树的索引,而是直接实现名为B + tree的变体。根据维基百科:
B +树可以看作是一个B树,其中每个节点只包含键(不是键值对),并且在底部添加了一个附加级别的链接叶子。
数据库通常使用面向块的存储,而b +树更适合于b树。
这些块是固定大小的,并留有一些空闲空间,以适应未来价值或密钥大小的变化。
一个块可以是一个叶子(保存实际数据)或分支(保存指向叶子节点的指针)
玩具模型如何实现写入磁盘(对于算术简化的块大小为10k):
从大索引中读取信息时:可以执行以下操作:
一个非常大的索引可以拆分多个文件,然后块的地址就像(filename_id,address_relative_to_this_file)
答案 1 :(得分:0)