1

我一直在尝试了解 Hbase 的工作原理。具体来说 - 如何将数据存储到磁盘。

我在网上阅读过文章,其中两篇对我有帮助——

http://th30z.blogspot.com/2011/02/hbase-io-hfile.html?spref=tw

http://www.slashdocs.com/iyxmiz/hfile-a-block-indexed-file-format-to-store-sorted-key-value-pairs.html

我还有一些疑问,可能是因为我对 HBase 不是很了解。这是我从所读内容中得到的信息 - 每个事务 - (Put/Get/Delete) 都在 memstore 中保存为 KeyValue,然后在刷新时写入 StoreFiles/Hfiles。存储在磁盘上的数据实际上就是这些 HFile。

现在,KeyValue 类的结构指定 - 需要存储的数据(如果有)、键和操作类型(Put/Get/Delete)。HFiles 中的数据块本身代表 KeyValues(“rowkey”是 Key 的一部分)。

正如我所看到的,当这些 KeyValues 被持久化时,它更像是保存事务而不是对现有数据进行更改。何时处理/合并此类事务以产生一行。我假设它可能是在压缩过程中,但是我不知道如何处理对写入 HFile 但未压缩的数据的请求。

当文章说“在将KeyValue对写入块之前,键的顺序必须大于前一个”时,我也没有理解。

我想我在理解 HBase 的过程中做了一些错误的假设。

有人可以帮我理解这一点。

4

1 回答 1

1

“在将 KeyValue 对写入块之前,顺序...”

是的,新数据可以被视为事务,但它们与压缩后的数据格式/结构相同。这意味着,这些“事务”与旧数据共存,除了时间戳之外,与旧数据没有区别。

当请求到来时,hbase 将同时查看以前的数据和新数据(您提到的“事务”),但将返回时间戳较新的新数据。

“在将 KeyValue 对写入块之前,键的顺序必须大于前一个”

我想这里的重点是,在将块写入磁盘之前,密钥在 memstore(内存缓存)中进行排序,以确保“密钥的顺序必须大于前一个”。

于 2013-08-11T04:34:38.950 回答