`

NOSQL之旅-----HBase

阅读更多

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

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

   其实说白了,这些就是事先没有认清楚互联网应用什么才是最重要的。从系统架构的角度来说,互联网应用更加看重系统性能以及伸缩性,而传统企业级应用都是比较看重数据完整性和数据安全性。那么我们就来说说互联网应用伸缩性这事儿。

对于伸缩性这事儿,哥们儿我也写了几篇博文,想看的兄弟可以参考我以前的博文,对于web server,app server的伸缩性,我在这里先不说了,因为这部分的伸缩性相对来说比较容易一点,我主要来回顾一些一个慢慢变大的互联网应用如何应对数据库这一层的伸缩。

 首先刚开始,人不多,压力也不大,搞一台数据库服务器就搞定了,此时所有的东东都塞进一个Server里,包括web server,app server,db server,但是随着人越来越多,系统压力越来越多,这个时候可能你把web server,app serverdb 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的数据模型非常类似,他们的思想都是来源于GoogleBigtable,因此这三者的数据模型非常类似,唯一不同的就是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也许需要urlfeed需要image属性等,这样来说,feed本身的属性是不确定的,因此如果采用传统的关系数据库将非常麻烦,况且关系数据库会造成一些为null的单元浪费,而列存储就不会出现这个问题,在Hbase里,如果每一个column 单元没有值,那么是占用空间的。下面我们通过两张图来形象的表示这种关系:

          

 

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

 

 

 

 

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

 

三 Hbase的优缺点

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

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

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

Hbase的缺点:

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

暂时不能支持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/

 

 

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

 

 

 

 

  • 大小: 14.3 KB
  • 大小: 17.9 KB
8
0
分享到:
评论
3 楼 yangfuchao418 2010-07-12  
狂放不羁 写道
Arden 写道
我很想知道为什么选择HBase,而不选择Cassandra/MongoDb/voldemort/terrastore/redis等,或者hypergraphdb/neo4j等图数据库,我觉得在某些场合neo4j这样的数据更能够满足业务需求~~


Cassandra做了一下测试,并发插入10W条数据就不动了。MongoDB,Voldemort没怎么去研究过,也没详细做过测试,redis本身需要大量的内存,并且好像不支持水平扩展。terracotta是个JVM级别的缓存,公司的其他项目用了它,neo4j不具备分布式的能力。neo4j这个我觉得适合做SNS的好友模型。

neo4j确实主要是用来做好友模型的,但是你说的cassandra插入10W就不动了?咋测试的?
2 楼 狂放不羁 2010-03-11  
Arden 写道
我很想知道为什么选择HBase,而不选择Cassandra/MongoDb/voldemort/terrastore/redis等,或者hypergraphdb/neo4j等图数据库,我觉得在某些场合neo4j这样的数据更能够满足业务需求~~


Cassandra做了一下测试,并发插入10W条数据就不动了。MongoDB,Voldemort没怎么去研究过,也没详细做过测试,redis本身需要大量的内存,并且好像不支持水平扩展。terracotta是个JVM级别的缓存,公司的其他项目用了它,neo4j不具备分布式的能力。neo4j这个我觉得适合做SNS的好友模型。
1 楼 Arden 2010-03-11  
我很想知道为什么选择HBase,而不选择Cassandra/MongoDb/voldemort/terrastore/redis等,或者hypergraphdb/neo4j等图数据库,我觉得在某些场合neo4j这样的数据更能够满足业务需求~~

相关推荐

    geomesa-hbase安装包

    《深入解析geomesa-hbase安装包:开启大数据地理空间分析之旅》 在现代大数据领域,地理空间数据处理已经成为不可或缺的一部分。Geomesa作为一个开源的分布式地理空间数据存储系统,为处理大规模地理空间数据提供了...

    hbase 学习 hbase原理 hbase资料

    HBase是一种分布式、高性能、基于列族的NoSQL数据库,主要设计用于处理大规模数据集。在深入了解HBase之前,我们先来理解一下它的基本概念。...提供的“hbase 培训”资料应该能帮助你开始这段学习之旅。

    一条数据的HBase之旅,简明HBase入门教程-Write全流程

    HBase是一个分布式的、面向列的NoSQL数据库,它是构建在Apache Hadoop文件系统(HDFS)之上的。HBase提供强一致性的读写操作,适用于大数据存储,尤其适合实时查询。 【数据模型】 HBase的数据模型包括表(Table)...

    HBase权威指南

    《HBase权威指南》是一本...总之,《HBase权威指南》是一部值得每一位关注大数据技术的读者仔细研读的作品,它不仅提供了丰富的理论知识,更注重实践指导,旨在帮助读者掌握HBase的精髓,开启大数据领域的探索之旅。

    hadoop技术总结

    【标题】:Hadoop技术总结 【描述】:Hadoop是一种开源框架...掌握Hadoop,不仅能开启大数据之旅,也为其他相关技术的学习打下坚实基础。通过不断学习和实践,你可以深入理解其工作原理,从而更好地应用在实际项目中。

    hadoop-course:从 code.google.comphadoop-course 自动导出

    【Hadoop课程详解】 Hadoop是一项开源框架,主要用于处理和存储海量数据,尤其在大数据处理领域,它扮演着至关重要的角色。...通过本课程的学习,你将能够熟练运用Hadoop进行大规模数据处理,开启你的大数据之旅。

    HBase_The_Definitive_Guide

    书中提供了HBase的安装指南以及一个快速入门指南,这将使读者能够快速开始他们的HBase学习之旅。这些指南可能包括安装HBase所需的系统要求,以及如何设置和运行HBase环境。 9. 历史和命名规则 HBase作为一个数据库...

    java核心知识点整理

    - HBase、MongoDB和Cassandra是分布式NoSQL数据库,适合大数据场景。 9. 设计模式: - 设计模式是解决软件设计中常见问题的经验总结,如单例、工厂、观察者、装饰者等23种经典设计模式。 10. 数据结构与算法: ...

    Hadoop实战-陆嘉恒高清完整版

    《Hadoop实战-陆嘉恒高清完整版》是一本深入探讨大数据处理技术的书籍,主要聚焦于Apache Hadoop这一开源框架。...通过阅读这本书,你将能够掌握Hadoop生态系统的关键技术,为你的大数据之旅打下坚实的基础。

    hw-BigData:在学校上课。 一些材料和程序的实现,Map Reducer,Hadoop,..

    这个项目,'hw-BigData',是针对巨量资料探勘的一次学习之旅,结合了学校课堂的教学与在线课程的学习资源。其中,MapReduce是首当其冲的重点,这是一种分布式计算模型,常用于处理大规模数据集。我们的目标是通过...

    大数据时代的数据库75.pptx

    HBase是建立在Hadoop之上的NoSQL数据库,它针对大数据场景优化了读写性能,尤其适合实时数据查询。此外,NoSQL数据库如MongoDB、Cassandra等也是应对大数据挑战的解决方案,它们提供非关系型的数据模型,能更好地...

    BigData:一些有关大数据软件的安装指南

    在大数据领域,软件安装是开启数据分析和处理之旅的第一步。本指南将专注于使用Java语言相关的工具和技术,因为Java是大数据生态系统中的重要组成部分,许多大数据框架如Hadoop、Spark等都是用Java开发或与Java紧密...

    CDH5部署_大数据_

    《CDH5部署——大数据平台搭建详解》 在大数据领域,Cloudera Distribution Including Hadoop (CDH) 是一个广泛使用的开源平台,它为数据处理、分析和存储提供了全面...希望本手册能为您的大数据之旅提供有力的支持。

    hadoop数据分析

    《Hadoop数据分析》一书是O'Reilly出版社的力作,专为那些希望深入理解如何利用Hadoop进行大规模数据处理和分析的专业...通过阅读本书,你可以系统地学习如何在Hadoop平台上进行高效的数据分析,开启大数据探索之旅。

    hadoop权威指南第4版(中文版)

    总之,《Hadoop权威指南》第四版中文版是一本全面覆盖Hadoop及其生态系统的教材,无论你是初学者还是有经验的开发者,都能从中获得宝贵的洞见和实践指导,为你的大数据之旅提供坚实的理论和技术支持。

    搞定大数据平台:从入门到实战

    《搞定大数据平台:从入门到实战》这门课程是一次全面深入的大数据技术之旅,旨在帮助初学者乃至无基础的同学建立起完整的数据处理和分析环境。课程涵盖了大数据领域中广泛使用的技术组件,确保学习者能够从零开始...

Global site tag (gtag.js) - Google Analytics