HBase的数据模型

上次我们讲过了《HBase简介》,点击阅读有助于更好地理解本文。本文讲述的是HBase数据模型。

 1、ROW KEY

  • 决定一行数据
  • 按照字典顺序排序的。
  • Row key只能存储64k的字节数据

2、Column Family列族 & qualifier列

  • HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。
  • 列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如 course:math, course:english, 新的列可以随后按需、动态加入;权限控制、存储以及调优都是在列族层面进行的;
  • HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。

3、Cell单元格

  • 由行和列的坐标交叉决定; 单元格是有版本的;
  • 单元格的内容是未解析的字节数组;
  • 由{row key, column( =<family> +<qualifier>), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。

4、Timestamp时间戳

  • 在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
  • 时间戳的类型是 64位整型。
  • 时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。 时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。

存储实例:



这就是HBase的数据模型,接下来一篇文章将介绍HBase的架构体系和HBase集群安装,请多关注。


### HBase 数据模型详解 HBase数据模型是一种稀疏、分布式的多维映射表,其核心概念包括表(Table)、行(Row)、列族(Column Family)以及单元格(Cell)。以下是关于 HBase 数据模型的具体结构和设计: #### 表(Table) HBase 中的数据是以表的形式组织的。类似于传统的关系型数据库,但是它的设计更加灵活。每个表由行和列组成,并且可以动态扩展。 #### 行(Row) 每一行都有一个唯一的标识符——`RowKey`[^3]。所有的数据都是按 `RowKey` 的字典顺序存储的,这意味着可以通过指定范围来高效地扫描一组连续的行。由于数据是按照这种顺序排列的,因此 `RowKey` 的设计对于性能至关重要。 #### 列族(Column Family) 与传统的二维表格不同,在 HBase 中引入了一个新的概念叫作 **列族**。每一个列都需要归属于某个特定的列族[^1]。列族是在创建表的时候定义好的,并且一旦设定就很难修改。同一个列族内的所有列共享相同的存储属性配置,比如压缩方式、TTL(Time To Live)等参数。 #### 单元格(Cell) 在一个具体的行列交叉点上的值被称为 Cell 或者 KeyValue 对象。值得注意的是,除了基本的内容之外,每个 cell 都会附加时间戳信息用于版本控制。默认情况下保留最新三个版本;如果需要的话也可以调整这个数值甚至关闭版本管理功能。 #### 时间戳(Timestamp) 为了实现多版本支持,每次写入操作都会自动记录当前的时间作为该条记录的时间戳[^2]。这样即使同一位置多次更新也不会覆盖旧有数据而是新增加一条带有新 timestamp 的 entry。 ```java Put put = new Put(Bytes.toBytes("row1")); put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"), System.currentTimeMillis(), Bytes.toBytes("value1")); table.put(put); ``` 以上代码展示了如何向名为 "cf" 的 column family 下面增加一条 key-value pair:"col1"=>"value1". --- ### 物理存储布局 从物理层面来看,Hbase 将逻辑上的 table 分割成若干 region,这些 regions 被均匀分布在集群节点上以达到负载均衡的目的;而每个region内部则进一步划分为storefiles 和 memstores 来分别处理持久化磁盘读取请求及内存缓存机制. 当客户端发起 get/scan 请求时,hmaster 会定位到目标所在的regionserver 并返回对应的结果集.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值