我知道 B-Tree 如何在内存中工作,它很容易实现。但是,我不知道如何找到在磁盘上有效工作的数据布局,例如:
如何以符合这些标准的方式在磁盘级别布局 B-Tree 结构?最后一个要点尤其让我很头疼。我见过的大多数数据库文献只解释了高级结构(即“这就是你在内存中的做法”),但跳过了磁盘布局的细节。
备注:
数据库不直接基于 B 树实现索引,而是基于称为 B+ 树的变体。根据维基百科:
B+ 树可以看作是一个 B 树,其中每个节点只包含键(而不是键值对),并且在底部添加了一个附加层,并带有链接的叶子。
数据库通常使用面向块的存储,而 b+ 树比 b 树更适合这种情况。
块是固定大小的,并留有一些可用空间以适应未来值或键大小的变化。
块可以是叶子(保存实际数据)或分支(保存指向叶节点的指针)
如何实现写入磁盘的玩具模型(用于算术简化的块大小 10k):
从大索引中读取信息时:可以去如下:
一个非常大的索引可以在多个文件上拆分,那么块的地址将是 (filename_id, address_relative_to_this_file)