HBase内部:如何在存储文件之间保留行键顺序?
在HBase中,如何在StoreFiles之间保留行键顺序?HBase内部:如何在存储文件之间保留行键顺序?,hbase,Hbase,在HBase中,如何在StoreFiles之间保留行键顺序? (在存储文件之间是否保留行-行-键顺序?) 这是我对内部工作的理解(可能有缺陷……): 当MemStore变得太大时,会刷新它并创建一个新的StoreFile。 MemStore中的信息是按rowkey(->)排序的,因此也是在StoreFile中排序的 e、 g.冲洗两次后,我们可以得到: 存储文件1: 键1… 键3… 键4… 存储文件2: 键2… 键5… 键6… 但我们真正想要快速检索(?)的是: 存储文件1: 键1… 键2… 键
(在存储文件之间是否保留行-行-键顺序?) 这是我对内部工作的理解(可能有缺陷……):
当MemStore变得太大时,会刷新它并创建一个新的StoreFile。
MemStore中的信息是按rowkey(->)排序的,因此也是在StoreFile中排序的 e、 g.冲洗两次后,我们可以得到: 存储文件1:
键1…
键3…
键4…
存储文件2:
键2…
键5…
键6…
但我们真正想要快速检索(?)的是: 存储文件1:
键1…
键2…
键3…
存储文件2:
键4…
键5…
键6…
如果存储文件之间未保留行键顺序,则可能出现性能问题(参见示例):
-要获取与rowkey关联的数据,我们必须对每个StoreFile进行(二进制?)搜索…
-此外,地区分裂还需要做更多的工作 (上下文:我试图优化并理解正在工作的测试HBase集群。)
提前感谢您的帮助 行键顺序仅保留在一个StoreFile中,而不是在StoreFile之间 获取时,不需要进行二进制搜索,因为: 1) HFiles具有类似于b树的索引 2) 从多个StoreFile读取时,将创建StoreFile读取器的堆(PriorityQueue)。堆中的StoreFile读取器将根据其当前键值进行比较。我们总是从当前键值顺序为“最小”的读卡器读取数据。(不过,像lazy seek这样的优化会使事情变得更加复杂。) 有关更多信息,请参阅org.apache.hadoop.hbase.regionserver.KeyValueHeap 至于区域分割,将使用“参考”旧区域的上/下半部分。之后,压缩将为新区域生成新的实际HFiles 有关更多信息,请参阅org.apache.hadoop.hbase.io.HalfStoreFileReader