HBase数据结构

一、NameSpace

HBase数据结构_第1张图片

命名空间是类似于关系数据库系统中的数据库的概念,他其实是表的逻辑分组。这种抽象为多租户相关功能奠定了基础。
命名空间包含以下四点

(1) 配额管理- 限制命名空间可以使用的资源量(即区域,表)。

(2) 权限管理 - 为租户提供另一级别的安全管理。

(3) RS逻辑组 - 可以将命名空间/表固定到RegionServers的子集上,从而保证粗略的隔离级别

(4) 表 - 命名空间中在模式定义时预先声明表。默认在default空间

命名空间是可以管理维护的,可以创建,删除或更改命名空间。

创建一个命名空间

create_namespace 'my_ns'

创建表的时候指定一个命名空间

create 'my_ns:my_table', 'fam'

删除一个命名空间

drop_namespace 'my_ns'

修改一个命名空间

alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}

 

HBase有两个特殊预定义的命名空间:

  • hbase - 系统命名空间,用于包含HBase内部表
  • default - 没有明确指定名称空间的表将自动落入此名称空间

二、Table

传统数据库一个表的结构如下:

姓名 年龄 性别 成绩
liujinghui 18 strong man 100
zhangsan 99 Niangs -1

转换成HBase数据库的表结构就如下所示

  Info Score
Row_key Info:name Info:age Info:sex Score:name Score:score
           

//========创建表和列族========//

2.3.3 :016 > create 'School','Info','Score'
Created table School
Took 0.8136 seconds   

//========创建列族中的列和数据======//

2.3.3 :019 > put 'School','001','Info:name','liujinghui'
Took 0.1916 seconds                                                             
2.3.3 :020 > put 'School','001','Info:age','18'
Took 0.0048 seconds                                                             
2.3.3 :021 > put 'School','001','Info:sex','strong man'
Took 0.0067 seconds                                                             
2.3.3 :022 > put 'School','001','Score:name','liujinghui'
Took 0.0057 seconds                                                             
2.3.3 :023 > put 'School','001','Score:score','100'
Took 0.0042 seconds                                                             
2.3.3 :024 > put 'School','002','Info:name','zhangsan'
Took 0.0111 seconds                                                             
2.3.3 :025 > put 'School','002','Info:age','99'
Took 0.0043 seconds                                                             
2.3.3 :026 > put 'School','002','Info:sex','Niangs'
Took 0.0058 seconds                                                             
2.3.3 :027 > put 'School','002','Score:name','zhangsan'
Took 0.0024 seconds                                                             
2.3.3 :028 > put 'School','002','Score:score','-1'
Took 0.0047 seconds  

HBase数据结构_第2张图片

二、Column Family

列族:HBASE表中的每个列,都归属于某个列族。列族是表的schema的一部 分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如 courses:history,courses:math都属于courses 这个列族。

三、RowKey

RowKey是记录的主键,访问一个行只有三种方式

  • 单个RowKey
  • RowKey的正则
  • 全表扫描

RowKey行键 (RowKey)可以是任意字符串(最大长度是64KB,实际应用中长度一般为 10-100bytes),在HBASE内部,RowKey保存为字节数组。存储时,数据按照RowKey的字典序(byte order)排序存储。设计RowKey时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)

四、Cell

由 rowkey, column Family:columu, version 他们三个参数确定唯一一个Cell

cell中的数据是没有类型的,全部是字节码形式存贮。

HBase数据结构_第3张图片

注意score只显示最新的

HBase中的cell 是按版本来存储的,每个cell都有各种版本的数据,所以当update一个cell中的数据的时候,其实是网cell的末尾追加一个版本的数据,而update之前的数据依然是存在的,这和insert一个新的数据没有任何的区别,每个family都可以设置每个cell要保留的版本数量,默认是3,由VERSIONS决定。 当使用get或者scan命令查看数据时候,如果没有指定版本数则默认是只取到每个cell最新的版本的数据,如果指定了VERSIONS则显示其指定的版本数量的数据。

五、Time Stamp

HBASE 中通过rowkey和columns确定的为一个存贮单元称为cell。每个 cell都保存 着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由HBASE(在数据写入时自动 )赋值,此时时间戳是精确到毫秒 的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版 本冲突,就必须自己生成具有唯一性的时间戳。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。

为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,HBASE提供 了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段 时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

 

你可能感兴趣的:(HBase)