HBase简介
Apache Hbase是Hadoop数据库,一个分布式、可扩展、大数据存储。
当你需要随机地实时读写大数据时使用Hbase。它的目标是管理超级大表-数十亿行X数百万列。
Hbase是一个开源的、分布式的、带版本的、非关系型数据库,模仿谷歌的BigTable。BigTable使用Google File System作为分布式数据存储,同理Hbase使用HDFS。
总的来说HBase是一个NoSQL的列式储存的数据库
NoSQL = Not Only SQL,而不是No SQL
HBase基本元素
-
列簇——Column Family
直译的意思就是列组成的家庭,通常理解为对于列的归类
-
列修饰符——Column Qualifier
每一个家庭里面有很多的成员,成员就是列修饰符。列簇和列修饰符的关系就好像类与他的成员变量一样。
-
列——Column
在HBase中,列簇和列修饰符组合起来,才叫做列,形式:”列簇:列修饰符“
-
行键——row key
唯一标识一行
-
时间戳
HBase中数据入库会打上时间戳,可以当作版本号理解。因此,HBase中原来的数据不会抹去,在查询数据时只是返回最新时间戳的罢了
-
单元格——Cell
行键+列族+列修饰符+数据+时间戳
-
行
一个行键、一到多列(包括数据)组合
image
HBase特性
Hbase中,只要确定了列族,表(Table)就确定了
把传统数据库中的表/行/列的概念用在Hbase中不是一个有帮助的类比。相反可以把Hbase的表想象成一个多(两)维Map(Map套Map)。列族是第一维,列修饰符是第二维。
对于数据的CRUD,归根结底就是标识进行定位,取出其中的业务数据。就好像C++,我们顺着指针找到变量,再读取变量中的值。
[标识]+[业务数据]
对比关系型数据库,我们不难发现:
-
关系型数据库
[主键簇]+[业务数据]
-
NoSQL——HBase
[行键+列族+列修饰符+时间戳]+数据
所以列式储存这种方法,实际上是从关系型数据库的行式储存演变而来,命名也有相似之处
例如:行键相同的多列数据组合在一起,叫做一行。列也相当于行式储存的一列。
列式储存相比于行式储存的优势在于对于结构的弱化,使得数据库更加的灵活,既可以灵活的增加/减少属性,也可以节省空白空间(关系型数据库哪怕没有数据位置还是得占着)。列式储存将关系型数据库的列拆分开来,灵活结合,传统关系型数据库操作流程是一行多列。其实就相当于原来关系型数据库的一行,N个属性,拆分成了列式存储的N行(类似于矩阵转置?)弱化结构,更加的灵活。
Reference
[1] 什么是列式存储 | Java3y
网友评论