电子说
无论是 NoSQL,还是大数据领域,HBase 都是非常"炙热"的一门数据库。本文将对 HBase 做一些基础性的介绍,旨在入门。
一、简介
HBase 是一个开源的、面向列的非关系型分布式数据库,目前是Hadoop体系中非常关键的一部分。在最初,HBase是基于谷歌的 BigTable 原型实现的,许多技术来自于Fay Chang在2006年所撰写的Google论文"BigTable"。与 BigTable基于Google文件系统(File System)一样,HBase则是基于HDFS(Hadoop的分布式文件系统)之上而开发的。
HBase 采用 Java 语言实现,在其内部实现了BigTable论文提到的一些压缩算法、内存操作和布隆过滤器等,这些能力使得HBase 在海量数据存储、高性能读写场景中得到了大量应用,如 Facebook 在 2010年11 月开始便一直选用 HBase来作为消息平台的存储层技术。HBase 以 Apache License Version 2.0开源,这是一种对商业应用友好的协议,同时该项目当前也是Apache软件基金会的顶级项目之一。
有什么特性
基于列式存储模型,对于数据实现了高度压缩,节省存储成本
采用 LSM 机制而不是B(+)树,这使得HBase非常适合海量数据实时写入的场景
高可靠,一个数据会包含多个副本(默认是3副本),这得益于HDFS的复制能力,由RegionServer提供自动故障转移的功能
高扩展,支持分片扩展能力(基于Region),可实现自动、数据均衡
强一致性读写,数据的读写都针对主Region上进行,属于CP型的系统
易操作,HBase提供了Java API、RestAPI/Thrift API等接口
查询优化,采用Block Cache 和 布隆过滤器来支持海量数据的快速查找
与RDBMS的区别
对于传统 RDBMS 来说,支持 ACID 事务是数据库的基本能力,而 HBase 则使用行级锁来保证写操作的原子性,但是不支持多行写操作的事务性,这主要是从灵活性和扩展性上做出的权衡。
ACID 要素包含 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)以及持久性(Durability)
总体来说, HBase 与传统关系数据库的区别,如下表所示:
二、数据模型
下面,我们以关系型数据库的一个数据表来演示 HBase 的不同之处。
先来看下面这张表:
这里记录的是一些家庭设备上报的状态数据(DeviceState),其中包括设备名、状态、时间戳这些字段。
在 HBase 中,数据是按照列族(Column Family,简称CF)来存储的,也就是说对于不同的列会被分开存储到不同的文件。那么对于上面的状态数据表来说,在HBase中会被存储为两份:
列族1. 设备名
列族2. 状态
这里Row-key是唯一定位数据行的ID字段,而Row-key 加上 CF、Column-Key,再加上一个时间戳才可以定位到一个单元格数据。其中时间戳用来表示数据行的版本, 在HBase中默认会有 3 个时间戳的版本数据,这意味着对同一条数据(同一个Rowkey关联的数据)进行写入时,最多可以保存3个版本。
在查询某一行的数据时,HBase需要同时从两个列族(文件)中进行查找,最终将结果合并后返回给客户端。 由此可见如果列族太多,则会影响读取的性能,在设计时就需要做一些权衡。
由此可见,HBase的使用方式与关系型数据库是大不相同的,在使用 HBase 时需要抛弃许多关系型数据库的思维及做法,比如强类型、二级索引、表连接、触发器等等。
然而 HBase 的灵活性及高度可伸缩性却是传统 RDBMS 无法比拟的。
全部0条评论
快来发表一下你的评论吧 !