从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将失去空间局部性。
答案 0 :(得分:1)
VoltDB选择Red-Black Tree实现的主要原因是为了避免内存碎片并保持平衡。性能需要在数据的生命周期内保持一致,而不是使用灵活性较低的结构,这种结构在某些情况下会更快,但随着时间的流逝会降低性能或变得不太理想。
存储在VoltDB表中的记录可能包含各种数据类型和列数,并且它们可能在内存中保留各种时间。索引通常包含多个列。对于VARCHAR列,小于64个字节的值存储在索引中,但是对于较大的值,索引使用指向池内存中值的一个副本的指针。
您可以在这里阅读更多的推理内容:
披露:我在VoltDB工作。