什么是Hbase数据库?百科:HBase是一个分布式的、面向列的开源数据库,HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
在刚刚接触Hbase的时候是因为公司大数据平台开发的需要,简单的把前台人员需要的数据刷到Hbase中,put、create 、scan、get、truncate、list等简单的操作,对于什么是Hbase数据库、Hbase的物理结构、Hbase的存储原理都不了解。无论是关系型数据库还是没关系型数据库只有你搞清楚他的结构特性才能够好的使用它。
Hbase数据库——我之见
先来了解Hbase存储机制
HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。
Hbase表结构如下:
row key是用来表示唯一一行记录的主键,HBase的数据是按照RowKey的字典顺序进行全局排序的,所有的查询都只能依赖于这一个排序维度。
CF列簇:HBASE表中的每个列,都归属于某个列族。列族是表的schema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history,courses:math 都属于courses这个列族。
HBASE中通过rowkey和columns确定的为一个存储单元称为cell。每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64位整型。时间戳可以由HBASE(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显示赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
为了避免数据存在过多版本造成的管理(包括存储和索引)负担,HBASE提供了两种数据版本回收方式。一是保存数据的最后n个版本,而是保存最近一段时间内的版本(比如最近7天)。用户可以针对每个列族进行设置。
Hbase常用操作:
名称 | 命令表达式 |
查看hbase状态 | status |
创建表 | create '表名','列族名1','列族名2','列族名N' |
查看所有表 | list |
描述表 | describe '表名' |
判断表存在 | exists '表名' |
判断是否禁用启用表 |
is_enabled '表名' |
添加记录 | put '表名','rowkey','列族:列','值' |
查看记录rowkey下的所有数据 | get '表名','rowkey' |
查看所有记录 | scan '表名' |
查看表中的记录总数 | count '表名' |
获取某个列族 | get '表名','rowkey','列族:列' |
获取某个列族的某个列 | get '表名','rowkey','列族:列' |
删除记录 | delete '表名','行名','列族:列' |
删除整行 | deleteall '表名','rowkey' |
删除一张表 |
先要屏蔽该表,才能对该表进行删除 |
清空表 | truncate '表名' |
查看某个表某个列中所有数据 | scan '表名',{COLUMNS=>'列族名:列名'} |
更新记录 | 就是重新一遍,进行覆盖,hbase没有修改,都是追加 |
具体实例:
1、查看HBase运行状态 status
2、创建表 create <table>,{NAME => <family>, VERSIONS => <VERSIONS>}
创建一个User表,并且有一个info列族
3、查看所有表 list
4、描述表详情 describe 'User'
5、判断表是否存在 exists 'User'
6、启用或禁用表 is_disabled 'User' is_enabled 'User'
7、添加记录,即插入数据,语法:put <table>,<rowkey>,<family:column>,<value>
8、根据rowKey查询某个记录,语法:get <table>,<rowkey>,[<family:column>, ...]
9、查询所有记录,语法:scan <table>,{COLUMNS => [family:column, ...], LIMIT => num}
扫描所有记录
扫描前2条
范围查询
另外,还可以添加TIMERANGE和FILTER等高级功能,STARTROW、ENDROW必须大写,否则报错,查询结果不包含等于ENDROW的结果集。
10、统计表记录数,语法:count <table>, {INTERVAL => intervalNum,CACHE => cacheNum}
INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度。
11、删除
删除列
删除整行
删除表中所有数据
12、禁用或启用表
禁用表
启用表
12、删除表
删除前,必须先disable