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

C# 使用b树索引器进行磁盘访问,c#,algorithm,csv,indexing,b-tree,C#,Algorithm,Csv,Indexing,B Tree,iv'e实现了一个B+树,我的叶节点指向行记录的起始位置 在CSV文件中 我的问题是: 我的树被设计成一个树顺序值,即每个树节点中指针的数量 据我所知,订单价值是通过在一次磁盘访问操作中将整个磁盘块读入内存来优化磁盘访问 我不明白的是这是如何起作用的,假设我知道磁盘的块大小 我根据一些计算给订单一个合适的值 例如: 订单*记录大小

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

我的问题是:

我的树被设计成一个树顺序值,即每个树节点中指针的数量

据我所知,订单价值是通过在一次磁盘访问操作中将整个磁盘块读入内存来优化磁盘访问

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

例如: 订单*记录大小<块大小

访问数据:

正如我所说的指针包含一个文件路径和到行记录开头的偏移量

  StreamReader reader ;
  reader.BaseStream.Position = leaf.Pointers[i].offset ; // leaf is a leaf node in the      tree 
  string record = reader.ReadLine();  
1读线操作是否相当于一次磁盘访问? 如果是这样的话,我访问数据的方式将是相同的磁盘访问方式而不是搜索方式,不会受到树节点顺序大小的影响

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

1读线操作是否相当于一次磁盘访问?如果是这样的话,我访问数据的方式将是相同的磁盘访问方式而不是搜索方式,不会受到树节点顺序大小的影响

是的,您的读线是一个磁盘访问;然而,这并不适用于你。实际上,您是在“行外”存储所有数据。典型的BTree或B+树将数据直接存储在树结构中,而不是存储在相关文件中。您对BTree机制本身的细节有点了解,因此我无法告诉您订单/大小会产生什么影响。您是在存储BTree结构还是在构建内存索引?如果已存储,则如何在图形中保存/加载节点

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

这一回应的第一部分可能会对此有所启发。基本上,您需要远离使用相关的CSV文件,将数据存储在树本身中

1读线操作是否相当于一次磁盘访问?如果是这样的话,我访问数据的方式将是相同的磁盘访问方式而不是搜索方式,不会受到树节点顺序大小的影响

是的,您的读线是一个磁盘访问;然而,这并不适用于你。实际上,您是在“行外”存储所有数据。典型的BTree或B+树将数据直接存储在树结构中,而不是存储在相关文件中。您对BTree机制本身的细节有点了解,因此我无法告诉您订单/大小会产生什么影响。您是在存储BTree结构还是在构建内存索引?如果已存储,则如何在图形中保存/加载节点

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


这一回应的第一部分可能会对此有所启发。基本上,您需要放弃使用相关的CSV文件,将数据存储在树本身。

您编写的内容似乎与B-树的设计目的相矛盾:与自平衡二进制搜索树不同,B-树针对读写大块数据的系统进行了优化。它通常用于数据库和文件系统。您编写的内容似乎与B-树的设计目的相矛盾:与自平衡二进制搜索树不同,B-树针对读写大数据块的系统进行了优化。它通常用于数据库和文件系统。