新手课堂-Hadoop还是Oracle,存储管理该选择谁?
前言
现在说到大数据,就能想到hadoop;说到关系型数据库,好多人想到oracle。同样是数据存储,两者有什么区别,该如何选择?我们一起聊一下
Hadoop
什么是Hadoop呢?Hadoop不是数据库,而是一个开源软件集合,它通过底层的分布式存储框架(HDFS)来管理庞大的数据集,其主要目的是分析、存储、管理和交付数据。因为Hadoop的核心是HDFS(分布式文件系统),所以从这一点就可以看出它的本质是一个非常强大的文件系统,而并非数据库系统。Hadoop擅长海量数据计算存储,底层架构中的负责存储和计算的分别是HDFS和MapReduce——两大核心优势:可扩展性和大规模并行处理能力。
HDFS:分布式文件系统。是hadoop体系中数据存储管理的基础,就像一个传统的分级文件系统。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的硬件上运行。
MapReduce:是一种分布式计算模型,用以进行大数据量的并行计算。MapReduce实现的就是人多力量大,大规模数据计算时将数据分配到各个机器节点上,每台机器运行一个子计算任务,最后再合并每台机器运行结果并输出。MapReduce的思想就是“分而治之”。
下图是Hadoop分布式架构图,在此解决方案中,用户执行SQL查询,整个过程是在服务器集群中并行运行。由于任务分布在多台计算机上,因此磁盘瓶颈不再是问题。随着数据量的增长,用户可通过额外的服务器扩展到数百甚至数千个节点。
看完了Hadoop,再来看一个典型的关系型数据库体系架构,用户对单个大型数据库服务器执行SQL查询。
尽管数据库已经有了各种复杂的缓存技术,但磁盘I/O依然是大多数应用程序的瓶颈,这限制了系统的处理和扩展能力,使其难以应对快速增长的庞大数据集。
行存储vs列存储
基于列的存储方式与传统基于行的存储方式存在着明显差异。
Hadoop本身支持基于列的存储,这为分析查询提供了巨大的性能和压缩优势,这一点恐怕是传统关系型数据库不可及的。
传统行存储 | |||
ID | Name | Dept | Value |
1 | ZhangS | Sales | 200 |
2 | LiS | Sales | 300 |
3 | WangW | Sales | 180 |
4 | ZhaoL | Web | 210 |
基于列的存储 | ||||
ID | 1 | 2 | 3 | 4 |
Name | ZhangS | LiS | WangW | ZhaoL |
Dept | Sales | Sales | Sales | Web |
Value | 200 | 300 | 180 | 210 |
上图说明了这两种方法之间的区别。使用传统基于行的存储可以快速识别和获取单行,这对于需要获取或更新单行值的事务处理系统非常有用。
举个例子:select deptno,sum(sal) as sal from emp group by deptno;
在oracle中,此查询需要将每行的每一列提取到内存中并按照deptno分组。在具有100列和数亿行的表中,这样做的效率是极其低下的。换句话说,分析查询倾向于获取、汇总和处理数百万甚至数十亿行数据,这时候基于行的存储就会显得力不从心。
但是,在基于列的解决方案中,相同的查询仅需要处理约2%的数据,具有巨大的性能优势。在压缩层面,deptno列中的重复值可以用简单的字典编码技术代替以压缩数据。
在对十亿行文本进行的简单测试中,基于列的存储方式节省了50%的成本。
Hadoop优势
与传统关系型数据库相比,Hadoop的优势通常被总结为以下几点:
高扩展性——Hadoop是在计算机集簇中分配数据并完成计算任务的,这些集簇可以方便的扩展到数以千计的节点中。
高效性——Hadoop能够在节点之间动态的移动数据,并保证各个节点的动态平衡。
高容错性——Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
成熟的云计算技术让Hadoop更加富有“弹性”。
基于云的服务器提供可扩展处理工作负载的能力,这意味着整个机器集群可以根据需要进行调整,以应对海量数据处理挑战,同时硬件成本也不会太高。
当然并非所有行业都适合云计算,比如对数据高度敏感的公安、银行业,或者我们熟悉的金融监管行业,可能会受到怀疑,这种情况下,我们可以考虑在内部部署基于云的解决方案来保护数据。
成本对比
多数人的观点认为Hadoop要比oracle要便宜,认为Hadoop开源版本不需要购买,硬件成本相对低廉,但这仅仅是表面成本,而不是总体成本。现在伴随着公有云技术的成熟,Hadoop甚至连硬件成本也不占优了。同时,Hadoop拥有的庞大生态系统,也导致学习成本的增加。目前Hadoop生态中包括几十种相关的产品,熟悉Hadoop相关产品的部署步骤、功能特征、开发方法也要付出相应的学习成本。
尽管如此,个人观点认为一台完整oracle数据库管理系统,考虑到硬件、网络设备、许可证、IT人员支持和运维等成本,也会发现成本比相应的Hadoop解决方案高出许多。
说到这有同学就问,Hadoop就没有劣势了?当然不是
1、Hadoop看起来似乎更加优秀,但是它并不适合处理ACID事务。在很多情况下,Hadoop没有办法保证所有数据的强一致性。
2、Hadoop可以处理大量数据,最小的典型工作单元大约为128Mb,与大约8K字节的典型Oracle数据块相比,Oracle可以管理一系列OLTP和OLAP,使用单行查找处理大量短期运行事务。而Hadoop更适合单进程批处理操作。
3、对于SQL、索引、视图、表间关联等的使用,oracle使用起来更加游刃有余。
Hadoop与oracle的结合
Hadoop与关系型数据库之间并非始终独立的,两者也可以搭配使用。
下图是某商业银行基于大数据建设的数据分析平台,平台实行统一规划、集中管理,满足了海量数据的加工和存储需求。
1、采用HDFS与关系型数据库相结合的混合存储,关系数据库主要存储监管报送所需的账户、交易等数据,满足监管报送、数据治理的需求。
2、终端采集的业务数据经过清洗、解析和分类,转化为基础业务数据存入HDFS。上传的数据实质是结构化和半结构化数据,并且是多种业务内容的混合数据,利用MapReduce的并行处理能力,快速地完成客户行为分析、客户营销推送等任务。
3、Hadoop存储和关系型存储之间也存在着数据交换需求。Hadoop需要从关系型数据库读入公共类数据(例如客户信息),其次Hadoop对原始数据的处理结果,会导入到关系型数据库,以方便业务查询使用。
如何选择
作为企业数据库领域最主流的数据库产品之一,Oracle凭借可移植好、使用方便、功能强大、安全性强等优势,依然存在广阔市场。为应对大数据潮流,甲骨文也推出了Oracle Big Data Appliance,Exadata Appliance和Oracle 12c In-Memory等适应新的需求和挑战。
那么企业到底应该采用哪种架构来建立自己的数据库呢?当然并不是越高端越好,选择大炮还得看蚊子的大小,个人觉得关键看自己的数据特点和能力需求。
1、企业如果只是很小数据量(小几T),以及计算量不大,计算时间能够满足时间窗口,而且对未来扩展没有较大需求,那么可以选择oracle,维护相对简单,稳定性也好。
2、如果数据量很大(超过几十T),或者对扩展性有要求(比如流计算、机器学习等),或者还需要存储非结构化数据,那可以选择Hadoop,当然最好组建专门运维团队,发挥hadoop对大数据计算的最大优势。