开发者社区> zygfengyuwuzu> 正文

HBase数据库相关基本知识

简介: HBase数据库相关知识 1、 HBase相关概念模型 l  表(table),与关系型数据库一样就是有行和列的表 l  行(row),在表里数据按行存储、行由行键(rowkey)唯一标识,没有数据类型统一为byte[]数组 l  列族(column family),行里的数据按列族分组String类型,每个表必须至少有一个列族 l  列限定符(column qualifier),列族里的数据用列限定符定位。
+关注继续查看

HBase数据库相关知识

1、 HBase相关概念模型

l  表(table),与关系型数据库一样就是有行和列的表

l  行(row),在表里数据按行存储、行由行键(rowkey)唯一标识,没有数据类型统一为byte[]数组

l  列族(column family),行里的数据按列族分组String类型,每个表必须至少有一个列族

l  列限定符(column qualifier),列族里的数据用列限定符定位。类似关系型数据库里面的列,不必事前定义,没有数据类型同样是byte[]数组

l  单元(cell),单元值我们真实存储的数据(value),没有数据类型byte[]数组

l  时间版本(version),单元值有时间版本,时间版本用时间戳标识long类型(默认保留3个数据版本)

2、 数据存储模型

Hbase集群数据存储底层使用HDFS保障数据容错(一个节点宕机负责迁移数据到另外节点保证数据一致),多机器分布式存储(下图为一个机器节点存储示意图)

 

 

 

       每个Hbase服务host主机被HDFS视为一个DataNode(数据节点)每个数据节点有一个RegionServer(区域服务)负责读写服务。

3、 表存储分区

下图是一张表在Hbase中存储的数据分割,数据通过行键(rowkey)进行数据分割到不同Regionserver(如果行键是有一定规则的Hbase一般不会负载分发数据,一般会将行键原始值进行MD5或哈希散列计算之后作为行键存储)

      

 

4、 表中各元素关系

 

      

 

       一个表中可以有多个列族,但不宜太多(有待考究)一般是3~5个左右。其中类某些列族里面的数据可以一对多的关系,两个列族之间互不影响(见下图)

 

 

 

 

5、 Hbase数据物理存储与逻辑表结构及数据版本的关系

 

 

 

       Hbase的张表是一个目录,下面是列族目录,不同的列族在存储路径上互不影响,一个列族内的数据存储在一个HFile上面。

       每个列族内的每一列的每个cell数据都有自己的版本(Hbase默认保存3个版本的数据,可设置)。

插入新数据作为数据(value)的第一个版本(如不指定时间戳版本Hbase自动生成)。

更新数据不会再原有数据上做更新,同插入数据一样,只不过在之前版本的前面(逻辑上)获取新的时间戳(version)。

读取数据的时候一般读取倒序第一行就是后插入的数据,同时也可以读取之前保存的版本数据。

删除数据不会马上真实的删除存储的数据,只是对要删除的数据进行标记(不会被查询到),等待HFile数据合并的时候进行一起删除。

 

下图为键值关系及版本示意图

 

 

 

       要想定位 “张三” 需要 行键,列族,列,时间戳(version)定位到。

 

6、 HBase优势

通过上面简单了解HBase有如下特点

  1. 非常突出“列”的概念,null值不占空间
  2. 每张表只能有一个索引,就是行键(rowkey)
  3. 列族可以标识一类列,两个列族之间互不影响
  4. 存在多个数据版本
  5. 更新和删除操作比较特殊
  6. 数据结构无限制

通过特点有一下优势

  1. 吞吐量高
  2. 随机读非常快(按rowkey读取)
  3. 集群容错好
  4. 横向扩展方便,适合长期存储

劣势

1. 不支持二级索引

2. HFile数据文件合并或拆分会对服务可用性造成一定影响

3. 行键(rowkey)实际使用需要进行良好设计

4.    很难进行模糊查询和部分数据提取

7、 针对不足一些方案

针对不支持二级索引的可以使用另一张表进行二级索引存储或使用redis进行二级索引存储。

HFile数据合并或拆分在业务闲时进行操作

行键根据实际业务需求进行设计

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Hbase数据库完全分布式搭建以及java中操作Hbase
Hbase数据库完全分布式搭建以及java中操作Hbase
19 0
HBase:Hadoop生态系统中的分布式NoSQL数据库【上进小菜猪大数据系列】
HBase:Hadoop生态系统中的分布式NoSQL数据库【上进小菜猪大数据系列】
36 0
HBase数据库总结(一)
如果一行包括的列数超过了批量中设置的值,则可以将这一行分片,每次next操作返回一片,当一行的列数不能被批量中设置的值整除时,最后一次返回的Result实例会包含比较少的列,如,一行17列,batch设置为5,则一共返回4个Result实例,这4个实例中包括的列数分别为5、5、5、2。如果Rowkey 是按时间戳的方式递增,不要将时间放在二进制码的前面,建议将Rowkey的高位作为散列字段,由程序循环生成,低位放时间字段,这样将提高数据均衡分布在每个Regionserver 实现负载均衡的几率。
141 0
分布式NoSQL列存储数据库Hbase(六)
分布式NoSQL列存储数据库Hbase(六)
57 0
大数据开发笔记(十):Hbase列存储数据库总结
HBase 本质上是一个数据模型,可以提供快速随机访问海量结构化数据。利用 Hadoop 的文件系统(HDFS)提供的容错能 力。它是 Hadoop 的生态系统,使用 HBase 在 HDFS 读取消费/随机访问数据,是 Hadoop 文件系统的一部分。
203 0
Hbase分布式列存储数据库
HBase 本质上是一个数据模型,可以提供快速随机访问海量结构化数据。利用 Hadoop 的文件系统(HDFS)提供的容错能力。它是 Hadoop 的生态系统,使用 HBase 在 HDFS 读取消费/随机访问数据,是 Hadoop 文件系统的一部分。 HBase 是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个 HBase:表是行的集合、行是列族的集合、列族是列的集合、列是键值对的集合。
154 0
Python编程:happybase读写HBase数据库
Python编程:happybase读写HBase数据库
235 0
HBase数据库的基本操作增删改查
HBase数据库的基本操作增删改查
93 0
+关注
zygfengyuwuzu
本人从事多年java开发对技术有浓厚的兴趣,喜欢分享
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
第十二届 BigData NoSQL Meetup — 基于hbase的New sql落地实践
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多