Hbase学习之一

Hbase 数据存储:
Hbase 数据文件都存在于hadoop上,hbase 依赖于hadoop中的hdfs系统,同时也是利用mapreduce
进行计算处理的。
作为bigtable的山寨版,都是基于b+树进行水平拆库,这样的数据库有Yahoo!PNUTS、SQL Azure、tabao oceanbase;
说到水平拆库还有另外一种方法就是hash或者取模,通过hash将数据分别放到节点上,这样的数据库有Amazon Dynamo、S3、SimpleDB。通过hash相对简单,但是也有其弊端,比如一旦添加机器,就得增加hash时的节点,数据调整动作大。还有就是难以支持事务,因为很多情况下都要进行跨行跨表的修改,就得锁定几个节点,这样效率是很低的。hash带来的还有一个弊端就是hash的规则可能会导致查询数据时要访问所有节点。Hbase使用B+树,这样可以按主键的范围进行动态拆分。在容错、拆分、合并等动作上都是以叶子节点作为单位。每个叶子节点都是一个基于主键的range段,这样对查询提供了一定的相关性。hbase主要存储的非结构话和半结构化的稀疏数据,而且支持单行事务。同样是基于B+树结构的oceanbase却支持跨行跨表的事务,但是这个是有代价的,引入了UpdateServer节点作为动态数据的修改节点,这样也间接引入了单机问题。同时oceanbase支持结构化数据,总的来说oceanbase是rdbms+云存储的结合体。其实B+树实现的拆库也有它的问题,比如对于子表的分裂与合并。子表其实就是相关的叶子节点,在分裂与合并的时候要考虑多个副本的分裂节点的一致性,同时也要注意在分裂的时候的更新操作。
Hbase存储两种类型的数据,一种就是基于key-value数据,主要是通过简单封装HFile结构;另一个

就是日志信息(Hlog),物理上是hadoop 的SequenceFIle;


StoreFile存储格式:
1.Data Block ,保存表数据,可以被压缩。主要分为魔术和key-value两个区域;
2.Meta Block , 这个部分是可选的,保存用户自动以的k-v对;
3.File Info,StorFIle的元信息,可以添加自定义的键值对,此段不会被压缩;
4.DataBlock Index,是DataBlock的索引,每个索引的key是被索引block的第一条记录key的值
5.Mata Block Index ,包括的是Meta Block的索引
6.Trailer 它记录了以上段的偏移量,读取HFile时,会先读取这个段,得到各个段的位置。然后再读取DataBlock Index,DataBlock Index保存在内存中,采用LRU机制进行淘汰。
未完待续。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值