HBase的属性
HBase(Hadoop数据库)是Google's Bigtable的Java实现。
谷歌将Bigtable定义为"稀疏,分布式,持久的多维复选地图"。
这是一个非常简洁的定义,但你也同意这是复杂的一面。
要分解BigTable的复杂性一点,以下是对每个属性的讨论。
HBase是稀疏的
我们可能猜到的是,Bigtable分布式数据存储系统旨在满足大数据的需求。
现在,大数据应用程序存储大量数据,但大数据内容也经常变量。
想象一下在数据库中的传统表格存储客户联系信息,如图所示:
|客户ID |姓氏|名字|中间名|电子邮件地址|街道地址|
| --- - | --- | - - | --- | - - | - |
| 00001 |史密斯|约翰|蒂莫西| | 1 Hadoop Lane,NY 11111 |
| 00002 |母鹿|简| null | null | 7 HBase AVE,CA 22222 |
或者个人可能需要为其每个客户或者成分提供完整的数据记录。
一个很好的例子是医生,谁需要所有联系信息,以便为我们提供正确的护理。
其他或者个人可能只需要部分联系信息或者可能需要随时间了解这些信息。
例如,客户服务可以处理用于服务请求的电话或者电子邮件。
客户可能会或者可能不会选择提供服务所有联系信息。
但是,随着时间的推移,可以更多地了解他们的客户,使他们能够提供更好的服务 - 通过发出主动服务警报。
在此上下文中,稀疏表示行中的字段可以为空或者空,但不会将HBase带到尖叫声中。
例如,HBase可以处理我们没有(尚未)的事实,例如知道Jane Doe的中间名和电子邮件地址。
这是另一个例子:用于存储卫星图像的数据库。
事实证明,谷歌使用Bigtable技术来存储地球的卫星图像。
在几乎所有案例中,每当存储图像时,元数据也会存储。
元数据可以包括图像的街道地址,或者如果图像被从荒野捕获,则只有纬度和经度。
元数据在内容中是可变的,因此某些字段将为null - 这没关系。
在两个示例中,收集的数据集可以非常大 - 尤其是在第二个例子中。
图像数据库几乎总是在Tberabytes中或者有时在Petabytes中衡量。
HBase专为存储大数据而设计,但它还专为存储稀疏数据记录而无需成本。
当我们使用大数据应用程序时,这一问题是至关重要的!将几百万行存储的几张空记录是浪费的,但试图想象少数行上的浪费!
值得庆幸的是,这是谷歌设计师和HBase社区的关键考虑因素。
支持稀疏数据不浪费昂贵的存储空间。
它不会阻止那里。
考虑模式较少的数据存储的权力。
该表显示了一个经典客户联系人表。
当设计这些桌子时,他们知道他们想要存储的前面。
换句话说,架构是固定的;即使在第一个字节存储在表中,也会定义。
现在,如果随着时间的推移,客户需要一个新的领域?
Twitter手柄或者新手机号码怎么样?
你似乎陷入了不再适合你的架构。
好吧,HBase也解决了这一挑战 - 当我们没有数据时,我们不仅可以跳过字段,还可以随时间动态地添加字段(或者在HBase vernacarular中的列),而无需重新设计模式或者中断操作。
因此,我们可以将HBase视为较少的数据存储;也就是说,它是流体 - 我们可以添加,减去或者修改模式。
HBase分布式和持久性
Bigtable是一个分布式和持久的数据存储。
持久性只是意味着我们在BigTable(和HBase)中存储的数据将持续或者留在程序或者会话结束后。
这非常简单 - 坚持不懈意味着它持续存在 - 但你应该花费更多时间考虑数据如何持续存在。
在其最大的纸张中,谷歌描述了称为Google文件系统或者GFS的分布式文件系统。
事实证明,正如HBase是Bigtable的开源实现一样,HDFS是GFS的开源实现。
默认情况下,HBase利用HDF将其数据持续到磁盘存储。
虽然其他分布式数据存储可以与HBase一起使用,但绝大多数HBase安装利用HDFS。
这对HBase是"Hadoop数据库" - 嘿,它是一个完美的意义 - 嘿,它是内置的名字,为善良而建立在名称中。
HDFS是一个关键的启用技术,不仅适用于Hadoop,还可以用于HBase。
通过将数据存储在HDFS中,HBase提供可靠性,可用性,无缝可扩展性,高性能等 - 所有这些都在具有成本效益的分布式服务器上!
HBase有一个多维分类地图
从基础开始,地图(也称为关联数组)是一个键值对的抽象集合,其中键是唯一的。
这种定义对于我们对HBase的理解至关重要,因为HBase数据模型通常以不同的方式描述 - 通常不完全是面向列的商店。
HBase是底部的键值数据存储,其中每个键是唯一的 - 意味着它在HBase数据存储中最多显示。
此外,地图被排序和多维。
密钥存储在HBASE中并按字节词汇表排序。
每个值都可以具有多个版本,这使得数据模型多维。
默认情况下,数据版本使用时间戳实现。