B树数据存储结构介绍

HDF文件格式采取了B树对数据进行存储,下面的文章主要来源于网络。

对于一维升序或降序数据序列(假设其个数为N)来说,可以采用两分检索的方法来迅速地找到需要插入或删除元素的位置。但是当采用顺序存储的方式时,为插入一个元素,需要将其以下的数据均进行后移;为删除一个元素,需要将以下的数据进行前移。为避免大量的数据移动,提高插入和删除的工作效率,研究者提出了多种解决方法,B树就是其中较好的一种方案。

B树是由一系列节点(SQL Server数据库采结构进行数据存储)所构成,它的每一个节点均由2m个数据域和2m+1个指针域所构成,每个节点的数据从左向右成升序排列。一般情况下,B树的每个节点中的数据域不一定存放满数据,但基本上每个节点存放的数据数大于用B树m个。如下图所示:

《B树数据存储结构介绍》  

   《B树数据存储结构介绍》

B树中父节点与子节点中的数据之间具有如下关系:父节点中每一数据域中存放的数据,均大于该数据域左侧指针指向的子节点中的所有数据,也小于该数据域右侧指针指向子节点中的所有数据。以图2-2所示的B树来看,节点A中的数据0.25,其左侧的指针指向节点B,B中的数据均小于0.25,其右侧的指针指向C,C中的数据也均大于0.25。

为建立一棵B树,需要将一个一个的数据插入其中。

当需要在上面所示的B树中插入一个数据,例如是0.65,首先需要查询其应插入的位置。首先将根节点的数据与带插入数据向比较,其结果发现应插入在0.40与0.72之间。而后,根据这两个数据之间的指针所值的位置,查到所指向的子节点D。比较之后确认应插入在数据0.60之后,当检查0.60右侧的指针后发现该指针为空,由此确认应插入在节点D中数据0.60之右侧,恰巧在这个位置是空的,因此插入数据0.65后即完成了所需的插入工作。这是存在的另一种可能性,是在0.60右侧有另外的数据,但节点D中还有空间允许填入新的数据,这是需要将0.60后面的数据进行右移,空出位置来插入0.65这一数据。

当查询到插入位置,却发现该节点已填满数据时,我们需要进行节点的分割。仍以上述B树为例,设需要插入的数据是0.10。采用相同的方法,确认需要插入的位置在节点B的数据0.12的左侧,但由于节点B已填入了四个数据,必须建立新的节点存放数据。为此,我们将原节点中存放的数 据和待插入的数据一起,找寻其中间数据,根据中间数据将这2m+1个数据分为两部分:小于中间数据的m个数据存入新的节点B1,大于中间数据的m个数据存 入节点B2中,将中间数据存入节点B的父节点A中,同时对中间数据两侧的指针加以处理,使其指向节点B1和B2。当出现父节点同样数据存满的情况时,采用类似的方法将父节点进行相应的分割。 

    原文作者:B树
    原文地址: https://blog.csdn.net/cicispace/article/details/1441572
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞