我一直在尝试了解 Hbase 的工作原理。具体来说 - 如何将数据存储到磁盘。
我在网上阅读过文章,其中两篇对我有帮助——
http://th30z.blogspot.com/2011/02/hbase-io-hfile.html?spref=tw
和
我还有一些疑问,可能是因为我对 HBase 不是很了解。这是我从所读内容中得到的信息 - 每个事务 - (Put/Get/Delete) 都在 memstore 中保存为 KeyValue,然后在刷新时写入 StoreFiles/Hfiles。存储在磁盘上的数据实际上就是这些 HFile。
现在,KeyValue 类的结构指定 - 需要存储的数据(如果有)、键和操作类型(Put/Get/Delete)。HFiles 中的数据块本身代表 KeyValues(“rowkey”是 Key 的一部分)。
正如我所看到的,当这些 KeyValues 被持久化时,它更像是保存事务而不是对现有数据进行更改。何时处理/合并此类事务以产生一行。我假设它可能是在压缩过程中,但是我不知道如何处理对写入 HFile 但未压缩的数据的请求。
当文章说“在将KeyValue对写入块之前,键的顺序必须大于前一个”时,我也没有理解。
我想我在理解 HBase 的过程中做了一些错误的假设。
有人可以帮我理解这一点。