我对HFiles有一个相当基本的疑问.
当启动put/insert请求时,该值首先写入WAL,然后写入memstore.memstore中的值以与HFile中相同的排序方式存储.一旦memstore满了,它就会被刷新到一个新的HFile中.
现在,我已经读过HFile以排序顺序存储数据,即顺序rowkeys将彼此相邻.
这100%是真的吗?
例如:我首先使用rowkeys 1到1000写行,但rowkey 500除外.假设memstore现已满,因此它将创建一个新的HFile,称之为HFile1.现在,这个文件是不可变的.
现在,我将写行1001到2000,然后我写rowkey 500.假设memstore已满并写入HFile,称之为HFile2.
那么,这是怎么回事?
如果是,则rowkey 500不在HFile1中,因此HFiles中的rowkeys不按排序顺序排列.那么,粗体的原始陈述是否正确?
因此,当读取发生时,读取是如何发生的?
HFile按排序顺序存储数据,即顺序rowkeys将彼此相邻.
这100%是真的吗?
是的,这是100%准确的.在单个HFile中的RowKeys总是排序.
我将写行1001到2000,然后我写rowkey 500.假设memstore已满并写入HFile,称之为HFile2.
那么,这是怎么回事?
是的,现在500到达第二个HFile的顶部.
如果是,则rowkey 500不在HFile1中,因此HFiles中的rowkeys不按排序顺序排列.那么,粗体的原始陈述是否正确?
是的,总是对单个HFile中的行键进行排序.HBase会定期执行压缩操作,这些压缩将合并多个HFile并将它们重写为单个HFile,这个压缩的新HFile也会被排序.
因此,当读取发生时,读取是如何发生的?
在读取时,如果存储有多个HFile,HBase将从所有HFile读取该行(检查该行是否存在,如果是这样读取),还从memstore读取.所以它可以获得最新的数据.
HBase权威指南对HBase读取路径的工作方式有很好的解释.
归档时间: |
|
查看次数: |
1110 次 |
最近记录: |