HBase:如何将数据以排序的方式写入HFile



我对HFiles有一个相当基本的怀疑。

当启动放入/插入请求时,该值首先写入WAL,然后写入memstore。memstore中的值以与HFile中相同的排序方式存储。一旦内存存储区已满,它就会被刷新到一个新的HFile中。

现在,我已经读到HFile按排序顺序存储数据,即顺序的行键将相邻

这是100%真的吗?

例如:我首先写的行的行键为1到1000,除了行键500。假设memstore现在已满,因此它将创建一个新的HFile,称之为HFile1。现在,这个文件是不可变的。

现在,我将写1001到2000行,然后写rowkey 500。假设memstore已满,并且它写入一个HFile,称之为HFile2。

那么,事情就是这样发生的吗?

如果是,则行键500不在HFile1中,因此HFiles中的行键不按排序顺序排列。那么,原来粗体字的说法正确吗?

那么,当阅读发生时,阅读是如何发生的呢?

HFile按排序顺序存储数据,即顺序的行键将相邻。

这是100%真的吗?

是的,这是100%准确的。单个HFile中的RowKeys总是排序的。

我将写入行1001到2000,然后写入行键500。假设memstore已满,并且它写入一个HFile,称之为HFile2。

那么,事情就是这样发生的吗?

是的,现在500达到了第二个HFile的顶部。

如果是,则行键500不在HFile1中,因此HFiles中的行键不按排序顺序排列。那么,原来粗体字的说法正确吗?

是的,在一个HFile中具有的行关键字总是排序的。HBase定期执行压缩,将合并多个HFile并将其重写为单个HFile,压缩后的新HFile也会被排序。

那么,当阅读发生时,阅读是如何发生的呢?

在读取时,如果一个存储有多个HFile,HBase将从所有HFile中读取该行(检查该行是否存在,如果已读取),也从memstore中读取。所以它可以得到最新的数据。

HBase最终指南对HBase读取路径的工作原理有很好的解释。

相关内容

  • 没有找到相关文章

最新更新