文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一文了解 Hbase 列式数据库

2024-12-01 18:35

关注

HBase 是 Google Bigtable 的开源实现,不同之处在于:Google Bigtable 使用 GFS 作为其文件存储系统, HBase 利用 Hadoop HDFS 作为其文件存储系统;Google Bigtable 利用 Chubby 作为协同服务, HBASE 利用 Zookeeper 作为协同服务。

Hbase 是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写操作,同时 Hbase 还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性。

2. Hbase 的数据模型是什么样的?

HBase 的数据存储模型当中包含以下几个概念:

表 1 逻辑存储视图

表 2 物理存储视图

HBase 的逻辑存储视图由行键、时间戳、列族组成一个类似二维表一样的结构,但是在实际存储的时候,数据库存储的数据是以列族为单位进行存储的,是完全将行数据按列族的方式进行分列。

3. Hbase 的存储架构是什么样的?

图 1 Hbase 物理存储架构

Region 是 HBase 中分布式存储和负载均衡的最小单元,不同的 Region 分布到不同的 RegionServer 上,如图 Table1 、 Table2 中均有多个 Region ,这些 Region 分布在不同的 RegionServer 中。Region 虽然是分布式分布式存储的最小单元,但并不是存储的最小单元, Store 是存储的最小单元。Region 由一个或者多个 Store 组成,每个 Store 会保存一个 Column Family ;每个 Store 又由一个 MemStore 或 0 至多个 Hfile 组成;MemStore 存储在内存中, HFile 存储在 HDFS 中。

Hbase 在数据存储的过程当中,涉及到的物理对象分为如下:

HFiles: 从 MemStore Flush 出来的文件,本身是持久化的,存储于 HDFS 的 DataNode 之中,每次 Flush 生成一个新的 HFile 文件,文件包含有序的键值对序列。

4. Hbase 是如何进行数据的读写?

图 2 Hbase 读写原理图

数据写入流程(如左图):

数据读出流程(如右图):

5. Hbase 的存储引擎是什么类型的?

首先需要确定的是 Hbase 的存储引擎是 LSM-Tree (可以参考之前的文章:DB 存储引擎知识系列之三:LSM-Tree 存储引擎详细分解)。

通过之前文章对 LSM-Tree 的介绍,我们知道 LSM-Tree 相比较 B+Tree 而言,最大的特点就是在于通过牺牲部分读性能,利用分层合并的思想,将小树合并为大树,将无序数据合并为有序数据,然后统一刷入磁盘,从而大大提高了写的性能。那么 HBase 套用到 LSM 中, Memstore 就是 LSM 当中的 Memtable ,也就是 C0 层的小树写入, HFiles 就是 LSM 当中的 SSTables ,也就是 Cn 层的合并之后的树的顺序写入。

除此之外 Hbase 在实现 Hbase 的时候,其实还是有自己独到的地方:

图示是 HFile 的数据结构,主要包含四个部分:数据块、头信息、索引信息、地址信息。索引就是 HFile 内置的一个 B+ 树索引,当 RegionServer 启动后并且 HFile 被打开的时候,这个索引会被加载到 Block Cache 即内存里;KeyValues 存储在增长中的队列中的数据块里,数据块可以指定大小,默认 64k ,数据块越大,顺序检索能力越强;数据块越小,随机读写能力越强,需要权衡。

6. Hbase 与传统的 RDBMS 有什么区别?

表 4 列式数据库与关系型数据库的区别

介绍了很多 HBase 与 RDBMS 的区别。那么什么时候最需要 HBase ,或者说 HBase 是否可以替代原有的 RDBMS ?对于这个问题,我们必须时刻谨记 HBase 并不适合所有场景,其最终目标并不是完全替代 RDBMS ,而是对 RDBMS 的一个重要补充。当需要考量 HBase 作为一个备选选型产品的时候,我们需要考虑以下几个关键问题。

7. Hbase 如何解决热点的问题?

HBase 中的行是按照 Row-Key 的字典顺序排序的,这种设计优化了扫描操作,可以将相关的行存放在临近位置,便于扫描。然而糟糕的 Row-Key 设计是热点的源头。一旦由于 Row-Key 设计与业务场景不相符,大量访问会使热点 region 所在的单个机器超出自身承受能力,引起性能下降甚至不可用,这也会影响同一个 RegionServer 上的其他 region 。

那么如何避免这样的问题发生呢?通常会有以下几种设计思想可供参考:

来源:twt企业IT社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯