我读了B树,了解他们的输入,删除方法。我读了这样的介绍:
当我们在磁盘上构建结构时,我们必须处理某些现实 访问和转移时间:
- 随机访问磁盘通常需要大约10-20毫秒 访问时间来定位头部并等待数据出现 它。
- 一旦头位置正确,数据就可以按照的速率传输 超过100万字节/秒。
- 然后观察总传输时间对不同大小的影响 块(假设访问时间相当快10毫秒,1兆字节/秒 转移率)
醇>
因此,B树数据结构是为了从磁盘提供服务(这使它们非常适合数据库)。但是当我试图实现它时,我遇到了这个问题。
普通B树图显示指向子节点的指针,然后下降到叶子。
但如何在磁盘上制作指针?它是文件名吗?
答案 0 :(得分:4)
B树中的“指针”只是您可以寻找的文件中的偏移量。或者,如果你将要有固定的块大小,它可能是一个块数字,你在搜索之前乘以块大小。
答案 1 :(得分:4)
磁盘指针从文件开头是offsets
。
如果您的key
指向 n ,则表示
现在,作为优化,
file.seek(1024)
这样的方法。要执行跳转,操作系统必须知道您要查找的数据位于磁盘中的哪个位置。这涉及一些更多的查找,一些磁盘移动,但这一切都是由操作系统完成的。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
将是索引列的内容。