HBase表结构

HBase是非关系型数据库,是高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。

HBase使用场景

  • 大规模数据存储:如日志记录、数据库备份等。
  • 实时数据访问:如实时搜索、实时分析等。
  • 高性能读写:如高并发、低延迟的读写操作。

一般我们从数仓中离线统计分析海量数据,将得到的结果插入HBase中用于实时查询。

表结构

hbase在表中组织数据。表名是字符串和字符的组合,可以在文件系统路径中使用

这里以一个公司员工表为案例来讲解,此表中包含员工基本信息(员工姓名、年龄),员工详细信息(工资、角色),以及时间戳。整体表结构如下:

每一行有一个RowKey用于唯一地标识和定位行,各行数据按RowKey的字典序排列。其中ImployeeBasicInfoCLF和DetailInfoCLF是两个列族,列族下又有多个具体列。(员工基本信息列族:姓名、年龄。详细信息列族:薪水、角色)

行键RowKey:

在表中数据依赖于行来存储,行通过行键来区分。行键没有数据类型,通常是一个字节数组

  • 行键,类似mysql中的主键,Table中的记录按照Row Key排序,行键是表结构的一部分;
  • 由于Hbase只支持3中查询方式:
  1. 基于Rowkey的单行查询
  2. 基于Rowkey的范围扫描
  3. 全表扫描
  • 因此,Rowkey对Hbase的性能影响非常大,Rowkey的设计就显得尤为的重要。
  • rowkey 行键可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),最好是 16。
  • 在 HBase 内部,rowkey 保存为字节数组。
  • rowkey是行的唯一标识,相同行键的数据属于同一行
  • HBase 会对表中的数据按照 rowkey 升序排序 (字典顺序)

列族/列簇ColumnFamily

列族是一些列的集合,一个列族所有成员都有同样的前缀

行中的数据通过列族来组织。列族也暗示了数据的物理排列。所以列族必须预先定义,并且不容易被修改。每行都拥有相同的列族,可能有些行的数据为空。列族是字符串和字符的组合,可以在文件系统路径中使用

列族必须在表建立的时候声明,列则不需要特别声明,用户随时可以创建新列。

  • Hbase通过列族划分数据的存储,列族下面可以包含任意多的列,实现灵活的数据存取。就像是家族的概念,我们知道一个家族是由于很多个的家庭组成的。列族也类似,列族是由一个一个的列组成(任意多)。
  • Hbase表的创建的时候就必须指定列族。就像关系型数据库创建的时候必须指定具体的列是一样的。
  • Hbase的列族不是越多越好,列族越多,在取一行数据需要参与IO、搜寻的文件就越多;官方推荐的是列族最好小于或者等于3。我们使用的场景一般是1个列族。
  • 一个列族会储存一个物理文件;
  • 通常将具有相同IO(读写)属性的列放在同一个列族下,IO属性即经常在一起查询的字段,由具体的实际业务中决定;

列Column

  • 列为每一行的列名和对应的值;可以理解为mysql的列;
  • 一个列族包含一个或多个列;列族是表结构的一部分,而列不是;
  • 定位一个列,必须指定列族;
  • 列名都以列族作为前缀,如:courses:history,courses:math;都属于courses这个列族;

单元格cell

  • HBase 中通过 rowkey 和 columns 确定的为一个存储单元称为 cell;
  • 每个 cell 都保存着同一份数据的多个版本。版本通过时间戳来索引。
  • 由{rowkey, column( = + ), version} 唯一确定的单元。 Cell 中的数据是没有类型的,全部是字节码形式存贮。

HBase表特点

  • 数据规模大,单表可容纳数十亿行,上百万列。
  • 无模式,不像关系型数据库有严格的Scheme,每行可以有任意多的列,列可以动态增加,不同行可以有不同的列,列的类型没有限制。
  • 稀疏,值为空的列不占存储空间,表可以非常稀疏,但实际存储时,能进行压缩。
  • 面向列族,面向列族的存储和权限控制,支持列族独立查询。
  • 数据多版本,利用时间戳来标识版本
  • 数据无类型,所有数据以字节数据形式存储
相关推荐
夜泉_ly2 小时前
MySQL -安装与初识
数据库·mysql
qq_529835353 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New5 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6755 小时前
数据库基础1
数据库
我爱松子鱼5 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo6 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser7 小时前
【SQL】多表查询案例
数据库·sql
Galeoto7 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)7 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231117 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql