HBase数据库相关基本知识
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有如下特点
- 非常突出“列”的概念,null值不占空间
- 每张表只能有一个索引,就是行键(rowkey)
- 列族可以标识一类列,两个列族之间互不影响
- 存在多个数据版本
- 更新和删除操作比较特殊
- 数据结构无限制
通过特点有一下优势
- 吞吐量高
- 随机读非常快(按rowkey读取)
- 集群容错好
- 横向扩展方便,适合长期存储
劣势
1. 不支持二级索引
2. HFile数据文件合并或拆分会对服务可用性造成一定影响
3. 行键(rowkey)实际使用需要进行良好设计
4. 很难进行模糊查询和部分数据提取
7、 针对不足一些方案
针对不支持二级索引的可以使用另一张表进行二级索引存储或使用redis进行二级索引存储。
HFile数据合并或拆分在业务闲时进行操作
行键根据实际业务需求进行设计
上一篇: 孕晚期如何提升睡眠质量
下一篇: php递归遍历多维数组的方法