我在一堂关于数据库的课上学习B+树,我想知道B+树相对于二进制搜索树有什么具体的优势?
对于大多数值得注意的操作,它们似乎都有O(logN)的平均复杂度,但是B+树也有一个额外的(可以忽略不计?)在每个子节点上的搜索时间,其中BST显然只需要O(1)时间来确定要前进到哪个子节点。
哪些实际优势使B+树在数据库中比BST更受欢迎?
发布于 2013-03-19 03:32:49
与二进制搜索树相比,B+树(以及一般的B树)的主要优点是它们可以很好地处理缓存。如果你有一个二进制搜索树,它的节点或多或少以随机的顺序存储在内存中,那么每次你跟随一个指针,机器将不得不在处理器缓存中引入一个新的内存块,这比访问缓存中已经存在的内存要慢得多。
B+树和B树的工作原理是让每个节点存储大量的键或值,并具有大量的子节点。它们通常被打包在一起,使得单个节点能够很好地装入缓存(或者,如果存储在磁盘上,则可以在一次读取操作中从磁盘中取出)。然后,您必须做更多的工作来查找节点中的键或确定接下来读取哪个子节点,但是因为在单个节点上完成的所有内存访问都可以在不返回到磁盘的情况下完成,所以访问时间非常短。这意味着即使在原则上BST在存储器访问次数方面可能更好,B+树和B树在这些存储器访问的运行时间方面也可以执行得更好。
B+树或B树的典型用例是在数据库中,那里有大量的信息,数据如此之多,以至于它们不能全部放入主内存中。因此,数据可以存储在硬盘上某处的B+树或B树中。这最大限度地减少了在查找过程中拉入数据所需的磁盘读取次数。出于同样的原因,一些文件系统(如ext4,我相信)也使用B-树-它们最小化了所需的磁盘查找次数,这才是真正的瓶颈。
希望这能有所帮助!
发布于 2017-03-20 04:12:44
现实生活中的数据存储(例如,在DB中)需要存储大量数据。由于数据检索是需要关注的基本操作,因此从磁盘读取数据比从RAM读取数据要耗费相当多的时间。
这就是问题所在。
与B+树相比,BST在节点中存储的数据较少。这导致了BST树比B+树的高度增加。因此,它们存储在磁盘上,而不是RAM上。
每次必须从树中检索数据时,必须将来自磁盘的数据加载到主存储器中(当然,这是一个耗时的过程),而在B+树的情况下,数据已经在随机存取存储器中,并且直接获取所需的节点,并且从可能包含许多子节点的节点中检索数据(但是在B+树的情况下,数据检索的总体时间较短,因为不需要将数据从磁盘加载到随机存取存储器)。
https://stackoverflow.com/questions/15485220
复制相似问题