《HBase实战》一2.5 数据模型

简介:

本节书摘来异步社区《HBase实战》一书中的第2章,第2.5节,作者: 【美】Nick Dimiduk , Amandeep Khurana 译者: 谢磊 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 数据模型

HBase实战
正如你看到的那样,HBase进行数据建模的方式和你熟悉的关系型数据库有些不同。关系型数据库围绕表、列和数据类型——数据的形态使用严格的规则。遵守这些严格规则的数据称为结构化数据。HBase设计上没有严格形态的数据。数据记录可能包含不一致的列、不确定大小等。这种数据称为半结构化数据(semistructured data)。

在逻辑模型里针对结构化或半结构化数据的导向影响了数据系统物理模型的设计。关系型数据库假定表中的记录都是结构化的和高度有规律的。因此,在物理实现时,利用这一点相应优化硬盘上的存放格式和内存里的结构。同样,HBase也会利用所存储数据是半结构化的特点。随着系统发展,物理模型上的不同也会影响逻辑模型。因为这种双向紧密的联系,优化数据系统必须深入理解逻辑模型和物理 模型。

除了面向半结构化数据的特点外,HBase还有另外一个重要考虑因素——可扩展性。在半结构化逻辑模型里数据构成是松耦合的,这一点有利于物理分散存放。HBase的物理模型设计上适合于物理分散存放,这一点也影响了逻辑模型。此外,这种物理模型设计迫使HBase放弃了一些关系型数据库具有的特性。特别是,HBase不能实施关系约束(constraint)并且不支持多行事务(multirow transaction)1。这种关系影响了下面几个主题。

2.5.1 逻辑模型:有序映射的映射集合

HBase中使用的逻辑数据模型有许多有效的描述。图2-6把这个模型解释为键值数据库。我们考虑的一种描述是有序映射的映射(sorted map of maps)。你大概熟悉编程语言里的映射集合或者字典结构。可以把HBase看做这种结构的无限的、实体化的、嵌套的版本。

我们先来思考映射的映射这个概念。HBase使用坐标系统来识别单元里的数据:[行键,列族,列限定符,时间版本]。例如,从users表里取出Mark的记录(见图2-7)。


7

理解映射的映射的概念时,把这些坐标从里往外看。你可以想象,开始以时间版本为键、数据为值建立单元映射,往上一层以列限定符为键、单元映射为值建立列族映射,最后以行键为键列族映射为值建立表映射。这个庞然大物用Java描述是这样的:Map<RowKey, Map<ColumnFamily, Map<ColumnQualifier, Map<Version, Data>>>>。不算漂亮,但是简单易懂。

注意我们说映射的映射是有序的。上述例子只显示了一条记录,即使如此也可以看到顺序。注意password单元有两个时间版本。最新时间版本排在稍晚时间版本之前。HBase按照时间戳降序排列各时间版本,所以最新数据总是在最前面。这种物理设计明显导致可以快速访问最新时间版本。其他的映射键按照升序排列。现在的例子看不到这一点,让我们插入几行记录看看是什么样子:


w2

现在再次列出Users表的内容,可以看到:


w1

实践中,设计HBase表模式时这种排序设计是一个关键考虑因素。这是另外一个物理数据模型影响逻辑模型的地方。掌握这些细节可以帮助你在设计模式时利用这个特性。

2.5.2 物理模型:面向列族

就像关系型数据库一样,HBase中的表由行和列组成。HBase中列按照列族分组。这种分组表现在映射的映射逻辑模型中是其中一个层次。列族也表现在物理模型中。每个列族在硬盘上有自己的HFile集合。这种物理上的隔离允许在列族底层HFile层面上分别进行管理。进一步考虑到合并,每个列族的HFile都是独立管理的。

HBase的记录按照键值对存储在HFile里。HFile自身是二进制文件,不是直接可读的。存储在硬盘上HFile里的Mark用户数据如图2-8所示。注意,在HFile里Mark这一行使用了多条记录。每个列限定符和时间版本有自己的记录。另外,文件里没有空记录(null)。如果没有数据,HBase不会存储任何东西。因此列族的存储是面向列的,就像其他列式数据库一样。一行中一个列族的数据不一定存放在同一个HFile里。Mark的info数据可能分散在多个HFile里。唯一的要求是,一行中列族的数据需要物理存放在一起。


8


如果users表有了另一个列族,并且Mark在那些列里有数据。Mark的行也会在那些HFile里有数据。每个列族使用自己的HFile意味着,当执行读操作时HBase不需要读出一行中所有的数据,只需要读取用到列族的数据。面向列意味着当检索指定单元时,HBase不需要读占位符(placeholder)记录。这两个物理细节有利于稀疏数据集合的高效存储和快速读取。

让我们增加另外一个列族到users表,以存储TwitBase网站上的活动,这会生成多个HFile。让HBase管理整行的一整套工具如图2-9所示。HBase称这种机制为region,我们下一章会讨论。


9


在图2-9中可以看到,访问不同列族的数据涉及完全不同的MemStore和HFile。列族activity数据的增长并不影响列族info的性能。

相关文章
|
分布式计算 大数据 分布式数据库
"揭秘HBase MapReduce高效数据处理秘诀:四步实战攻略,让你轻松玩转大数据分析!"
【8月更文挑战第17天】大数据时代,HBase以高性能、可扩展性成为关键的数据存储解决方案。结合MapReduce分布式计算框架,能高效处理HBase中的大规模数据。本文通过实例展示如何配置HBase集群、编写Map和Reduce函数,以及运行MapReduce作业来计算HBase某列的平均值。此过程不仅限于简单的统计分析,还可扩展至更复杂的数据处理任务,为企业提供强有力的大数据技术支持。
519 1
|
存储 NoSQL 分布式数据库
【HBase入门与实战】一文搞懂HBase!
该文档介绍了HBase,一种高吞吐量的NoSQL数据库,适合处理大规模数据。HBase具备快速读写、列式存储和天然支持集群部署的特点,常用于高并发场景。NoSQL与关系型数据库的主要区别在于数据模型、查询语言和可伸缩性。HBase的物理架构包括Client、Zookeeper、HMaster和RegionServer,其中RegionServer管理数据存储。HBase的读写流程利用MemStore和Bloom Filter提高效率。此外,文档还提到了HBase的应用,如时间序列数据、消息传递和内容服务。
4359 2
【HBase入门与实战】一文搞懂HBase!
|
存储 分布式计算 大数据
HBase分布式数据库关键技术与实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析了HBase的核心技术,包括数据模型、分布式架构、访问模式和一致性保证,并探讨了其实战应用,如大规模数据存储、实时数据分析及与Hadoop、Spark集成。同时,分享了面试经验,对比了HBase与其他数据库的差异,提出了应对挑战的解决方案,展望了HBase的未来趋势。通过Java API代码示例,帮助读者巩固理解。全面了解和掌握HBase,能为面试和实际工作中的大数据处理提供坚实基础。
863 3
|
存储 NoSQL Java
HBase的数据模型是什么样的?
HBase的数据模型是什么样的?
448 0
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
577 0
|
存储 NoSQL 分布式数据库
94 hbase数据模型
94 hbase数据模型
159 0
|
存储 分布式计算 NoSQL
分布式数据库HBase的基本概念和架构之基本数据模型的Cell
HBase是一个分布式数据库系统,基于Google的Bigtable和Apache Hadoop的HDFS构建而成。它是一个分布式数据库的NoSQL数据库,主要用于存储和处理海量数据。HBase的核心特性包括高可用性、高性能和高伸缩性。在阿里云开发者社区中,我们将介绍HBase的基本概念和架构,以及它的基本数据模型Cell。
1157 0
|
存储 分布式计算 NoSQL
分布式数据库HBase的基本概念和架构之基本数据模型的TimeStamp
HBase是一个分布式数据库系统,基于Google的Bigtable和Apache Hadoop的HDFS构建而成。
654 0
|
存储 分布式计算 NoSQL
分布式数据库HBase的基本概念和架构之基本数据模型的Table
HBase是一个分布式数据库系统,基于Google的Bigtable和Apache Hadoop的HDFS构建而成。
|
存储 分布式计算 NoSQL
分布式数据库HBase的基本概念和架构之基本数据模型的Column
HBase是一个分布式数据库系统,基于Google的Bigtable和Apache Hadoop的HDFS构建而成。
600 0