我知道如何在内存中实现 btree,但不清楚如何将 btree 存储在磁盘中。我认为有两个主要区别:
- 内存指针和磁盘地址之间的转换,见这篇文章。
- 插入新的 k/v 项目时如何拆分页面?在内存中实现非常容易。
谢谢
这完全取决于您使用的 DBMS。如果你想知道它是如何在 MS SQL Server 中实现的,可以阅读以下内容:
使用 IAM 和 GAM(或 SGAM),您可以拆分页面 - 只需将页面的一部分(应该溢出)移动到文件中的另一个页面。
IAM 和 GAM 也是您第一个问题的答案。
这些名称中的大多数取自 MS SQL Server,但我很确定,在其他 DBMS 中,它的解决方法非常相似。
希望能帮助到你。
我的建议是看一下《数据库系统实现》这本书
第 2 章“数据存储”和第 3 章“表示数据元素”将为您提供有关此问题的一些提示。
第 4 章索引结构有一节介绍 Btrees
这是迄今为止我找到的关于该主题的最佳信息来源。