传统数据库缺陷

来源:互联网 发布:新版淘宝二手手机回收 编辑:程序博客网 时间:2024/05/17 20:11

(1)    并行关系型方案

多个独立的关系数据库服务器,访问共享的存储资源池。

优势:采用多个关系数据库服务器、多个存储,与原有的架构相比扩展了存储和计算的能力。

劣势:计算与存储分离,数据访问存在竞争和带宽瓶颈;支持的关系数据库服务器数量有限;只能向上扩展不能横向扩展。

适用范围:适合复杂的需要事物处理的应用。

(2)    Hadoop方案

有大量独立的服务器通过网络互连形成集群,每台服务器有独立的存储;

优势:计算与存储融合,支持横向扩展,有更好的扩展性;

劣势:解决数据冲突时,需要节点间协作。

适用范围:数据仓库和离线数据分析;大规模在线实时应用。

(1)       软件架构(扩展性):

关系型:扩展时需要静态停机扩展,数据需要重新分布;容错能力不存在中间结果,出错时需要重新执行查询。

Hadoop:扩展能力动态无缝扩展,自动扩展;容错能力只需要重新运行出错的子任务。

(2)     数据模型:

关系型:二元关系模型;静态数据模型。

Hadoop:非结构化或者多维MAP模式;动态可变数据模式

(3)      分析方式:

关系型:SQL查询语言

Hadoop: 广泛的数据分析,包括SQL,M/R,Rlauguage,数据挖掘,预测性分析。

 

 

存储类型

数据存储

数据读取

数据压缩

行存储

数据按行存储∃ ∃ ∃ 表中每行记录的所

有属性在物理空间上存储在一起

查询时将一行的所有属性读出∃ 产生

大量I/O负载

对于行中所有记录, 采用统一的压缩

方式

列存储

数据按列存储, 表中同一属性在同一

列中

只访问查询涉及到的列∃ ∃ ∃ 大量降低

系统I/O

数据类型一致、特征相似∃ ∃ ∃ 高效压

 

在hadoop出现以前,在对海量数据分析时一般都是采用关系型数据库中进行,如faceboo库的数据仓库,完全是由一个Oracle实例来执行的,但是这些传统的关系型数据库中都存在着扩展问题和性能问题。可扩展性主要表现在表空间不足的问题,如果要对表空间进行扩容,这需要新增机器,需要将这些数据库中的数据同步等问题。

性能问题主要表现在,传统的关系型数据库中,都存在对数据库事务一致性的要求,而在数据挖掘或者数据分析过程中,并不需要严格要求数据库事务特征和对读一致性的要求。

 

在国内,为了解决海量数据的问题,在2004年开始使用基于Oracle产品构建企业级的数据仓库(EDW),并于2007年、2008年和2009年三次利用Oracle RAC10g和Oracle RAC 11g产品对数据仓库进行了升级和扩容,将数据仓库部署在全球领先的RAC(Real Application Clusters)系统。这个系统集成了集群管理软件和存储管理软件,当系统规模增加时,用户可以按照需要进行扩展系统,以保证性能。但是RAC存在着单机管理复杂,对硬件要求相对较高的问题。甚至在系统规划较差时性能不如单节点,还可能存在增加软件成本(如果使用高配置的服务器,Oracle按照CPU个数进行收费),对操作人员要求较高的问题。

 

传统数据库是以数据块来存储数据,简单来说,你的表字段越多,占用的数据空间就越多,那么查询就有可能要跨数据块。在大型系统中一张表有上百个字段,并且表中的数据上亿条也有可能。因此会带来数据库查询的瓶颈。数据库中表的记录数是多少对查询的性能有非常大的影响。而一般的解决办法是分表或分库,用来平衡数据库运算的压力,那么又会带来新的问题,如:分布式事务、全局唯一ID的生成、跨数据库查询等。

如果采用一种基于列存储的模式,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。按照列存储每个字段的数据聚集存储,可以动态增加,并且列为空就不存储数据,节省存储空间。每个iduan 的数据按照聚集存储,能大大减小读取的数据量,查询时的命中率就会提高,使查找更为直接,无需考虑分库]分表,来提高命中率、减少IO等瓶颈。

Hbase数据库支持数据自动切分存储,并支持高并发读写操作,使得海量数据存储自动具有更强的扩展性。

 

Hadoop 本身就支持通过JDBC 从数据库中抽取数据。大部分数据库系统有批量导出、导入功能。无论是哪种情况,将整个数据库中的数据经常性地或者以增量的方式导入到Hadoop 中来都是很容易的。由于数据库系统存储的数据减少,数据库系统的软件授权成本也会得到降低。图1是Hadoop 与关系型数据库协同处理计算任务的应用场景。其中,关系型数据库系统用来处理实时数据,从而保证交易过程中的数据一致性。如果要求同一个数据库系统从

大容量数据中生成复杂的分析报表是极其耗费计算资源的,降低了系统的性能和其处理实时数据工作的能力。

Hadoop 被设计用来存储海量数据、按任意方式处理海量数据以及按需向任意系统传递数据。数据可以经常性地从关系型数据库系统导出到Hadoop 中,关系型数据库系统可以经过调整,专门用来处理交互式任务,而复杂的分析工作就可以按离线的方式交由Hadoop 来完成,对实施系统没有任何影响。

原创粉丝点击