Hadoop之HBase逻辑模型简介

HBase概念:

HBase是一个分布式面向列的开源数据库,它的思想来源于Google的一篇叫BigTable的论文。与BigTable类似,BigTable是基于GFS(Google File System)的分布式列式数据库,HBase是基于HDFS(Hadoop Distributed File System)的分布式列式数据库,不了解BigTable的读者可能不知道它的内容是什么,这里简单的说明一下:BigTable认为世界上所有的数据库的表结构都可以通过三个列即可实现,行键,列名,列值表示,例如:一个学生表

Student(    StudentId ,      StudentName,   StudentClass,                      StudentAge)                                      Student ( Key,                  ColumnName,     ColumnValue                   )

                                                                                                                                                                                       ( 1234567890,    'StudentName',    'Hirisw'                             )     

            (   1234567890 ,   'Hirisw',             'InformationSecurity0301'  ,  23             )                  可以表示成:             ( 1234567890,    'StudentClass',     'InformationSecurity0301')

                                                                                                                                                                                       ( 1234567890,    'StudentAge',        '23'                                  )

这里就只用了3列实现了一个结构性数据库的多列功能,所以BigTable就是一张无所不包的大表。

 

HBase逻辑模型:

HBase逻辑模型包括:行键,时间戳,列族(包括列可以一个列族包含多个列,列族需要预先定义好不能随意添加,列族里面的列是不需要预先定义的可以根据需求增加),这里拿一个简单的示例来说明HBase的逻辑结构:

HBase原理:

HBase是基于HDFS的,HDFS有一个问题就是文件不能修改,这个原因我们之前的内容已经讲过,那么HBase数据库是怎么实现增删改的呢,这里要讲到的就是所有操作都是基于日志的,都是通过增加记录的形式达到增删改的效果,比如说插入新纪录很好理解就是直接写入一笔数据即可,那如何修改和删除呢,通过新增一个操作内容的记录达到目的,比如说新增一个标记为删除的记录即可达到删除的目的,修改一条记录即可达到修改数据的目的这是在硬盘文件里的做法,如果是在内存里面是可以执行修改内容的动作的,只有当内存达到一定大小的时候再写入文件,那写入文件的删除记录是不是就一直保留在那里呢?其实也不是的,但文件数量增加到一定阈值的时候会将小文件合并成大文件,这个过程中就会把删除的记录去掉。

 

HBase键值存储:

在整个HBase的存储中是按列族进行存储的,存储格式如下所示,其中键长度和值长度区分当前存储数据键所在范围和值所在范围,行长度和行信息说明属于哪个行,列族长度和列族信息说明属于哪个列族,列信息说明是哪个列,时间戳说明是哪个版本,键类型说明键的类型,后面值信息就是值的内容。

HBase组成部件:

 

行键:作为数据在HBase里的唯一标识,用来作为检索记录的索引,访问表里行只有三种方式:

1.单行键索引,只通过一个行键进行精确匹配获取数据,这里虽然只有一个行键但是往往不止一条记录而是有多条记录,每一个行键可以带有多个不同的版本时间戳。

2.给定行键范围索引,这里是给出行键的范围如从AAAAA-ZZZZZ就会把这个区间里面的记录都匹配查询获取出来。

3.全表扫描,可以看做是行键的最大值和最小值之间的范围访问,是行键范围索引的一个特例

 

列族:列的表示形式为<列族>:<限定符>,列族需要建表时实现设定好,但是列不需要事先设定

列族里的列最后都有相同的读写方式(如等长的字符串),以提高性能,比如说读写又或者因为有相同结构能进行高性能压缩,不仅提高存储效率也利于数据在IO中的传输

 

时间戳:每次数据提交的时间,可由系统自动生成也可以由用户显示赋值。HBase里面保存数据的机制就是跟时间戳有关的,有两种方式

1.根据时间戳由新到旧的次序排序,取一定数量的时间戳进行保留,比如说1000个时间戳,那么从新到旧的时间戳第1000个以后的就会丢弃掉。

2.根据时间戳由新到旧的次序排序,取一定时间内的时间戳进行保留,比如说7天内的时间戳,那么超过7天的时间戳就会被丢弃掉。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值