一 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,我们都是依照“某人在某时做了标题为某某的事情”,可是同一时候一般我们也会预留一下keyword,比方有时候feed或许须要url,feed须要image属性等,这样来说。feed本身的属性是不确定的。因此假设採用传统的关系数据库将很麻烦。况且关系数据库会造成一些为null的单元浪费,而列存储就不会出现这个问题。在Hbase里,假设每个column 单元没有值,那么是占用空间的。

以下我们通过两张图来形象的表示这样的关系:

id=10413&oid=23127383" target="_blank" style="text-decoration:none; color:rgb(102,102,102); font-weight:lighter">

上图是传统的RDBMS设计的Feed表,我们能够看出feed有多少列是固定的,不能添加,而且为null的列浪费了空间。

可是我们再看看下图。下图为Hbase,Cassandra,Bigtable的数据模型图,从下图能够看出,Feed表的列能够动态的添加。而且为空的列是不存储的,这就大大节约了空间,关键是Feed这东西随着系统的执行。各种各样的Feed会出现,我们事先没办法预測有多少种Feed,那么我们也就没有办法确定Feed表有多少列,因此Hbase,Cassandra,Bigtable的基于列存储的数据模型就很适合此场景。讲到这里,採用Hbase的这种方式。另一个很重要的优点就是Feed会自己主动切分。当Feed表中的数据超过某一个阀值以后。Hbase会自己主动为我们切分数据,这种话,查询就具有了伸缩性。而再加上Hbase的弱事务性的特性,对Hbase的写入操作也将变得很快。

id=10414&oid=23127383" border="0" alt="" style="border:0px">

上面说了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的基本概念的更多相关文章

  1. Hbase学习之概念与原理

    一.hbase与列式存储 hbase最早起源于谷歌的一篇BigTable的论文,它是由java编写的.开源的一个nosql数据库,同时它也是一个列式存储的.支持分布式(基于hdfs)的数据库.什么是列 ...

  2. [How to] 使用HBase协处理器---基本概念和regionObserver的简单实现

    1. 简介 对于HBase的协处理器概念可由其官方博文了解:https://blogs.apache.org/hbase/entry/coprocessor_introduction 总体来说其包含两 ...

  3. HBase 协处理器---基本概念和regionObserver的简单实现

    1. 简介 对于HBase的协处理器概念可由其官方博文了解:https://blogs.apache.org/hbase/entry/coprocessor_introduction 总体来说其包含两 ...

  4. Hadoop Hive HBase Spark Storm概念解释

    HadoopHadoop是什么? 答:一个分布式系统基础架构. Hadoop解决了什么问题? 答:解决了大数据(大到一台计算机无法进行存储,一台计算机无法在要求的时间内进行处理)的可靠存储(HDFS) ...

  5. HBase学习笔记——概念及原理

    1.什么是HBase HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. ...

  6. hbase概念

    1. 概述(扯淡~) HBase是一帮家伙看了Google发布的一片名为“BigTable”的论文以后,犹如醍醐灌顶,进而“山寨”出来的一套系统. 由此可见: 1. 几乎所有的HBase中的理念,都可 ...

  7. HBase概念及表格设计

    HBase概念及表格设计 1. 概述(扯淡~) HBase是一帮家伙看了Google发布的一片名为“BigTable”的论文以后,犹如醍醐灌顶,进而“山寨”出来的一套系统. 由此可见: 1. 几乎所有 ...

  8. HBase 简介(强烈推荐看)

    本博文的主要内容有: .HBase定义 .HBase 的特点 .HBase 访问接口  .HBase 存储结构 .HBase设计 .HBase安装 .HBase shell操作  .输入 help 可 ...

  9. 最近学习了HBase

    HBase是什么 最近学习了HBase,正常来说写这篇文章,应该从DB有什么缺点,HBase如何弥补DB的缺点开始讲会更有体感,但是本文这些暂时不讲,只讲HBase,把HBase相关原理和使用讲清楚, ...

随机推荐

  1. asp.net将数据库中的数据赋给DropDownList

    当你选定一项进行其他操作时会重新绑定dropdownlist,这样会重新回到第一项,在page_load里加上判断if(!IsPostBack){'这里是你需要绑定dropdownlist的代码'}. ...

  2. [jobdu]二维数组中的查找

    http://ac.jobdu.com/problem.php?pid=1384 基本思路很简单,从最右上角找起. 九度的OJ做得还是不太行啊.必须要int main()才行,这道题时间卡得太紧,用c ...

  3. gif录制工具

    gif录制工具 This tool allows you to record a selected area of your screen and save it as a Gif. http://s ...

  4. 转:Web service是什么?

    作者: 阮一峰 我认为,下一代互联网软件将建立在Web service(也就是"云")的基础上. 我把学习笔记和学习心得,放到网志上,欢迎指正. 今天先写一个最基本的问题,Web ...

  5. Oracle系列之包

    涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等 建包 -- 建立包头 create package mypkg is procedure set_ctx(p_name in varc ...

  6. JDK/bin目录下的不同exe文件的用途(转)

    新安装完JDk 大家是否发现安装目录的bin文件夹有很多exe文件 下面就为大家讲解不同exe文件的用途 javac:Java编译器,将Java源代码换成字节代 java:Java解释器,直接从类文件 ...

  7. poj 1324 状态广搜

    其实就是我们经常玩的贪吃蛇. 不过现在我们优先蛇的头的话,要用一个巧妙的哈希来把蛇的身体表达出来,那么就可以用一个4进制的数字来表示,蛇的身体长度最多不超过8,所以最多是2^7种状态. #includ ...

  8. 【转】Windows7打造全方位护眼系统

    原文网址:http://www.cnblogs.com/duboway/archive/2013/04/20/3033257.html 电脑屏幕: Win7和Vista系统设置如下: 第一步:桌面空白 ...

  9. 使用Chrome测试页面响应性

    如今我们都知道 响应式 的意思.作为开发者,我们常常开发一些响应式的应用.有很多工具可以帮助我们完成这个目的.某些人甚至使用付费扩展.然而,我用了一个东西,它就是 Google Chrome 浏览器. ...

  10. CodeForces 362B Petya and Staircases

    题意:一个小男孩要上楼梯,他一次可以走1个台阶或2个台阶或3个台阶,但是有一些台阶是脏的,他不想走在脏台阶上.一共有n个台阶和m个脏台阶,他最开始在第1个台阶上,要走到第n个台阶.问小男孩能不能不踩到 ...