我知道b+tree中有批量加载。我只想知道在B-Tree中有没有批量加载的算法。例如,给定一个数据数组,创建B-Tree的最佳方法是什么?
发布于 2013-04-14 15:04:37
实际上答案是肯定的。
B+树和普通B树之间的主要区别是,前者的值实际上存储在叶子中,而在后者中,您将在每个节点中找到值。因此,B+树允许您以几乎连续的方式存储数据,每个叶包含整个排序数据的一个连续切片。对于B树则不是这样:内部节点将包含多个元素,但它们不是连续的wrt。整个排序后的数据集。
此属性对于批量加载是必不可少的:该过程通过将已排序的数据集切割成将形成B+树的叶子的数组来对其进行操作。因此,对于B-树来说,它看起来不能工作。
如果我们能以将内部节点元素组合在一起的方式对数据进行排序,那么问题就解决了。为了做到这一点,必须事先知道元素将如何分组。事实证明,这是可能的。
让我们调用o (order)节点中的子节点的最小数量(这与B树顺序的原始定义一致)。我们认为根节点位于树的最高阶段,而叶子位于最低阶段(阶段0)。对于一棵平衡良好的树,所有的叶子确实会处于同一阶段。
树的级k对由级k-1中的至少o个元素隔开的元素进行分组。在初始排序之后,我们必须从已排序的数组(构成阶段0 )中提取元素,并将它们分组到不同的数组中以构建阶段1,然后对该数组再次执行此操作,以用于阶段2的新数组,并重复此过程,直到最新的数组中的元素少于o个,该数组将成为根阶段。从那时起,可以直接从stage集构建树:
o元素数组,生成的树不一定是平衡的。这取决于数据集中的条目数和o。不过,应该可以调整构建阶段时使用的间隔,以获得更好的分布式树。
总而言之,批量加载B-tree所需的工作比B+-tree更繁琐,但这是可能的。
https://stackoverflow.com/questions/15996319
复制相似问题