磁盘上数据结构的体系结构
最接近我最终了解磁盘btree的架构是
this.
它简单易懂,易于阅读和理解.但我仍感到困惑.内存数据结构似乎根本就没有.我错过了什么吗?是什么让这成为一个btree?只是长点数组“指向”其子节点的键吗?这有效吗?这就是大多数数据库和文件系统的设计方式吗? 有没有办法在内存中的磁盘btree(或其他数据结构)上实现?每个节点包含文件偏移量的东西? 解决方法
节点指针通常作为地址存储在磁盘上(例如使用长整数).
通常,实现选择使用物理或逻辑地址: >物理地址指定存储节点的实际偏移量(在文件或类似文件中). 物理寻址更快(因为不需要解析机制).但是,逻辑寻址可以允许重新组织节点而无需重写指针.能够以这种方式重新组织节点的能力可以用作实现良好的群集,空间利用甚至低级数据分发的基础. 一些实现使用逻辑和物理寻址的组合,使得每个地址由(动态地)引用到段(blob)的逻辑地址和该段内的物理地址组成. 重要的是要注意节点地址是基于磁盘的,因此它们不能直接转换为内存中的指针. 在某些情况下,将数据加载到内存中时将基于磁盘的指针转换为内存指针是有益的(然后在写入时转换回基于磁盘的指针). 这种转换有时称为指针调配,可以通过多种方式实现.根本的想法是,在导航/遍历指针之前,不应将由混合内存指针寻址的数据加载到内存中. 常见的方法是使用逻辑内存寻址方案或使用内存映射文件.内存映射文件使用虚拟内存寻址,其中内存页在访问之前不会加载到内存中.虚拟内存映射文件由OS提供.这种方法有时称为页面错误寻址,因为访问未映射到内存的内存页面上的数据会导致页面错误中断. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |