HBase数据库
考试要求: 掌握     
知识路径:  > 数据库技术  > 数据库技术基础  > 数据库模型  > 典型数据库:RDB(关系数据库)、OODB(面向对象数据库)、ORDB(对象关系数据库)、XML数据库、NoSQL(非关系数据库)  > 非关系型数据库NoSQL  > NoSQL应用案例与新技术


 
       HBase同Hypertable一样,是Google Bigtable的开源实现。作为列存储模式与键值对存储模式相结合的NoSQL数据库,HBase具有灵活的数据模型,不仅可以基于键进行快速查询,还可以实现基于值、列名等全文遍历和检索。HBase可以实现自动的数据分片,用户在不知道数据存储在哪个节点上时,只要说明检索要求,系统会自动进行数据的查询和反馈。
       HBase数据逻辑结构
       HBase数据逻辑结构主要包括行键(Raw key)、列(Column)、时间戳(Timestamp)和单元格(Celll)。与传统的关系型数据库类似,HBase也是以表的形式组织数据,表由行和列组成。不同的是,Hbase的列有列族的概念,列由family和qualifier两部分组成。单元格由行、列和时间戳唯一决定。下面对这些名词进行具体介绍。
       (1)行(Raw):在HBase表中,Raw key是用来检索记录的主键,可以是任意字符串,它的最大长度是64KB,实际应用中长度一般为10~100 bytes。在HBase内部,Raw key保存为字节数组,按照字典顺序由低到高存储在表中,利用此特性,将经常一起读取的行存储放在一起。
       (2)列(Column):列由列族(Column Family)和列标识(Column Qualifier)两部分组成。列族是列的集合,所有成员有着相同的前缀;列标识没有特定的数据类型,通常列族里面的数据通过列标识进行定位。以Column Family:Column Qualifier确定列族里面的某列,例如Course:Math,Course:History。
       (3)单元格(Cell):单元格由行、列和时间戳共同确定,可以使用{Row key,Column(=+),Timestamp}三元组进行访问。单元格的数据没有特定类型,以二进制字节进行存储。
       (4)时间戳(Timestamp):每个单元格会保存同一数据的多个版本,通常通过时间戳进行索引。读取单元格时,如果时间戳没有被指定,则默认返回最新的数据;写入单元格时,如果时间戳没被指定,则返回当前时间。
       HBase Shell的操作
       HBase Shell是HBase的命令行工具,可以使用shell命令来查询HBase中数据的详细情况。安装和配置好HBase的环境变量后,使用HBase shell进入命令行界面。与关系型数据库不同,HBase的基本组成为表,不存在多个数据库。因此在HBase中存储数据首先要创建表,同时设置列族的数量和属性。HBase表的操作命令如下表所示。
       
       HBase表的操作命令
       下面对HBase表的常用操作命令进行详细介绍。
          创建表
          创建表的命令是:create,{NAME=>,VERSION=>}。
          大括号内是对列族的定义,NAME、VERSION是参数名,不需要单引号。需要注意的是,在HBase Shell语法中,所有字符串参数必须包含在单引号内,且区分大小写。Version=>指的是单元格内保存最近version个版本。
          插入数据
          插入数据的命令是:put,
          在上述命令中,第一个table是表名;第二个参数是行键名称,它的类型为字符串类型;第三个参数是列族和列的名称,列族必须是已经创建的,列名临时定义,因此列是可以随意拓展的;第四个参数是单元格的值,所有的数据都是字符串的形式;最后一个是时间戳。
          put命令只能插入单元格的数据,每次只能插入一条数据。如果put语句中的单元格是已经存在的,即各表名、行键、列族、列名都已经存在,那么在不考虑时间戳的情况下,执行例9.5的语句是对数据的更新操作。
          扫描查询数据
          扫描查询数据的命令是:scan,{COLUMNS=[,…]},LIMIT=>num。
          使用scan命令指定表名,即可查询全表的数据,还可以指定列族和列的名称,或者输出行数等。在指定条件进行输出的时候,需要使用大括号将参数括起来。指定列族和列名称时使用COLUMNS限定符,LIMIT指的是扫描前几条数据。还可以添加STARTROW和TIMERANGE等高级功能,指定输出范围使用STARTROW和ENDROW限定符,此时输出行不包括ENDROW;TIMERANGE指定最大时间戳和最小时间戳,只有在此范围内的单元格才能被获取。
          删除数据
          删除行中某个列值的命令是:delete,
          删除行的命令是:deleteall,
          删除表中的所有数据的命令是:truncate。
          delete命令行可以从表中删除某一行、某一列以及所有数据,必须指明表名和列族名称,而列名和时间戳是可以选择的。HBase的删除不像传统关系型数据库的删除,delete操作是在对应的数据上打上删除标志,等到下一次合并、分裂等操作时才将所有数据进行移除。
          在delete对象setWriteToWAL(),这是进行删除是否写入WAL日志中的操作。如果写入日志,则在整个删除动作的时候,数据操作被记录,出现系统崩溃时可以进行数据恢复。如果不写入的话,可以降低删除动作时间,但是如果在没有写入到HDFS中前发生系统崩溃,数据将无法进行恢复。
 

更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2025 All Rights Reserved
软考在线版权所有