在Cassandra(Hbase)的memtable(memstore)中对数据进行排序

时间:2015-11-09 09:09:06

标签: cassandra hbase

我知道系统的传入数据首先放入内存(memtable或memstore)。在缓冲区中,数据根据行键和列名进行排序。当缓冲区大小达到某个限制时,数据将刷新到磁盘。如果缓冲区大小限制配置为较大的值(~256 MB),则数据点的数量必须非常大(〜数千万)。什么是用于此目的的数据结构和排序算法?

2 个答案:

答案 0 :(得分:0)

在HBase中存储数据的元素是KeyValue。它由指向字节数组的指针组成,存储实际值,add包含长度和偏移量。所以KeyValues被紧密地压缩到一些字节数组中。为了索引它们,使用KeyValueSkipListSet(旧版本)或CellSkipListSet(新版本)。这两个类都构建在ConcurrentSkipListMapSkip list java实现之上。

答案 1 :(得分:0)

HBase Store文件/ HFile的内部存储数据结构是LSM(Log-Structured Merge)树。 LSM树类似于B +树,但它允许更好的可伸缩性和分布式使用,因为它具有磁盘上的日志文件和内存存储。因此,一旦memstore达到其限制,它就会被刷新到类似于B +树数据结构的磁盘。稍后,它会与其他Store文件合并,形成一个大的Store文件。

此数据结构优于B +树的好处是每次更新/删除都不需要disk io,这会带来显着的改进。