`
samuschen
  • 浏览: 405709 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Hbase和RDBMS的区别

阅读更多

转自http://www.jdon.com/jivejdon/thread/38244

最近因为项目原因,研究了Cassandra,Hbase等几个NoSQL 数据库,最终决定采用HBase。在这里,我就向大家分享一下自己对HBase的理解。

在说HBase之前,我想再唠叨几句。做互联网应用的哥们儿应该都清楚,互联网应用这东西,你没办法预测你的系统什么时候会被多少人访问,你面临的用户到 底有多少,说不定今天你的用户还少,明天系统用户就变多了,结果您的系统应付不过来了了,不干了,这岂不是咱哥几个的悲哀,说时髦点就叫“杯具啊”。

其实说白了,这些就是事先没有认清楚互联网应用什么才是最重要的。从系统架构的角度来说,互联网应用更加看重系统性能以及伸缩性 ,而传统企业级应用都是比较看重数据完整性和数据安全性。那么我们就来说说互联网应用伸缩性 这事儿.对于伸缩性 这事儿,哥们儿我也写了几篇博文,想看的兄弟可以参考我以前的博文,对于web server,app server的伸缩性 ,我在这里先不说了,因为这部分的伸缩性 相对来说比较容易一点,我主要来回顾一些一个慢慢变大的互联网应用如何应对数据库这一层的伸缩。

首先刚开始,人不多,压力也不大,搞一台数据库服务器就搞定了,此时所有的东东都塞进一个Server里,包括web server,app server,db server,但是随着人越来越多,系统压力越来越多,这个时候可能你把web server,app server和db server分离了,好歹这样可以应付一阵子,但是随着用户量的不断增加,你会发现,数据库这哥们不行了,速度老慢了,有时候还会宕掉,所以这个时候,你 得给数据库这哥们找几个伴,这个时候Master-Salve就出现了,这个时候有一个Master Server专门负责接收写操作,另外的几个Salve Server专门进行读取,这样Master这哥们终于不抱怨了,总算读写分离了,压力总算轻点了,这个时候其实主要是对读取操作进行了水平扩张,通过增 加多个Salve来克服查询时CPU瓶颈。一般这样下来,你的系统可以应付一定的压力,但是随着用户数量的增多,压力的不断增加,你会发现Master server这哥们的写压力还是变的太大,没办法,这个时候怎么办呢?你就得切分啊,俗话说“只有切分了,才会有伸缩性 嘛”, 所以啊,这个时候只能分库了,这也是我们常说的数据库“垂直切分”,比如将一些不关联的数据存放到不同的库中,分开部署,这样终于可以带走一部分的读取和 写入压力了,Master又可以轻松一点了,但是随着数据的不断增多,你的数据库表中的数据又变的非常的大,这样查询效率非常低,这个时候就需要进行“水 平分区”了,比如通过将User表中的数据按照10W来划分,这样每张表不会超过10W了。

综上所述,一般一个流行的web站点都会经历一个从单台DB,到主从复制,到垂直分区再到水平分区的痛苦的过程。其实数据库切分这事儿,看起来原理貌似很 简单,如果真正做起来,我想凡是sharding过数据库的哥们儿都深受其苦啊。对于数据库伸缩的文章,哥们儿可以看看后面的参考资料介绍。

好了,从上面的那一堆废话中,我们也发现数据库存储水平扩张scale out是多么痛苦的一件事情,不过幸好技术在进步,业界的其它弟兄也在努力,09年这一年出现了非常多的NoSQL 数据库,更准确的应该说是No relation数据库,这些数据库多数都会对非结构化的数据提供透明的水平扩张能力,大大减轻了哥们儿设计时候的压力。下面我就拿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/


暂时先分享这么多,以后在项目运用中,遇到问题再分享给大家.

分享到:
评论

相关推荐

    hbase与rdbms比较

    下面我们将详细比较HBase与RDBMS的区别与联系。 RDBMS的优点 RDBMS(Relational Database Management System)是传统的关系数据库管理系统,具有以下优点: 1. 持久性:RDBMS提供了持久性的数据存储,确保数据的...

    Difference between HBase and RDBMS

    HBase和RDBMS的主要区别在于它们的设计哲学和应用场景: 1. 数据模型: - RDBMS采用表格形式存储数据,强调行与列的关系,支持复杂的查询语言(如SQL),适用于高度结构化的数据。 - HBase则是列族(Column ...

    HBase 和RDBMS(关系数据库)的比较.doc

    在大数据领域,HBase 和 RDBMS(关系数据库管理系统)是两种常见的数据存储解决方案,它们各自有着独特的特性和应用场景。本文将对这两种数据库进行深入的比较,并探讨它们在设计哲学、功能特性以及适用场景上的差异...

    大数据与云计算培训学习资料 Hadoop集群 细细品味Hadoop_第15期_HBase、Hive与RDBMS 共15页.pdf

    Hadoop集群 细细品味Hadoop_第15期_HBase、Hive与RDBMS 共15页.pdf】这篇资料主要探讨了Hadoop生态系统中的两个重要组件——HBase和Hive,以及它们与传统关系型数据库管理系统(RDBMS)的区别和整合方式。以下是对这些...

    HBase技术介绍.docx

    - **Sqoop**: 用于轻松地将关系型数据库管理系统(RDBMS)中的数据迁移到HBase。 #### 四、HBase的数据模型 ##### 1. **Table & Column Family** - **Row Key**: 每个记录的唯一标识符,同时也是表中数据的主要排序...

    大数据运维技术第7章 HBase组件安装与配置课件.pptx

    **HBase与RDBMS的区别** 与传统的关系型数据库(如MySQL、Oracle)相比,HBase有以下显著差异: 1. **非关系型**:HBase采用Key-Value存储方式,不遵循严格的表格结构和预定义的数据类型,更适应灵活多变的数据...

    HBase不睡觉书.pdf HBase不睡觉书

    HBase与关系型数据库(RDBMS)有很大的不同,后者强调ACID(原子性、一致性、隔离性、持久性)事务,而HBase更侧重于最终一致性。这种设计使得HBase更适合大数据分析和实时数据处理场景,比如日志分析、实时监控、...

    大数据处理:HBASE.ppt

    【大数据处理:HBASE.ppt】的文档主要探讨了从关系型数据库(RDBMS)向分布式非关系型数据库HBase的转换,以及HBase在大数据处理中的表设计、操作方式和最佳实践。 1. **从RDBMS到HBase的表设计转变** - RDBMS基于...

    Hbase个人总结

    - **高可靠性**:HBase通过数据副本和自动故障恢复机制确保数据的高可用性和持久性。 - **高性能**:通过内存缓存、索引优化以及并行处理技术,HBase能够在海量数据集上提供快速的数据访问速度。 - **面向列存储**:...

    关系型数据库的数据导入Hbase

    关系型数据库(如MySQL、Oracle、SQL Server等)与非关系型数据库(如Hbase)在数据存储和处理上有着显著的区别。关系型数据库遵循ACID(原子性、一致性、隔离性和持久性)原则,适合结构化数据的存储,而Hbase作为...

    hbase数据库

    2. 2006年底,基于Bigtable的论文,PowerSet的Chad Walters和Jim Kellerman发起了HBase项目。 3. 2007年2月,HBase的原型版本建立;同年10月,第一个可用版本推出。 4. 2008年,HBase成为Apache Hadoop的子项目。 ...

    HBase中文教程.pdf

    HBase和传统的关系数据库管理系统(RDBMS)在很多方面都有不同。HBase设计用于在线分析处理(OLAP),而RDBMS更适合在线事务处理(OLTP)。HBase不支持事务处理,而RDBMS拥有事务性操作。HBase是针对大量数据设计的...

    高级Java人才培训专家-4-HBase

    #### HBase与RDBMS、HDFS、Hive的区别 - **HBase与RDBMS**:HBase是一种面向列存储的NoSQL数据库,不支持复杂的SQL查询和事务处理;而传统的RDBMS支持ACID特性,适用于复杂的关系型数据处理。 - **HBase与HDFS**:...

    hbase部署使用

    ### HBase与RDBMS的区别 #### RDBMS特点 - **结构化存储**:数据以表格形式存储,每列有固定的名称和数据类型。 - **事务支持**:支持ACID(原子性、一致性、隔离性、持久性)特性。 - **单机部署**:通常部署在...

    HBase-简介-(来自京东)

    与传统的关系型数据库(RDBMS)相比,HBase在数据类型、数据操作、存储模式和可伸缩性等方面有所不同: 1. 数据类型:HBase仅支持字符串类型,而RDBMS支持丰富多样的数据类型。 2. 数据操作:HBase提供基础的增删改...

    尚硅谷大数据技术之HBase.docx

    3. RDBMS 与 HBase 的对比:RDBMS 和 HBase 都是数据库管理系统,但它们有很多不同之处,如数据结构、存储方式、日志记录方式、事务支持等。 4. HBase 的特征: * 自动故障处理和负载均衡:HBase 运行在 HDFS 上,...

    超全的HBase知识体系总结.pdf

    2. HBase与传统关系型数据库(RDBMS)相比,在数据模型、存储方式、扩展性等方面都有显著差异。关系型数据库通常有固定的表格结构,依赖于行和列来存储数据,而HBase采用列式存储,可以存储无结构或半结构化的数据。...

    Hadoop之Hbase从入门到精通

    另外,Sqoop工具简化了从关系型数据库管理系统(RDBMS)到HBase的数据导入过程,进一步增强了HBase的易用性和实用性。 #### HBase访问接口详解 HBase提供了多种访问接口,以满足不同场景的需求: 1. **Native ...

    大数据云计算技术系列 Hadoop之Hbase从入门到精通(共243页).pdf

    Sqoop则提供了与关系型数据库(RDBMS)的桥梁,方便传统数据库数据迁移到HBase。 总的来说,HBase是大数据和云计算环境中解决大规模结构化数据存储和处理问题的重要工具。通过深入理解其技术原理和使用方法,开发者...

Global site tag (gtag.js) - Google Analytics