为什么VoltDB选择Red-Black Tree作为索引结构?

时间:2018-08-22 08:06:10

标签: indexing voltdb

source code中可以看到:

enum TableIndexType {
    BALANCED_TREE_INDEX     = 1,
    HASH_TABLE_INDEX        = 2,
    BTREE_INDEX             = 3, // unused
    COVERING_CELL_INDEX     = 4
};

VoltDB主要使用BALANCED_TREE_INDEX作为索引结构,其内部使用CompactingMap(红黑树实现)。

与b + tree相比,当使用索引进行范围查询时,使用Red-Black Tree将失去空间局部性。

1 个答案:

答案 0 :(得分:1)

VoltDB选择Red-Black Tree实现的主要原因是为了避免内存碎片并保持平衡。性能需要在数据的生命周期内保持一致,而不是使用灵活性较低的结构,这种结构在某些情况下会更快,但随着时间的流逝会降低性能或变得不太理想。

存储在VoltDB表中的记录可能包含各种数据类型和列数,并且它们可能在内存中保留各种时间。索引通常包含多个列。对于VARCHAR列,小于64个字节的值存储在索引中,但是对于较大的值,索引使用指向池内存中值的一个副本的指针。

您可以在这里阅读更多的推理内容:

披露:我在VoltDB工作。