备注:本文为《HBase入门教程》第1文,部分内容来源于互联网。

HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,所以通常人们认为HBase是基于列的而不是基于行的存储模式。列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。如下图所示:

hbase1.png

从上图可以很清楚地看到,行式存储下某个record的不同column都是放在一起的,但列式存储下都被分开保存了。将column存在不同的file之后,列数据库通常还要压缩这些column,这是因为同一个column中的数据有比较大的相似性,具备压缩的可能性。

HBase本质

行式存储更像一个Java Bean,所有字段都提前定义好,且不能改变;列式存储更像一个Map,不必提前定义,随意往里添加Key-Value。在HBase中,Key-Value是最小的存储单元。每一个Key-Value对应一个列,Value对应于一个列的列值。

HBase本质上是一种强化版的KV数据库。通常的KV数据库存储的数据形式是——<key, value, version>。

HBase的创新点包含在key中,HBase的数据形式是这样的——<[row key, column family: column key], value, version>。也就是说HBase在key中添加了column family等概念,使得key包括了row key与column key两个部分。

Rowkey介绍

Rowkey作用:而且HBase是根据Rowkey来进行检索的(索引),系统通过找到某个Rowkey所在的Region,然后将查询数据的请求路由到该Region获取数据。所以设计Rowkey就决定了未来你的查询性能

Column Family列簇介绍

Hbase虽然弱化了结构,但并不等于放任不管。传统关系型数据库在插入数据前表结构(即所有列和列的数据类型)已经是严格确定的。 Hbase的表在放入数据前也有需要确定下来的东西,那就是Column Family(常译为列族/列簇)。单词Family就是家庭的意思,所以列族就是列的家庭。那么列自然就是家庭成员了,通常家庭成员都有多个,所以一个列族包含多个列。 一个家庭的成员之间具有血缘关系,所以一个列族的多个列之间通常也具有某种关系,比如相似或同种类别。所以列族可以看作是某种分类(归类)。

站长点评1:各位徒弟们,哈希这个数据结构,底层是数组。深刻掌握数组的方面方面必将让自己的编程境界获得极大的提升。
站长点评2:各位徒弟们,学习不能太死板,不能就事论事,否则学到的只是散落一地的知识碎渣,不能融会贯通气吞山河。以hbase为例,虽然学习的是hbase这个东西,但是沉淀到脑子里面可以把它归入哈希,要大胆的展开你们的想象和联想能力。

标签: none

[2024年]-[红黑树技术联盟介绍]-[成员故事]


[2024年]-[JavaOffer]-[训练营]


添加新评论