B树中的指针

时间:2013-10-02 08:09:56

标签: c++ database algorithm data-structures

我读了B树,了解他们的输入,删除方法。我读了这样的介绍:

  

当我们在磁盘上构建结构时,我们必须处理某些现实       访问和转移时间:

     
      
  1. 随机访问磁盘通常需要大约10-20毫秒   访问时间来定位头部并等待数据出现   它。
  2.   
  3. 一旦头位置正确,数据就可以按照的速率传输   超过100万字节/秒。
  4.   
  5. 然后观察总传输时间对不同大小的影响   块(假设访问时间相当快10毫秒,1兆字节/秒   转移率)
  6.   

因此,B树数据结构是为了从磁盘提供服务(这使它们非常适合数据库)。但是当我试图实现它时,我遇到了这个问题。

普通B树图显示指向子节点的指针,然后下降到叶子。

如何在磁盘上制作指针?它是文件名吗?

2 个答案:

答案 0 :(得分:4)

B树中的“指针”只是您可以寻找的文件中的偏移量。或者,如果你将要有固定的块大小,它可能是一个块数字,你在搜索之前乘以块大小。

答案 1 :(得分:4)

磁盘指针从文件开头是offsets

如果您的key指向 n ,则表示

  1. 打开数据文件
  2. 读取 n 字节,但丢弃它们(或简单地跳过它们。这称为搜索。请参阅下文,了解具体方法)
  3. 开始阅读您感兴趣的数据。
  4. 现在,作为优化,

    1. 数据文件可能已经打开,比如程序启动时;当然可以部分缓存在记忆中。
    2. 而不是读取和丢弃字节,您可以专门指示框架转到文件中的特定位置。大多数语言都有这个功能。所有OS都做。这叫做寻求。你调用像file.seek(1024)这样的方法。要执行跳转,操作系统必须知道您要查找的数据位于磁盘中的哪个位置。这涉及一些更多的查找,一些磁盘移动,但这一切都是由操作系统完成的。
    3. 您可以开始读取数据,但要知道何时停止,要么具有固定宽度的记录,要么可以将记录长度放在记录的前4个字节中。这使得headers和元数据会随着复杂性而增长。
    4. 有趣的是,与每个key关联的指针指向leftright 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将是索引列的内容。