【问题标题】:B+ Tree structure implementation using SQL使用 SQL 实现 B+ 树结构
【发布时间】:2012-12-13 10:57:26
【问题描述】:

我非常了解纯 sql 中现有的二叉搜索树实现,但我无法真正想象如何构建实现 B+ 树数据结构的数据库模型。有可能吗?

任何见解将不胜感激。

【问题讨论】:

  • 您能更具体地了解您想了解的内容吗?
  • B-Trees 用于实现索引,从而提高关系数据库的性能。所以你看,理论上你可以在没有任何 B 树的情况下实现一个关系数据库,但性能会很糟糕。顺便说一句,B-Tree 中的“B”不代表“二进制”。拥有数百个键宽的 B-Tree 节点确实并不罕见。

标签: sql database-design tree relational-database


【解决方案1】:
  1. B+Tree 和二分查找不一样。
  2. 可以在表格中使用 B+Tree 结构(假设您知道它是什么)。

是否推荐2是值得研究的,但我们公司做了很多。

在表格上使用 B+Tree 的示例如下:

ColId       SomeData        ParentId
------------------------------------
  1           Data 1          null
  2           Data 2          null
  3           Data 3            1
  4           Data 4            1
  5           Data 5            3

等等。这个想法是您可以通过查看父 id 找到项目 5 的父项​​。您可以制作/重用各种方便的算法来查找物品及其位置。使用具有较大增量的 ColId,例如 10 或 100 的增量,可以让您留出空间来将项目插入树中。

例如...第 5 项的父项是第 3 项。祖父项是第 1 项。带有 null 的任何内容都是根(起始)项...它们没有父项。

正如您想象的那样,搜索速度非常快,但更新或添加速度却很慢(如果您没有按照上面的建议留出空间)。如果您确实留下了空间,那么当您用完空间并且必须重写项目时,添加速度会很慢。假设您将数据传授得很好,这种情况不应该经常发生。如果是这样,那么 B+Tree 可能并不是该特定格式的理想选择。一般来说,如果对数据的大部分操作是读取/搜索/过滤等,B+Tree 结构会很棒。但是如果有很多更新和添加,可能就不那么好了。

由于您的问题似乎是关于如何在 sql server 表中使用 B+Tree 格式,我将让您看看这与二进制搜索之间的区别。二分搜索是一种用于搜索某物的算法,首先对集合进行排序,然后每次除以一半,直到找到所需的内容。 B+Tree 也可用于搜索,但不同之处在于它在层次结构上运行(因此得名 Tree)。

【讨论】:

  • 我想通了。我希望我可以学习如何构建查询以查找树。
猜你喜欢
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 2012-04-30
相关资源
最近更新 更多