BigTable的开源实现:HBase

在计算机数据存储领域,一直是关系型数据库(RDBMS)的天下,以至于在传统企业的应用领域,许多应用系统设计都是面向数据库设计,也就是先设计数据库后设计程序,从而导致关系模型绑定对象模型

为了解决关系型数据库无法处理海量数据的不足,于是就有了nosql的概念。

NoSql,主要指非关系的,分布式的,支持海量数据存储的数据库设计模式。而今天要说的,也就是HBase。

简单来说,HBase就是专门用来存储海量数据的。下面来说说HBase的可伸缩架构。

HBase可伸缩架构

HBase做到了可伸缩海量数据储存而设计,实现面向在线业务的实时数据访问延迟。HBase的伸缩性主要依赖其可分裂的HRegion以及可伸缩的分布式文件系统HDFS实现。
在这里插入图片描述

HReigion是HBase负责数据存储的主要单元,应用程序对数据的读写操作都是通过和HRegion通信完成,也就是说,如果一个数据想要存储,就得先找到HRegion然后将读写进行提交,完成存储。

HRegionServer是物理服务器,每个HRegionServer上有多个HRegion。当一个HRegion里面放的数据达到了阈值,就会分裂成两个HRegion,并且在集群中进行 迁移,满足付赞均衡。

每个HRegion中存储一段key值区间为(key1,key2)的数据,并且所有这些信息,HRegionServer配置,地址等等的信息都存储在HMaster总服务器上。并且通过Zookeeper进行负载均衡,启动多个HMaster,只不过选出来一个当老大。

获得数据的流程

应用程序,通过Zookeeper获得主HMaster的地址,输入key值,找到对应的key所在的HRegionServer的地址,然后请求上面的HRegion获取数据。

在这里插入图片描述

数据写入过程也是一样,需要先得到HRegion才能继续操作。HRegion会把数据存储在若干个HFile格式的文件里,这些文件使用HDFS进行存储,并且在整个集群内高可用。

总结

HBase的核心目标是解决海量数据的分布式存储,和Memcached这类分布式缓存的路由算法不同,HBase的做法是按照Key的区域进行分片,所谓的分片,也就是HRegion。应用程序通过HMaster查找分片,得到HRegion所在的服务器HRegionServer,然后和该服务器通信,就得到了数据。

HBase可扩展数据模型

传统的sql为了保证关系运算,所以必须提前设计好数据库里的结构,也就是DDL执行的那些,而HBase做到了可扩展数据结构,也就是不修改表结构也能新增字段,HBase采用列族(ColumnFamily)进行设计。

在这里插入图片描述

这是一个学生信息的基本信息表,表中不同学生的信息都不相同,选修的课程也不同,而且还有很多没下分数的课会填充进来,如果按照传统数据库设计,就很难受了。

而HBase在设计表的时候,只需要指定列族即可,字段只需要写入的时候再说,这样就达到了随意可扩展的数据结构了。

从本质上来说,HBase这种数据结构的设计,实际上就是把字段的名称和字段的值,以key-value的形式存储在HBase。实际写到表的时候,随意指定字段名,所以再多字段也不怕了。

HBase的高性能存储

为了提高数据的写入速度,HBase使用了LSM树,也就是Log结构合并树,数据写入的时候以log方式连续写入,然后异步对磁盘上多个LSM树进行合并。

在这里插入图片描述

LSM树可以看做是一个N阶合并树,数据写操作(rud,没有create)都在内存中进行,并且创造一个新纪录。这些数据在内存中仍然是一棵排序树,当数据量超出阈值,就会和最新的排序树合并,当这棵排序树的数据量也超过阈值,会和下一级的排序树合并,并且覆盖旧数据。

总的来说,使用LSM树存储的方式,让数据可以通过连续写磁盘的方式去保存,提升了很多的性能。

但是,如果突然宕机,就需要一个操作日志来记录数据,当这些数据与集群数据合并的时候,这段时间的部分数据是访问不到的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值