HBase列式存储

行式存储

行式存储是以行为单位存储,一行中的所有列代表一条记录。经常会出现一行数据中有多个列为空,行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有。

列式存储

新型数据库叫做非关系型数据库,是按列来存储的。原来的六列数据是在一行,所以共用一个主键(即张三)。现在变成了六行,每行都需要一个主键,不然不知道这行数据是谁的,所以原来的主键(即张三)重复了六次。由于原来的列变为了现在的行,如果有需要就加一行,没需要就不加,不会造成空间浪费。

行列对比

行式存储倾向于结构固定,列式存储倾向于结构弱化。行式存储存的都是业务数据,列式存储除了业务数据外,还要存储列名。行式存储更像一个Java Bean,所有字段都提前定义好,且不能改变;列式存储更像一个Map,不提前定义,随意往里添加key/value。

HBase

HBase的目标是管理超级大表-数十亿行 * 数百万列。 Hbase是一个开源的、分布式的、带版本的、非关系型数据库,模仿谷歌的BigTable。
Hbase虽然弱化了结构,但并不等于放任不管。传统关系型数据库在插入数据前表结构(即所有列和列的数据类型)已经是严格确定的。 Hbase的表在放入数据前也有需要确定下来的东西,那就是Column Family(常译为列族/列簇)。
一个非常常见的例子,去面试的时候,一般前台都会让填一张表,通常信息很多,每个公司又不尽相同。但大致可以分三类:人员基本信息,教育经历信息,工作经历信息,这三个类别其实就相当于三个列族。
每个类别里都会有具体的信息,比如人员基本信息里有姓名、电话、出生年月等,它们就相当于一个个标识符(变量名),在Hbase中叫做Column Qualifier(列修饰符)。列修饰符位于列族里面用来标识一条条数据。
在传统数据库中每一行的唯一标识符叫做主键,在Hbase中叫做row key(行键)。
在Hbase中一个列族(Column Family)和一个列修饰符(Column Qualifier)组合起来才叫一个列(Column),使用冒号(:)分割,列族:列修饰符。
数据在进入Hbase时都会被打上一个时间戳,这个时间戳可以作为版本号来使用。 在t1时间我存入一个人的基本信息,之后发现姓名错了,在t2时间又更新了姓名,此时并不会去更新原来的那条数据,而是又插入了一条新数据且打上新的时间戳。
一个行键、列族、列修饰符、数据和时间戳组合起来叫做一个单元格(Cell)。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值