【问题标题】:How btree is stored on disc?btree如何存储在磁盘上?
【发布时间】:2011-06-08 23:54:22
【问题描述】:

我知道如何在内存中实现 btree,但不清楚如何将 btree 存储在磁盘中。我认为有两个主要区别:

  1. 内存指针和磁盘地址之间的转换,见post
  2. 插入新的 k/v 项目时如何拆分页面?在内存中很容易实现。

谢谢

【问题讨论】:

标签: database algorithm b-tree


【解决方案1】:

我的建议是看书Database System Implementation"

第 2 章“数据存储”和第 3 章“表示数据元素”将为您提供有关此问题的一些提示。

第 4 章索引结构有一个关于 Btrees 的部分

这是迄今为止我找到的关于该主题的最佳信息来源。

【讨论】:

  • 关于这个主题的书籍很多,例如,*数据库系统概念*(codex.cs.yale.edu/avi/db-book) 第 11 章。但是它们都没有谈到现实实现。
【解决方案2】:

这完全取决于您使用的 DBMS。如果您想知道它是如何在 MS SQL Server 中实现的,请阅读以下内容:

  • 页面(我猜它们几乎存在于所有现代 DBMS 中)——在 SQL Server 中它们是 8Kb。数据库文件由页面组成。
  • 范围 - 8 个连续页面的逻辑组
  • (S)GAM - (共享)全球分配图。包含有关空闲和占用范围信息的位图。这是数据库文件的第一页之一。
  • IAM - 索引分配图。您可以找出哪些索引/堆存储在哪些范围中。有了这些信息,您就可以在存储索引/堆的文件中找到位置。

使用 IAM 和 GAM(或 SGAM),您可以拆分页面 - 只需将页面的一部分(应该溢出)移动到文件中的另一个页面。

IAM 和 GAM 也是您第一个问题的答案。

这些名称大部分取自 MS SQL Server,但我很确定,在其他 DBMS 中它的解决方法非常相似。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2012-05-13
    • 2016-12-04
    • 2011-01-13
    • 2014-07-12
    • 2016-08-20
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    相关资源
    最近更新 更多