Cassandra(Hbase)的内存表(memstore)中的数据排序
Sorting data in memtable (memstore) of Cassandra (Hbase)
我知道传入系统的数据首先放在内存中(memtable 或 memstore)。在缓冲区中,数据根据行键和列名排序。当缓冲区大小达到一定限制时,数据将刷新到磁盘。如果缓冲区大小限制配置为较大的值(~256 MB),则数据点的数量必须非常大(~数千万)。用于此目的的数据结构和排序算法是什么?
HBase中存储数据的元素是KeyValue. It consists of pointer to bytes array there actual values are stored, add contains the length and offset. So KeyValues are tightly packed into some bytes arrays. To index them KeyValueSkipListSet (old version) or CellSkipListSet (new version) are used. Both class are build on top of ConcurrentSkipListMap java implementation of Skip list。
HBase Store 的内部存储数据结构files/HFiles 是LSM(Log-Structured Merge)树。 LSM 树类似于 B+ 树,但它允许更好的可扩展性和分布式使用,因为它有一个磁盘日志文件和内存存储。因此,一旦 memstore 达到其限制,它就会像 B+ 树数据结构一样刷新到磁盘。稍后,它与其他商店文件合并形成一个大商店文件。
这种数据结构相对于 B+ 树的好处是每个 update/delete 都不需要磁盘 io,这会带来显着的改进。
我知道传入系统的数据首先放在内存中(memtable 或 memstore)。在缓冲区中,数据根据行键和列名排序。当缓冲区大小达到一定限制时,数据将刷新到磁盘。如果缓冲区大小限制配置为较大的值(~256 MB),则数据点的数量必须非常大(~数千万)。用于此目的的数据结构和排序算法是什么?
HBase中存储数据的元素是KeyValue. It consists of pointer to bytes array there actual values are stored, add contains the length and offset. So KeyValues are tightly packed into some bytes arrays. To index them KeyValueSkipListSet (old version) or CellSkipListSet (new version) are used. Both class are build on top of ConcurrentSkipListMap java implementation of Skip list。
HBase Store 的内部存储数据结构files/HFiles 是LSM(Log-Structured Merge)树。 LSM 树类似于 B+ 树,但它允许更好的可扩展性和分布式使用,因为它有一个磁盘日志文件和内存存储。因此,一旦 memstore 达到其限制,它就会像 B+ 树数据结构一样刷新到磁盘。稍后,它与其他商店文件合并形成一个大商店文件。
这种数据结构相对于 B+ 树的好处是每个 update/delete 都不需要磁盘 io,这会带来显着的改进。