HBase: 为分布式,扩展性和速度而设计

HBase是运行在Hadoop集群上的数据库。HBase不同于传统的RDBMS,因为它放宽了对传统RDBMS数据库ACID (Atomicity(原子性), Consistency(一致性), Isolation(隔离性), and Durability(持久性)) 属性的要求,已实现更高的扩展性。Hbase存储的数据也不需要符合RDBMS严格的模式,因此他非常适合存储非结构化和半结构化数据。

HBase允许构建大数据应用以及进行扩展,但与使用传统数据库构建应用程序相比,在实现上有一些区别。在此博文中,将提供HBase的概述,了解传统数据可的局限性,并深入探讨HBase数据模型的具体细节。

Relational Databases vs. HBase – 数据存储模型

为什么我们需要使用NoSQL/HBase?首先,在讨论传统数据库的局限性之前,我们先看看传统数据库的优点:

  • 关系型数据库提供了一个标准的持久模型
  • SQL 是数据操作(SQL)的标准
  • 关系型数据库管理事务的并发性
  • 关系型数据具有丰富的工具

HBase :为分布式,扩展性和速度而设计

关系数据库是多年的标准,因此有哪些已经改变了呢?随着越来越多的数据需要扩展。一种方式是使用更大的服务器进行垂直扩展,但这可能会非常昂贵,并且随着数据量增加而存在限制。

HBase :为分布式,扩展性和速度而设计

Relational Databases vs. HBase - 扩展性

NoSQL带来了那些改变?

使用硬件的水平扩展代替垂直扩展。使其跟便宜,更可靠。要实现RDBMS的水平分区或者分片,数据是基于行分配的,一些行分布在一台机器上,其他行分布在其他机器上,但是对关系型数据进行分区或者分片非常复杂,他并没有自动执行此操作的设计。此外,会丢失跨分片的查询,事务和一致性控制。关系数据库是为单个节点设计的;它们不是为了在集群上运行而设计的。

HBase :为分布式,扩展性和速度而设计

关系模型的限制

数据库规范化消除了冗余数据,从而提高了存储效率。然而,标准化数据需要使用关联查询,以便再次将数据重新组合在一起。尽管HBase不支持关系和连接,但访问的数据会存储在一起,因此可以避免关系模型相关的限制。查看下图中数据存储模型的差异:

HBase :为分布式,扩展性和速度而设计

Relational databases vs. HBase - Scaling

HBase 为分布式,扩展性和速度而设计

HBase水平扩展基于数据访问一致和存储一致而设计的。数据按key分组在集群上
运行的核心。在水平分区或分片中,key range用于分片,分片跨越多个服务器分配不同的数据.集群的每一台服务器都是数据子集的来源。分布式数据访问的一致性,这使得水平扩展更快。HBase实际上是BigTable存储体系结构的一种实现,BigTable存储体系结构是由Google开发的分布式存储系统,旨在用于管理和扩展非常大的结构化数据。

HBase是面向列族数据存储的简称,他也是面向行的:每行都有用于查找的key(例如, 查找ID 为1234的客户).每个列族组像行内数据(客户地址,订单)一样。将行看作是所有列族中的所有值的链接。

HBase :为分布式,扩展性和速度而设计

HBase is a column family-oriented database

HBase也是一个分布式数据库。通过key对数据分组是运行在集群上和分片的核心。key充当更新的原子单元。在多台服务器上分配不同的数据分片,每台服务器都是数据子集的来源。

HBase :为分布式,扩展性和速度而设计

HBase is a distributed database

HBase Data Model

存储在HBase中的数据通过其“rowkey”来定位。这就像关系型数据库中的主键。HBase中的记录根据rowkey排序顺序存储。这是HBase的基本原理,也是HBase架构设计中使用的关键语义。

HBase :为分布式,扩展性和速度而设计

HBase data model – row keys

Table根据Rowkey的划分行序列的范围,称为region。这些region被分配到被称为RegionServer的数据节点,通过集群中传播region来扩展读写容量,这是自动完成的,也是HBase是水平分割如何设计的。
HBase :为分布式,扩展性和速度而设计

Tables are split into regions = contiguous keys

下图展示了列族如何映射到存储文件。列族存储在单独的文件中,可以单独访问。

HBase :为分布式,扩展性和速度而设计

数据存储在HBase表的单元格(cell)中。整个cell包含已添加的结构化信息,叫做Key Value。整个cell,rowkey,column family name(列族名), column name(列名), timestamp(时间戳),and value (值)将存储在您为其设置了值的每个单元格中。Key包含column family name, column name, and timestamp。

HBase :为分布式,扩展性和速度而设计

逻辑结构上cell以表格格式存储,但是在物理存储上row存储包含所有Key Value信息单元的线性集合。

在下图中,左上展示了数据的逻辑结构,而右下展示了在文件中存储的物理结构。每个Column Family存储在单独隔离的文加中。整个cell,rowkey,column family name(列族名), column name(列名), timestamp(时间戳),and value (值)将存储在您为其设置了值的每个单元格中。

HBase :为分布式,扩展性和速度而设计

Logical data model vs. physical data storage*

在之前提到过,一个单元格的完整坐标值:Table:Row:Family:Column:Timestamp ➔ Value.HBase表是稀疏表。如果column不存在数据,就不会保存。表的cells使用byte数组进行版本化。可以使用时间戳或者简历自己的版本控制系统。对于每个row:family:column坐标,可以存在多个版本内容。

HBase :为分布式,扩展性和速度而设计

Sparse data with cell versions

版本是内置的。put操作是一个insert (create)和 一个 update组成,每一个都有自己的版本。delete操作或获取一个墓碑标记,墓碑标记防止数据在查询中被返回。get 会根据参数返回特定的版本。如果不设置任何的参数,将返回最新的版本。您可以配置要保留的版本数量,并按列族完成此项工作。默认保留三个版本。当超过最大版本数量时,额外记录将最终删除。

HBase :为分布式,扩展性和速度而设计

Versioned data

在这篇博文中,您了解了HBase概要并了解了HBase数据模型。 请继续关注下一篇博文,我将深入探讨HBase架构的细节。 在本系列的第三篇也是最后一篇博客文章中,我们将看看架构设计指南。

说明

MapR-DB部分没有翻

原文地址:HBase and MapR-DB: Designed for Distribution, Scale, and Speed

相关文章:

  • 2021-08-18
  • 2021-12-12
  • 2021-08-03
  • 2022-01-14
  • 2021-10-21
猜你喜欢
  • 2022-12-23
  • 2021-06-13
  • 2021-08-15
  • 2021-07-04
  • 2021-11-16
  • 2021-12-13
  • 2022-01-04
相关资源
相似解决方案