很多人对b+tree数据结构的创建过程不是很清楚,接下来我们先通过一个简单的实例来了解一下。
将1,3,4,6,7,10,12,14,15插入以下每个节点下子节点最多为3个的B+tree中:是如何进行的呢?
首先,系统会创建一个空间大小限定的节点(注意系统分配的节点大小都是均匀相等的),并插入1效果如下:
插入3,由于3大于1,因此3被放置在1的右侧,此时该节点的空间正好可以放下两个数据,如下:
插入4,由于4最大,按道理应该存放在3的右侧,但是由于3个数据占用空间超过一个节点的空间,因此,将该根节点分裂出左右两个子节点,并且将中间值3向上提取到父节点,如下:
插入6,由于6最大,按道理应该存放在4的右侧,但是由于3个数据占用空间超过一个节点的空间,因此,将该节点分裂出左右两个子节点,并且将中间值4向上提取到父节点,如下:
插入7,由于7最大,按道理应该存放在6的右侧,但是由于3个数据占用空间超过一个节点的空间,因此,将该节点分裂出左右两个子节点,并且将中间值6向上提取到父节点如下:
插入10,由于10最大,按道理应该存放在7的右侧,但是由于3个数据占用空间超过一个节点的空间,因此,将该节点分裂出左右两个子节点,并且将中间值6向上提取到父节点如下:
插入12,(同上)如下:
插入14,(同上)如下:
插入15,一个节点最多有3个子节点,那么此时15的插入会导致最底层分裂,提取14作为父节点,由于中间层最右侧的节点中已经有10和12两个数据,此时14的插入又会导致分裂,提取12向上作为父节点,而最顶层一个节点有4和7,那么13的插入又会导致中间值7被提取作为父节点,如下:
如上,便是简单的b+tree数据结构的创建流程模型,了解了这些,后面我们就可以更好的分析b+tree索引了。
网友评论