我一直试图了解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的过程中做了一些错误的假设。
有人可以帮助我理解这一点。
答案 0 :(得分:1)
“在将KeyValue对写入块之前,订单......”
是的,新数据可以视为事务,但它们与压缩后的数据格式/结构相同。这意味着,这些“交易”与旧数据共存,除了时间戳之外与旧数据没有区别。
当请求到来时,hbase将查看以前的数据和新数据(您提到的“事务”),但将返回时间戳较新的新数据。
“在将KeyValue对写入块之前,键的顺序必须大于前一个键”
我想这里的重点是,在将块写入磁盘之前,密钥在memstore(内存缓存)中排序,以确保“密钥的顺序必须大于前一个”。