iv'e实现了一个B +树,我的叶子节点指向行(记录)位置的开始 在CSV文件中,
我的问题是:
我的树被设计为除了树 - ORDER值,即(每个树节点中的指针数)
据我了解,订单值是通过在一次磁盘访问操作中将整个磁盘块读入内存来优化磁盘访问。
我不明白这是如何发挥作用的,让我说我知道磁盘的块大小 我根据一些计算给订单一个适当的值
例如: (订单* sizeof(记录))< block_size
访问数据:
我所说的指针包含文件路径和行首(记录)
的偏移量 StreamReader reader ;
reader.BaseStream.Position = leaf.Pointers[i].offset ; // leaf is a leaf node in the tree
string record = reader.ReadLine();
1)ReadLine()操作相当于一个磁盘Access吗? 如果是这样,我访问我的数据的方式将是相同的(磁盘访问明智而不是搜索),不会受到我的树节点的ORDER(大小)的影响。
2)如何根据磁盘块大小更改磁盘访问方法?
答案 0 :(得分:0)
1)ReadLine()操作相当于一个磁盘Access吗?如果是这样,我访问我的数据的方式将是相同的(磁盘访问明智而不是搜索),不会受到我的树节点的ORDER(大小)的影响。
是的,您的ReadLine()是磁盘访问;但是,这并不适用于您。实际上,您存储的所有数据都是“行外”。典型的BTree或B + Tree将数据直接存储在树结构内而不是相关文件中。你对BTree机制本身的细节有点了解,所以我不能告诉你订单/尺寸会产生什么影响。您是在存储BTree结构还是只是构建内存索引?如果存储了,那么如何在图表中保存/加载节点?
2)如何根据磁盘块大小更改磁盘访问方法?
这一回应的第一部分可能会对此有所启发。基本上,您需要放弃使用相关的CSV文件并将数据存储在树本身中。