磁盘指针offsets
来自文件的开头。
如果您key
指向地址n那么这意味着
- 打开数据文件
- 读取n个字节但丢弃它们(或简单地跳过它们。这称为寻找。见下文了解如何)
- 开始阅读您感兴趣的数据。
现在,作为优化,
- 数据文件可能已经打开,比如你的程序启动时;当然可以部分缓存在内存中。
- 您可以专门指示框架转到文件中的特定位置,而不是读取和丢弃字节。大多数语言都有这个功能。所有操作系统都可以。这叫做寻求。你调用一个方法,比如
file.seek(1024)
. 要执行跳转,操作系统必须知道您要查找的数据位于磁盘中的哪个点。这涉及更多的查找、一些磁盘移动,但这一切都由操作系统完成。
- 您可以开始读取数据,但要知道何时停止,要么拥有固定宽度的记录,要么可以将记录长度放在记录的前 4 个字节中。这使得
headers
元数据会随着复杂性而增长。
有趣的是,与每个相关的指针都key
指向left
并且right
nodes
没有数据的位置。所以,在一个教科书的例子中
struct node {
int key; //this generally is the primary key of the table
node left;
node right;
long offsetOfDataInDataFile; // <----------- we need to add this line.
}
这种方式首先你node
在tree
. 然后你找到key
. 在那里你得到offset
了实际数据。您转到数据文件中的位置并读取内容。
如果您的表有多个索引,那么或表中的每个索引,都需要维护一个这样的树。那key
棵树的 将是被索引的列的内容。