HBase数据库结构、存储理解

HBase数据库的结构对于初学者来说一直是一个比较难理解的问题,我也一样。
最近做了HBase的项目,对HBase存储和结构的理解又有了新的提升。现在我可以理解HBase设计巧妙的地方,写一篇文章记录一下,希望对读者也有所帮助

你是一名大公司的数据管理员,你使用的是关系型数据库(下文以MySQL举例)存储公司的员工信息。最近公司新来了100名员工,你需要把公司员工的数据录入数据库中,可是拿到表格的时候你楞了一下,因为人事部门给你的表格似乎不太OK:原先的数据库中,老员工的信息只有(工号、姓名、入职年份、学历、工资、联系方式、职位)这7个列
在这里插入图片描述
但是新员工的表格中却多出了(年龄、住房补贴、实习经历、五险一金)4个列。
在这里插入图片描述
老板希望你给数据库加入这4个列,并将(老员工福利)这一信息加在老员工的个人信息上面。你需要在MySQL中增加这些列,并且有个非常头疼的问题,新员工不需要(老员工福利)这一信息,而老员工也似乎不需要(实习经历)这样的信息
在这里插入图片描述

你觉得可以用null去填充,但是对于老员工来说,实习经历就是没有用的一列;对新员工来说,老员工福利是需要时间才能有的列。并且如果以后老板还要加入新的列,你又要去添加,这是一个复杂繁琐的过程。

你很需要一种数据库,可以不受行列对应的限制;一行数据,你想让它有几列,它就有几列,你想加列的时候,你就加入,当你想删除的时候,你可以直接把该列删除却又不影响别的数据;你可以忽视结构化的表格设计。

那么这个时候,谷歌爸爸带着他提出的HBase来了:一个弱化了行列关系的数据库、一个可以进行高吞吐又慢的不明显的数据库、一个非关系型数据库、一个适合于非结构化数据存储的数据库。

如果你对这方面的知识还不够了解,建议先看一下我之前的文章,附上链接:HBase基础知识

我们先来看一下HBase存储下该表的结构
在这里插入图片描述

可以看到,每一条数据都是带着他的标签,我们再来看一下hbase shell中数据的样子

一个列族下面可以有很多个列名,一个表中可以有很多列族,当然列族越少越好,多了会影响效率。包括时间戳,如果有疑问的话可以阅读我之前写的文章HBase基础知识

这样对应到我们的表格就很容易理解了
在这里插入图片描述
到这里会有人问:行键去哪里了?

行键需要我们自己去确定,并且需要注意的是:行键是唯一的!

可能你的值会有重复,但行键不行,他就像一个人的身份证一样,不能出现重复,他决定了该条数据的唯一性。对应到这张表格来说,我们就应该选择工号作为我们的行键,因为工号一个人只有一个并且不会出现重复。
在这里插入图片描述
这样的话,当我需要插入数据,就不用考虑任何的行列对应,你有100列或是1列都不影响我的存储,因为我不需要考虑存入的数据行列是否匹配大环境,我自成一派。就像docker的容器一样,互不影响。只需要知道你的行键,我就能拿到你的所有数据,或者是知道你的值,返回该值所在的行。
在这里插入图片描述


这样的例子和解释应该可以帮助你更好的理解

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EEE1even

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值