磁盘上数据结构的体系结构

最接近我最终了解磁盘btree的架构是this.

它简单易懂,易于阅读和理解.但我仍感到困惑.内存数据结构似乎根本就没有.我错过了什么吗?是什么让这成为一个btree?只是长点数组“指向”其子节点的键吗?这有效吗?这就是大多数数据库和文件系统的设计方式吗?

有没有办法在内存中的磁盘btree(或其他数据结构)上实现?每个节点包含文件偏移量的东西?

最佳答案
节点指针通常作为地址存储在磁盘上(例如使用长整数).

通常,实现选择使用物理或逻辑地址:

>物理地址指定存储节点的实际偏移量(在文件或类似文件中).
>相反,逻辑地址需要某种机制,每次导航/遍历指针时,该机制都会解析为物理地址.

物理寻址更快(因为不需要解析机制).但是,逻辑寻址可以允许重新组织节点而无需重写指针.能够以这种方式重新组织节点的能力可以用作实现良好的群集,空间利用甚至低级数据分发的基础.

一些实现使用逻辑和物理寻址的组合,使得每个地址由(动态地)引用到段(blob)的逻辑地址和该段内的物理地址组成.

重要的是要注意节点地址是基于磁盘的,因此它们不能直接转换为内存中的指针.

在某些情况下,将数据加载到内存中时将基于磁盘的指针转换为内存指针是有益的(然后在写入时转换回基于磁盘的指针).

这种转换有时称为指针调配,可以通过多种方式实现.根本的想法是,在导航/遍历指针之前,不应将由混合内存指针寻址的数据加载到内存中.

常见的方法是使用逻辑内存寻址方案或使用内存映射文件.内存映射文件使用虚拟内存寻址,其中内存页在访问之前不会加载到内存中.虚拟内存映射文件由OS提供.这种方法有时称为页面错误寻址,因为访问未映射到内存的内存页面上的数据会导致页面错误中断.

转载注明原文:磁盘上数据结构的体系结构 - 代码日志