btree如何存储在光盘上?

时间:2011-01-14 07:19:37

标签: database algorithm b-tree

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

  1. 内存指针和光盘地址之间的转换,请参阅此post
  2. 插入新的k / v项目时如何拆分页面?它很容易在内存中实现。
  3. 由于

2 个答案:

答案 0 :(得分:4)

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

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

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

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

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

希望它有所帮助。

答案 1 :(得分:1)

我的建议是查看书籍Database System Implementation"

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

第4章索引结构有关于Btree的部分

这是迄今为止我就此主题找到的最佳信息来源。