c# - 使用 b-tree 索引器访问磁盘

标签 c# algorithm csv indexing b-tree

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

我的问题是:

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

据我了解,顺序值是假设通过能够在一次磁盘访问操作中将整个磁盘 block 读入内存来优化磁盘访问。

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

例如: (order * sizeof( Record ) ) < 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() 操作是否相当于一次磁盘访问? 如果是这样的话,我访问我的数据的方式将是相同的(磁盘访问明智而不是搜索明智),不会受到我的树节点的 ORDER(大小)的影响。

2) 如何根据磁盘 block 大小更改要优化的磁盘访问方法?

最佳答案

1) is the ReadLine() operation equivalent to one disk Access ? if so the way in witch i access my data would be the same (Disk Access wise not search wise ) ,would not be affected by the ORDER (size) of my tree nodes .

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

2) how would one change the disk access method to be optimized according to disk block size ?

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

关于c# - 使用 b-tree 索引器访问磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6625552/

相关文章:

c# - LINQ:无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问来声明

c# - 在 NSOutlineView 中显示某些项目的上下文菜单

C# 等待任务组,但返回对象

java - 在 csv 文件中写入日期,部分输出为 ######

java - java中csv的字段值中包含逗号(分隔符为逗号)

php - fputcsv 和整数类型转换为字符串

c# - 为 wpf 应用程序设置图标 (VS 08)

python - 从列表创建一个完整的二叉搜索树

java - 使用动态编程查找添加到特定数字的列表的所有集合

algorithm - 构造后缀树线性的最坏情况时间复杂度如何?