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