HBase表结构(2)

简介

HBase的名字的来源于Hadoop database,即hadoop数据库,不同于一般的关系数据库,它是非结构化数据存储的数据库,而且它是基于列的而不是基于行的模式。
在这里插入图片描述
简单介绍如图
HBase是一个分布式的、面向列的、基于Google Bigtable的开源实现。
Hadoop HDFS作为其文件存储系统,
Hadoop MapReduce来处理HBase中的海量数据,
Zookeeper作为协同服务。

HBase重要概念
HBase中的表是通过 行键(Rowkey)、列簇(Column Family)、列限定符(Column Qualifier)、时间版本(Version)

HBase的表结构
HBase以表的形式存储数据。表有行和列组成。
列划分为若干个列族/列簇(column family),每个列族/列簇下面可以有多个普通列。

在这里插入图片描述
行键 (Row Key)

行键,每一行的主键列,每行的行键要唯一,行键的值为任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在HBase内部,rowKey保存为字节数组byte[]。
每一行有一个RowKey用于唯一地标识和定位行,各行数据按RowKey的字典序排列
区域Region

Table在行的方向上分割为多个Region。

Region是按大小分割的,每个表开始只有一个region,随着数据的增多,region不断增大,当增大到一个阀值的时候,region就会等分为两个新的region,之后会有越来越多的region。

Region是HBase中分布式存储和负载均衡的最小单元。不同的Region分布到不同的RegionServer上。

Region由一个或者多个Store组成, 每个Store保存一个column family, 每个Store又由一个MemStore(存储在内存中)和0到多个StoreFile(存储在HDFS上)组成

在这里插入图片描述
列族 column family

列族是每个子列的父级,每个子列都属于一个列族,一个列族包含一个或者多个相关列,创建表的时候需要指定列族,而列不需要必须指定。通过“列族名:列名”来表示某个具体的子列。

HBase中的Schema就是 TableName + Column Family Name

列限定符
就是列族下的每个子列名称,或者称为相关列,或者称为限定符,只是翻译不同。
通过columnFamily:column来定位某个子列。

存储单元 cell
我们外观看到的每个单元格其实都对应着多个存储单元,默认情况下一个单元格对应着一个存储单元,一个存储单元可以存储一份数据,如果一个单元格有多个存储单元就表示一个单元格可以存储多个值。可以通过version来设置存储单元个数。可以通过
rowKey + columnFamily + column + timestamp来唯一确定一个存储单元。cell中的数据是没有类型的,全部是字节码形式存贮。

hbase按照时间戳降序排列各时间版本,其他映射建按照升序排序。

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

参考文献
https://blog.csdn.net/vbirdbest/article/details/88236575

发布了62 篇原创文章 · 获赞 32 · 访问量 2701

猜你喜欢

转载自blog.csdn.net/weixin_45627031/article/details/104950517