【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,我们都是依照“某人在某时做了标题为某某的事情”,可是同一时候一般我们也会预留一下keyword,比方有时候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的写入操作也将变得很快。
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的基本概念的更多相关文章
- Hbase学习之概念与原理
一.hbase与列式存储 hbase最早起源于谷歌的一篇BigTable的论文,它是由java编写的.开源的一个nosql数据库,同时它也是一个列式存储的.支持分布式(基于hdfs)的数据库.什么是列 ...
- [How to] 使用HBase协处理器---基本概念和regionObserver的简单实现
1. 简介 对于HBase的协处理器概念可由其官方博文了解:https://blogs.apache.org/hbase/entry/coprocessor_introduction 总体来说其包含两 ...
- HBase 协处理器---基本概念和regionObserver的简单实现
1. 简介 对于HBase的协处理器概念可由其官方博文了解:https://blogs.apache.org/hbase/entry/coprocessor_introduction 总体来说其包含两 ...
- Hadoop Hive HBase Spark Storm概念解释
HadoopHadoop是什么? 答:一个分布式系统基础架构. Hadoop解决了什么问题? 答:解决了大数据(大到一台计算机无法进行存储,一台计算机无法在要求的时间内进行处理)的可靠存储(HDFS) ...
- HBase学习笔记——概念及原理
1.什么是HBase HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. ...
- hbase概念
1. 概述(扯淡~) HBase是一帮家伙看了Google发布的一片名为“BigTable”的论文以后,犹如醍醐灌顶,进而“山寨”出来的一套系统. 由此可见: 1. 几乎所有的HBase中的理念,都可 ...
- HBase概念及表格设计
HBase概念及表格设计 1. 概述(扯淡~) HBase是一帮家伙看了Google发布的一片名为“BigTable”的论文以后,犹如醍醐灌顶,进而“山寨”出来的一套系统. 由此可见: 1. 几乎所有 ...
- HBase 简介(强烈推荐看)
本博文的主要内容有: .HBase定义 .HBase 的特点 .HBase 访问接口 .HBase 存储结构 .HBase设计 .HBase安装 .HBase shell操作 .输入 help 可 ...
- 最近学习了HBase
HBase是什么 最近学习了HBase,正常来说写这篇文章,应该从DB有什么缺点,HBase如何弥补DB的缺点开始讲会更有体感,但是本文这些暂时不讲,只讲HBase,把HBase相关原理和使用讲清楚, ...
随机推荐
- 解决Ubuntu root账户的问题
问题的提出:在Linux环境下,许多操作需要有管理员权限才能进行.如果没有root权限,就连基本的文件拷贝操作都只能在用户文件夹下进行,而对于Ubuntu系统,安装时是没有设定root帐号的,那么怎样 ...
- SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-011-注入AspectJ Aspect
一. 1. package concert; public interface CriticismEngine { public String getCriticism(); } 2. package ...
- ANDROID_MARS学习笔记_S01原始版_019_SERVICE之Transact
一.代码1.xml(1)activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/ ...
- Altium Designer 特定网络取消 remove loops
在使用Altium Designer时,在PCB Editor 里面可以设定是否需要Automatically remove Loops,但是这个设置是全局的,在设计时难免会遇到对大部分网络是需要删除 ...
- 使用 jQuery.i18n.properties 实现 Web 前端的国际化
jQuery.i18n.properties 简介 在介绍 jQuery.i18n.properties 之前,我们先来看一下什么是国际化.国际化英文单词为:Internationalization, ...
- 【HDOJ】1669 Jamie's Contact Groups
二分+二分图多重匹配. /* 1669 */ #include <iostream> #include <string> #include <map> #inclu ...
- Colored Sticks (字典树哈希+并查集+欧拉路)
Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 27704 Accepted: 7336 Description You ...
- VMwareWorkstation10安装OS_X_Mavericks10.9.2图文详细教程
一.VMware的环境配置... 1.1安装VMware的MAC OS补丁... 1.2建立虚拟机... 二.OS_X_Mavericks的安装及安装驱动... ...
- eight - zoj 1217 poj 1077
学习了多位大牛的方法,看看到底能把时耗降到多少? A* // zojfulltest: 30000ms # include <stdio.h> # include <ctype.h& ...
- Android 所有颜色代码
colors.xml <?xml version="1.0" encoding="utf-8" ?> <resources> <c ...