- 浏览: 161018 次
- 来自: ...
文章分类
- 全部博客 (151)
- Liferay.in.Action (3)
- 集群 (12)
- web (5)
- jna (2)
- 数据库 (7)
- Terracotta (11)
- xml (1)
- Hibernate (3)
- Jdbc (2)
- DDD (10)
- nosql (7)
- 云存储 (3)
- 云产品 (7)
- 云计算 (26)
- Hadoop (11)
- 虚拟化 (5)
- REST (3)
- 程序人生 (11)
- google (2)
- 安全应用 (5)
- LDAP (0)
- 安全技术 (5)
- android (4)
- 网络妙语 (1)
- HTML5 (1)
- 搜索引擎 (1)
- 架构设计 (5)
- redis (3)
- Cassandra (2)
最新评论
-
liwanfeng:
情况是这样的,你的文件我觉得还是比较小,我现在需要处理的XML ...
dom4j处理大文件
请您先登录,才能继续操作
原文 http://yuquan-nana.iteye.com/blog/613506
最近因为项目原因,研究了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
这分布式列存储系统来说说。
在说Hase
是个啥家伙之前,首先我们来看看两个概念,面向行存储和面向列存储。面向行存储,我相信大伙儿应该都清楚,我们熟悉的
RDBMS
就是此种类型的,面向行存储的数据库主要适合于事务性要求严格场合,或者说面向行存储的存储系统适合
OLTP
,但是根据
CAP
理论,传统的
RDBMS
,为了实现强一致性,通过严格的
ACID
事务来进行同步,这就造成了系统的可用性和伸缩性方面大大折扣,而目前的很多
NOSQL
产品,包括
Hbase
,它们都是一种最终一致性的系统,它们为了高的可用性牺牲了一部分的一致性。好像,我上面说了面向列存储,那么到底什么是面向列存储呢?
Hbase,Casandra,Bigtable
都属于面向列存储的分布式存储系统。看到这里,如果您不明白
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
是个啥东东?
二 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
的优缺点
发表评论
-
揭开J2EE集群的神秘面纱(二)
2010-10-19 21:24 855原文 http://blog.csdn.net/ESoftW ... -
揭开J2EE集群的神秘面纱(一)
2010-10-19 21:22 1001原文 http://blog.csdn.net/ESo ... -
基于LVS的Linux负载均衡技术实现(第一篇:基本原理)
2010-10-10 12:25 1003原文 http://linux.chinaunix.n ... -
手把手教你配置Windows2003集群(图) 3
2010-10-10 12:02 1248原文 http://publish.it168.com ... -
手把手教你配置Windows2003集群(图) 2
2010-10-10 12:01 1391原文 http://publish.it168.com/200 ... -
Windows 2008网络负载均衡之入门篇
2010-10-10 11:57 1041原文 http://windows.chinaitla ... -
简谈Windows负载均衡的特点
2010-10-10 11:56 1178原文 http://windows.chinaitlab.c ... -
配置Windows Server 2003网络负载均衡
2010-10-10 11:54 1130原文 http://windows.chinaitlab.co ... -
squid实现反向代理的原理
2010-10-10 10:43 1002原文 http://www.opendigest.org/ar ... -
Linux Cluster案例分析之 Google的Linux集群解决方案(2)
2010-10-05 18:58 1329原文地址 http://www.opendigest.org/ ... -
Linux Cluster案例分析之 Google的Linux集群解决方案(1)
2010-10-05 18:44 1353原文地址 http://www.opendigest.org/ ...
相关推荐
《深入解析geomesa-hbase安装包:开启大数据地理空间分析之旅》 在现代大数据领域,地理空间数据处理已经成为不可或缺的一部分。Geomesa作为一个开源的分布式地理空间数据存储系统,为处理大规模地理空间数据提供了...
HBase是一种分布式、高性能、基于列族的NoSQL数据库,主要设计用于处理大规模数据集。在深入了解HBase之前,我们先来理解一下它的基本概念。...提供的“hbase 培训”资料应该能帮助你开始这段学习之旅。
HBase是一个分布式的、面向列的NoSQL数据库,它是构建在Apache Hadoop文件系统(HDFS)之上的。HBase提供强一致性的读写操作,适用于大数据存储,尤其适合实时查询。 【数据模型】 HBase的数据模型包括表(Table)...
《HBase权威指南》是一本...总之,《HBase权威指南》是一部值得每一位关注大数据技术的读者仔细研读的作品,它不仅提供了丰富的理论知识,更注重实践指导,旨在帮助读者掌握HBase的精髓,开启大数据领域的探索之旅。
《Learning HBase(中文版)》是一本专为学习HBase设计的中文教材,适合对大数据处理和分布式数据库感兴趣的读者...现在,你可以下载《Learning HBase中文版.pdf》开始你的学习之旅,探索这个强大数据库的无限可能性。
书中提供了HBase的安装指南以及一个快速入门指南,这将使读者能够快速开始他们的HBase学习之旅。这些指南可能包括安装HBase所需的系统要求,以及如何设置和运行HBase环境。 9. 历史和命名规则 HBase作为一个数据库...
【标题】:Hadoop技术总结 【描述】:Hadoop是一种开源框架...掌握Hadoop,不仅能开启大数据之旅,也为其他相关技术的学习打下坚实基础。通过不断学习和实践,你可以深入理解其工作原理,从而更好地应用在实际项目中。
- HBase、MongoDB和Cassandra是分布式NoSQL数据库,适合大数据场景。 9. 设计模式: - 设计模式是解决软件设计中常见问题的经验总结,如单例、工厂、观察者、装饰者等23种经典设计模式。 10. 数据结构与算法: ...
《Hadoop实战-陆嘉恒高清完整版》是一本深入探讨大数据处理技术的书籍,主要聚焦于Apache Hadoop这一开源框架。...通过阅读这本书,你将能够掌握Hadoop生态系统的关键技术,为你的大数据之旅打下坚实的基础。
【Hadoop课程详解】 Hadoop是一项开源框架,主要用于处理和存储海量数据,尤其在大数据处理领域,它扮演着至关重要的角色。...通过本课程的学习,你将能够熟练运用Hadoop进行大规模数据处理,开启你的大数据之旅。
HBase是建立在Hadoop之上的NoSQL数据库,它针对大数据场景优化了读写性能,尤其适合实时数据查询。此外,NoSQL数据库如MongoDB、Cassandra等也是应对大数据挑战的解决方案,它们提供非关系型的数据模型,能更好地...
《CDH5部署——大数据平台搭建详解》 在大数据领域,Cloudera Distribution Including Hadoop (CDH) 是一个广泛使用的开源平台,它为数据处理、分析和存储提供了全面...希望本手册能为您的大数据之旅提供有力的支持。
《Hadoop分布式集群大数据云计算源码视频教程》是一套深入解析Hadoop技术栈及...通过系统的视频学习和实战演练,你将能够构建和管理自己的Hadoop分布式集群,有效地处理和分析海量数据,开启大数据云计算的探索之旅。
《Hadoop数据分析》一书是O'Reilly出版社的力作,专为那些希望深入理解如何利用Hadoop进行大规模数据处理和分析的专业...通过阅读本书,你可以系统地学习如何在Hadoop平台上进行高效的数据分析,开启大数据探索之旅。
在大数据领域,软件安装是开启数据分析和处理之旅的第一步。本指南将专注于使用Java语言相关的工具和技术,因为Java是大数据生态系统中的重要组成部分,许多大数据框架如Hadoop、Spark等都是用Java开发或与Java紧密...
通过学习《Hadoop权威指南》第四版,你将掌握如何设计和实施基于Hadoop的大数据解决方案,为你的大数据之旅提供坚实的理论基础和技术支持。无论你是初学者还是经验丰富的开发者,这本书都将帮助你提升在Hadoop领域的...
作为零基础的初学者,我在科多大数据开始了我的大数据学习之旅,这里我想分享一些我在学习过程中的感悟和心得。 首先,学习大数据需要对自身的定位有清晰的认识。作为新手,Java基础知识是入门大数据的必修课。Java...
总之,《Hadoop权威指南》第四版中文版是一本全面覆盖Hadoop及其生态系统的教材,无论你是初学者还是有经验的开发者,都能从中获得宝贵的洞见和实践指导,为你的大数据之旅提供坚实的理论和技术支持。
《Hadoop权威指南》是大数据领域的一本经典著作,它深入浅出地介绍了Apache Hadoop这一开源分布式计算框架。...通过阅读这本书,你可以深入了解分布式计算的世界,为你的大数据之旅打下坚实的基础。
【Hadoop入门手册】是一本专为初学者设计的指南,旨在帮助读者快速掌握Hadoop这一分布式计算框架的基础知识和核心概念。Hadoop是Apache软件基金会的一个开源项目,它的出现...开始你的Hadoop之旅,探索大数据的世界吧!