使用b树索引器进行磁盘访问

本文关键字:磁盘 访问 索引 使用 | 更新日期: 2023-09-27 18:01:29

我实现了一个B+树,我的叶节点指向行(记录)的起始位置在CSV文件中

我的问题是:

我的树被设计为除了一个树- ORDER值即(每个树节点中的指针数量)

在我的理解中,order值应该是通过能够在一次磁盘访问操作中将整个磁盘块读入内存来优化磁盘访问。

我不明白的是这是如何发挥作用的,假设我知道磁盘的块大小我根据一些计算给Order一个合适的值

的例子:(order * sizeof(Record))

访问数据:

指针保存了一个文件路径和到行(Record)开头的偏移量

  StreamReader reader ;
  reader.BaseStream.Position = leaf.Pointers[i].offset ; // leaf is a leaf node in the      tree 
  string record = reader.ReadLine();  

1) ReadLine()操作是否等同于一次磁盘访问?如果是这样,我访问数据的方式将是相同的(磁盘访问方式而不是搜索方式),不会受到我的树节点的ORDER(大小)的影响。

2)如何根据磁盘块大小改变磁盘访问方法进行优化?

使用b树索引器进行磁盘访问

1) ReadLine()操作是否等同于一次磁盘访问?如果是这样,我访问数据的方式将是相同的(磁盘访问方式而不是搜索方式),不会受到我的树节点的ORDER(大小)的影响。

是的,你的ReadLine()是一个磁盘访问;然而,这并不真正适用于你。你实际上是在"逐行"存储所有数据。典型的B树或B+树将数据直接存储在树结构中,而不是在相关文件中。你对b树机制本身的细节知之甚少,所以我不能告诉你顺序/大小会产生什么影响。您是在存储b树结构还是只是在内存中构建索引?如果它是存储的,那么你如何在图中保存/加载节点?

2)如何根据磁盘块大小更改磁盘访问方法以进行优化?

这个回应的第一部分可能会让我们对它有所了解。基本上,您需要不再使用相关的CSV文件,而是将数据存储在树本身中。