【DB】HBase的基本概念

一 Hbase是个啥东东?

在说Hase是个啥家伙之前,首先我们来看看两个概念,面向行存储和面向列存储。面向行存储,我相信大伙儿应该都清楚,我们熟悉的RDBMS就是此种类型的,面向行存储的数据库主要适合于事务性要求严格场合,或者说面向行存储的存储系统适合OLTP,但是根据CAP理论,传统的RDBMS,为了实现强一致性,通过严格的ACID事务来进行同步,这就造成了系统的可用性和伸缩性方面大大折扣,而目前的很多NoSQL产品,包括Hbase,它们都是一种最终一致性的系统,它们为了高的可用性牺牲了一部分的一致性。好像,我上面说了面向列存储,那么到底什么是面向列存储呢?Hbase,Casandra,Bigtable都属于面向列存储的分布式存储系统。看到这里,如果您不明白Hbase是个啥东东,不要紧,我再总结一下下:

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

二 Hbase数据模型

HBase,Cassandra的数据模型非常类似,他们的思想都是来源于Google的Bigtable,因此这三者的数据模型非常类似,唯一不同的就是Cassandra具有Super cloumn family的概念,而Hbase目前我没发现。好了,废话少说,我们来看看Hbase的数据模型到底是个啥东东。

在Hbase里面有以下两个主要的概念,Row key,Column Family,我们首先来看看Column family,Column family中文又名“列族”,Column family是在系统启动之前预先定义好的,每一个Column Family都可以根据“限定符”有多个column.下面我们来举个例子就会非常的清晰了。

假如系统中有一个User表,如果按照传统的RDBMS的话,User表中的列是固定的,比如schema 定义了name,age,sex等属性,User的属性是不能动态增加的。但是如果采用列存储系统,比如Hbase,那么我们可以定义User表,然后定义info 列族,User的数据可以分为:info:name = zhangsan,info:age=30,info:sex=male等,如果后来你又想增加另外的属性,这样很方便只需要info:newProperty就可以了。

也许前面的这个例子还不够清晰,我们再举个例子来解释一下,熟悉SNS的朋友,应该都知道有好友Feed,一般设计Feed,我们都是按照“某人在某时做了标题为某某的事情”,但是同时一般我们也会预留一下关键字,比如有时候feed也许需要url,feed需要image属性等,这样来说,feed本身的属性是不确定的,因此如果采用传统的关系数据库将非常麻烦,况且关系数据库会造成一些为null的单元浪费,而列存储就不会出现这个问题,在Hbase里,如果每一个column 单元没有值,那么是占用空间的。下面我们通过两张图来形象的表示这种关系:

上图是传统的RDBMS设计的Feed表,我们可以看出feed有多少列是固定的,不能增加,并且为null的列浪费了空间。但是我们再看看下图,下图为Hbase,Cassandra,Bigtable的数据模型图,从下图可以看出,Feed表的列可以动态的增加,并且为空的列是不存储的,这就大大节约了空间,关键是Feed这东西随着系统的运行,各种各样的Feed会出现,我们事先没办法预测有多少种Feed,那么我们也就没有办法确定Feed表有多少列,因此Hbase,Cassandra,Bigtable的基于列存储的数据模型就非常适合此场景。说到这里,采用Hbase的这种方式,还有一个非常重要的好处就是Feed会自动切分,当Feed表中的数据超过某一个阀值以后,Hbase会自动为我们切分数据,这样的话,查询就具有了伸缩性,而再加上Hbase的弱事务性的特性,对Hbase的写入操作也将变得非常快。

上面说了Column family,那么我之前说的Row key是啥东东,其实你可以理解row key为RDBMS中的某一个行的主键,但是因为Hbase不支持条件查询以及Order by等查询,因此Row key的设计就要根据你系统的查询需求来设计了额。我还拿刚才那个Feed的列子来说,我们一般是查询某个人最新的一些Feed,因此我们Feed的Row key可以有以下三个部分构成<userId><timestamp><feedId>,这样以来当我们要查询某个人的最进的Feed就可以指定Start Rowkey为<userId><0><0>,End
Rowkey为<userId><Long.MAX_VALUE><Long.MAX_VALUE>来查询了,同时因为Hbase中的记录是按照rowkey来排序的,这样就使得查询变得非常快。

三 Hbase的优缺点

1 列的可以动态增加,并且列为空就不存储数据,节省存储空间.

2 Hbase自动切分数据,使得数据存储自动具有水平scalability.

3 Hbase可以提供高并发读写操作的支持

Hbase的缺点:

1 不能支持条件查询,只支持按照Row key来查询.

2 暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉.

关于数据库伸缩性的一点资料:

http://www.jurriaanpersyn.com/archives/2009/02/12/database-sharding-at-netlog-with-mysql-and-php/

http://adam.blog.heroku.com/past/2009/7/6/sql_databases_dont_scale/

【DB】HBase的基本概念

时间: 2024-10-13 23:04:50

【DB】HBase的基本概念的相关文章

5.Hbase特点和概念

hbase: 分布式--表的逻辑管理,表数据的物理存储 基于HDFS存储 可以通过HBASE自己的API来实现表数据的访问和分析 也可以通过编写MAPREDUCE程序来实现表数据的访问和分析 HBASE: 容量可以线性扩展,理论上没有上限 表结构: 创建表的时候只需要指定表名,列族名就可以了 表中的每一行record,字段数量和类型都可以不一样 每一行record中的数据是以key-value形式存储 每一个value可以保存多个版本,查询时默认返回最新版本 表的物理存储是"列式存储"

HBase的基本概念

HBase: 被称为NoSQL数据库.它提供了键值API,尽管有些变化,与其他键值数据库有些不同.它承诺强一致性,所以客户端能够在写入后马上看到数据.HBase运行在多个节点组成的集群上,而不是单台机器.它对客户端隐藏了这些细节.你的应用代码不需要知道它在访问1个还是100个节点,对每个人来说事情变得简单了.HBase被设计用来处理TB到PB级数据,它为这种场景做了优化.它是Hadoop生态系统的一部分,依靠Hadoop其他组件提供的重要功能,例如数据冗余和批处理. HBase已经是Apache

HBase介绍(2)---数据存储结构

在本文中的HBase术语:基于列:column-oriented行:row列组:column families列:column单元:cell 理解HBase(一个开源的Google的BigTable实际应用)最大的困难是HBase的数据结构概念究竟是什么?首先HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式. Google's BigTable论文 清楚地解释了什么是BigTable:Bigtable是一个疏松的分布式的

[转载] HBase入门

转载地址:https://dxer.github.io/2016/03/18/hbase/ HBase一些基本概念 1.Row key 行主键,在对HBase进行查询时候只能依靠Row key,HBase不支持条件查询等类似于一些主流数据库的查询方式,读取记录只能依赖行主键以及进行全局扫面,可以将行主键想象成主流数据库查询过程中用到的主键(例如,id). 2.Column Family 列族,可以将列族想象成日常主流数据库中的表结构的所有列的一个大管家,列族中存储了所有列的名称,整个表包括多少列

HBase底层存储原理——我靠,和cassandra本质上没有区别啊!都是kv 列存储,只是一个是p2p另一个是集中式而已!

理解HBase(一个开源的Google的BigTable实际应用)最大的困难是HBase的数据结构概念究竟是什么?首先HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式. Google's BigTable论文 清楚地解释了什么是BigTable: Bigtable是一个疏松的分布式的持久的多维排序的map,这个map被行键,列键,和时间戳索引.每一个值都是连续的byte数组.(A Bigtable is a sparse

hbase安装部署(二)

一.Hbase基础 1.概念 Hbase是一个在HDFS上开发的面向列分布式数据库,用于实时地随机访问超大规模数据集,它是一个面向列族的存储器.由于调优和存储都是在列族这个层次上进行,最好所有列族的成员都有相同的"访问模式"和大小特征 2.区域 hbase自动把表水平划分"区域"(region). 每个区域由表中行的子集构.每个区域由它所属于表,它所包含的第一行及其最后一行(不包括这行)来表示 区域是在hbase集群上分布数据最小单位.用这种方式,一个因为太大而无法

HBase之简介

(一)HBase之简介 * 概念 * HBase是一个高可靠性.高性能.面向列.可伸缩.支持版本控制.稀疏的.多维度的和排序的分布式数据库. * 高可靠性: * (1): 在数据的写入过程中,数据首先会写到预写日志WAL(write ahead log)中,再写到memstore(内存)中,一旦                         HRegionServer宕机,可以回滚WAL,重新写入数据:         * (2):数据存储时,一般是用Hadoop的hdfs作为底层存储,可以设

(一)HBase之简介

(一)HBase之简介 * 概念 * HBase是一个高可靠性.高性能.面向列.可伸缩.支持版本控制.稀疏的.多维度的和排序的分布式数据库. * 高可靠性: * (1): 在数据的写入过程中,数据首先会写到预写日志WAL(write ahead log)中,再写到memstore(内存)中,一旦                          HRegionServer宕机,可以回滚WAL,重新写入数据:          * (2):数据存储时,一般是用Hadoop的hdfs作为底层存储,可

windows 中使用hbase 异常:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

平时一般是在windows环境下进行开发,在windows 环境下操作hbase可能会出现异常(java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.),以前也遇到过这个问题,今天又有小伙伴遇到这个问题,就顺带记一笔,异常信息如下: 2016-05-23 17:02:13,551 WARN [org.apache.hadoop.util.NativeCodeLoa