传统的数据库是关系型的,且是按行来存储的。
因为这里的行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有。
为了与传统的区别,新型数据库叫做非关系型数据库,是按列来存储的。
不会造成空间浪费。
HBase的目标是管理超级大表-数十亿行 * 数百万列。 Hbase是一个开源的、分布式的、带版本的、非关系型数据库,模仿谷歌的BigTable。
Hbase底层使用HDFS。
Hbase的表在放入数据前需要确定下来的东西,那就是Column Family(常译为列族/列簇)。
单词Family就是家庭的意思,所以列族就是列的家庭。那么列自然就是家庭成员了,通常家庭成员都有多个,所以一个列族包含多个列。
一个家庭的成员之间具有血缘关系,所以一个列族的多个列之间通常也具有某种关系,比如相似或同种类别。所以列族可以看作是某种分类(归类)。
人员基本信息,教育经历信息,工作经历信息,这三个类别其实就相当于三个列族。
每个类别里都会有具体的信息,比如人员基本信息里有姓名、电话、出生年月等,它们就相当于一个个标识符,在Hbase中叫做列修饰符。
在Hbase中一个列族和一个列修饰符组合起来才叫一个列,使用冒号(:)分割,列族:列修饰符
在传统数据库中每一行的唯一标识符叫做主键,在Hbase中叫做row key(行键)。
数据在进入Hbase时都会被打上一个时间戳,这个时间戳可以作为版本号来使用。
在t1时间我存入一个人的基本信息,之后发现姓名错了,在t2时间又更新了姓名,此时并不会去更新原来的那条数据,而是又插入了一条新数据且打上新的时间戳。
此时去查询获取的是新数据,仿佛是更新了,但其实只是默认返回了最新版本的数据而已。
一个行键、列族、列修饰符、数据和时间戳组合起来叫做一个单元格(Cell)。
一个行键、一到多列(包括数据)组合起来叫做一行(Row)。下图中所有1001的数据合起来相当于Hbase中的一行,1002的相当于另一行:
在Hbase中,只要确定了列族(具体的列不用管),表(Table)就确定了。
未完待续。。。。。。