hbase高可靠性、高性能、面向列、可伸缩的分布式存储系统,是基于hdfs的特殊数据库。
hbase数据库中有很多表,每个表中有很多列,每个列都是由一个唯一标示唯一指定和识别,笼统的说这里的一列就相当于关系型数据库表中的一行,每个列都属于一个列蔟,列蔟并不属于列的属性,而是表的scame,因此在表创建的时候就要定义列蔟。CELL我们这里可以叫做数据单元或者单元格也行,每个CELL都是由行标示+蔟名+列明唯一指定的,CELL中存储的数据包含很多个版本,类似于app版本更新一样,会把不同版本的app都保存一份,这样app的版本数据就会有很多,这里也是一样的,会把一个CELL钟的数据保存N多个版本,每个版本都是有一个时间戳timestamp,因此CELL中的数据格式是这样的 timestamp=xxxxx,value=xxx,这样一个CELL中就存储了若干条上述格式的数据版本,每次更新CELL中的数据其实就是新添加一个新版本的数据而已,并不是真正的吧原先的数据值修改掉,这样数据会越来越多,hbase也提供了两种处理机制,保存最近一段时间的数据或者是保存最新的N条数据,这个是可以设置的。我们可以这么想,hbase中的每个表都可以当成是一棵树,表明可以看做是树根节点名称,表中的多个列蔟可以看做是树的多个二级根节点,列蔟的名称就是二级根节点的名称,每个二级根节点包含多个列,这些列可以看做是树的三级节点,列名可以看做是三级节点的名称同时还保存了列的唯一标示或者是节点的唯一标示,CELL可以看做是三级节点下的众多节点,每个节点都保存数据的一个版本(timestamp和value),举个例子学生成绩表score,有以下属性 name:列唯一标示字符,grad:年级 列蔟,course:课程 列蔟,course:math:列名 数学 属于列蔟course,course:en:列名 语文 属于列蔟course,那么可以将它看做是这么一棵树score,创建表的时候就相当于创建了一个只有一个节点的树score,树的根节点是score,创建表的时候同时要指定列蔟,那么同时也想相当于创建了树的二级节点grad和course,当你添加数据的时候一定会指定表名、列标示字符、列蔟名、列名和值,添加操作就相当于在指定的列蔟名节点下新建了一个名称为‘列标示符’的节点,这个节点下又新建了一个名称为‘列名’的节点,在名称为'列名'的节点下又新建了一个节点用来存储值,这个节点上存储有两部分的值,一个是你要设置的值另外一个就是timestamp时间戳。我觉得这样比较理解吧,也不用一会儿列一会儿CELL的搞得混乱不好理解,呵呵!
接下来就记录一下hbase shell的一些常用命令
list命令,列出所有表
count命令,查询表总数据,count 'score' 可见count命令的格式为count ‘表名称’
scan命令,查询表中所有数据 scan 'score' 可见scan命令的格式为 scan '表名称'
scan命令条件查询 scan 'score',{COLUMNS=>'course'} 可见格式为scan '表名称',{COLUMNS=>'列蔟名称[:列名]'} 其中[]为可选
查询score表所有学生的的成绩信息
put命令,用来添加使用 put 'score','gl','grad:','5' 可见put命令的格式为 put ‘表名称’,‘列标示’,‘列蔟名:列名’,‘值’
添加名称为gl的人的成绩信息,该学生年级是5
刚开始学,不知道可不可以一次性添加多个列的值,反正我尝试的时候貌似不行会报错,只能一个一个添加
get命令,用来查询指定列标示的记录 get 'score','gl' 可见get命令格式为 get ‘表名称’,‘列标示’
查询名称是gl的人的成绩信息
get命令条件查询,用来按条件查询记录 get 'score','gl',{COLUMNS=>'course:math'}
查询名称是gl并且数学成绩信息
delete命令 用来删除制定列信息 delete 'score','gl' 可见delete命令格式 delete '表名称','列标示'
删除'jl’的成绩信息
delete按条件删除命令 delete 'score','gl',{COLUMNS=>'couese;math‘} 可见delete命令格式 delete '表名称','列标示','{COLUMNS=>’course[:列名称]'}'
删除gl的数学成绩信息
删除表命令 disable 'score'屏蔽该表,drop 'score‘ 删除表 删除表要一次执行上述两个命令方可完成
以上是初学hbase的一些想法和记录,方便以后跟进再次做个记录,若有什么建议请大伙儿多多指正!