- 概述
当前大数据已经渗透到每个行业和领域,成为了重要的生产因素。在大数据环境下,数据是海量的,且呈爆发式增长,数据类型复杂多样,除结构化数据外,还有大量半结构化和非结构化数据。大数据应用需求也很复杂,包括复杂多表关联查询,即席查询,离线数据批量处理等。这种形势给构建大数据处理的通用平台带来了挑战。
- 传统数据库构建大数据平台的不足
传统事务型数据库是针对事务型处理设计的,采用行存储和Shared Disk架构,硬件方面采用小型机+磁盘阵列的配置。而面对大数据的分析处理型应用,传统的数据库在处理海量数据方面表现出明显的不足,主要表现在如下方面:
传统的Shared Disk架构存在I/O瓶颈,扩展能力不足,无法支撑PB级别数据的存储和计算,对于海量非结构化数据处理也很有限;
传统数据库基于行存储方式适用于事务型应用,需要大量读取冗余数据而增加磁盘I/O,在分析类型应用效率低下;
传统数据库索引针对于每一行建立,检索速度慢,需要手工建立,不便于维护,且极大的影响数据的入库效率;
采用小型机+磁盘阵列的硬件平台成本较高,扩容成本大,且扩容能力有限;
传统的数据库系统采用关系型数据库,主要用于对结构化数据的处理,不支持对半结构化和非结构化数据的存储和处理,无法满足海量半结构化、非结构化的存储、查询、分析和处理的需求。
- 大数据分析平台技术选型
针对传统数据库处理大数据瓶颈以及大数据的应用需求,衍生了多项大数据技术。当前市面上有两种主流的处理架构:MPP数据库和Hadoop技术。
3.1.MPP数据库
MPP数据库是新型数据库类型,采用Shared Nothing+MPP架构,通过列存储、高效压缩、粗粒度智能索引等多项大数据处理技术,结合MPP架构高效的分布式计算模式,完成对海量高密度结构化数据的分析类应用的支撑,运行环境多为低成本PC Server,具有高性能和高扩展性的特点。MPP数据库广泛应用到行业数据仓库和各类结构化数据分析领域。
MPP数据库可以有效支撑PB级别的结构化数据处理,它具有如下特点:
具备ACID特性:满足原子性、一致性等要求;
支持关系模型:基于关系模型设计;
使用SQL引擎:标准接口,开发效率高,应用迁移方便;
基于Share Nothing架构:可以横向扩展数百个节点,支撑PB级别的数据处理;
存储结构化数据,有明显的星型和雪花模型结构:便于进行OLAP分析、多维分析;
可基于开放的X86架构服务器部署:平台建设成本低;
MPP数据库擅长处理高价值密度的结构化数据,适合大规模的复杂分析,海量数据的查询、关联等场景,例如数据仓库、数据集市、企业级报表、统计分析、即席查询、多维分析等。
3.2.Hadoop技术
基于Hadoop生态的大数据技术主要针对非结构化数据的存储和计算、实时流处理等传统关系型数据库较难处理的数据和场景。Hadoop依托于开源社区的优势,以及相关技术的不断进步和迭代更新,可支撑对于非结构、半结构化数据处理、复杂的ETL流程、复杂的数据挖掘和计算模型。
Hadoop技术具有如下特点:
键值对存储方式:简单低耦合方式存储数据;
分布式文件系统:基于HDFS的分布式文件系统,具有明显的存储优势,可以存储海量的结构化、半结构化、非结构化数据;
MR/RDD:灵活的编程模式;
存储结构化、半结构化和非结构化数据:全量数据存储;
可基于开放的X86架构服务器部署:扩容成本低;
扩展性:可以扩展到上千节点;
3.3.两种技术对比
MPP数据库与Hadoop技术具有各自的优缺点和适用场景,二者之间的对比如下:
MPP数据库为Shared Nothing架构,对于JOIN或GROUP BY操作,执行计划可以优化为直接通过本地计算完成关联或分组,而不需要进行各节点间重分布数据,处理性能优越。Hadoop是基于HDFS文件存储,需要通过扫描来定位数据,同时在计算中会有大量的节点间数据搬运和排序操作,对于大表复杂关联及GROUP BY处理性能较低。
MPP数据库擅长处理高价值密度的结构化数据,而Hadoop的优势在于处理非结构化数据和流数据。
Hadoop对数据的操作模型,更适合于只支持一次写入多次读取,QQ号拍卖平台数据更新性能较低;MPP数据库基于关系模型,其存储结构和处理结构可以支持任意对数据集合的更新和删除。
对于小数据量,MPP数据库和Hadoop生态的Spark在运算关系型上没有太大差异,但对于100TB级以上的数据处理,MPP数据库充分利用其内存管理和CBO设计上的优势,有比较Spark更强的性能优势。但在关系型运算之外,Spark在数据挖掘算法,尤其在基于迭代的算法执行方面具有优势。
Hadoop生态的Spark处理性能高,但也只有在内存中处理才能保证高性能,一旦内存不足,数据就需要存回到HDFS中,性能将会发生很大的抖动。
Hadoop对SQL兼容性不好,且调优算法复杂多样。MPP 数据库是关系型数据库,本身支持SQL,且执行计划有多年的积累,便于进行高效的优化。
MPP数据库擅长SQL编程解决的问题。Hadoop的MapReduce及RDD编程模型比较灵活,可以处理部分SQL不能处理的问题,例如机器学习等。
Hadoop采用Java开发,在运行时依赖JAVA虚拟机,内存需求较大时容易出现大量的内存垃圾,影响任务执行效率。MPP数据库有完善的内存管理,保证内存和磁盘之间数据置换的平滑性
MPP数据库可以有效的采取基于代价的优化(CBO),根据内部数据字典作动态优化数据的分析和处理。
3.4.混搭方案
综上所述,在大数据处理中MPP数据库和Hadoop技术均有其各自的优劣势以及适用的场景,在实际应用中必须采用MPP数据库和Hadoop技术的混搭方案,这样才可以充分发挥各自的优势,实现功能互补,解决大数据的诸多复杂需求。对于大规模的复杂分析、即席查询、多表复杂关联等场景,由MPP数据库处理;而非结构化数据处理、流处理以及大规模批量复杂作业,则由Hadoop架构负责。MPP数据库和Hadoop技术的混搭方案可以实现对全量数据的处理,满足各行业对大数据的应用需求。
- 没有银弹
当前数据管理技术发展很快,供我们选择的技术种类繁多。而面临大数据平台技术选型时,很难说哪种技术更好,因此我们要摒弃一种技术支撑所有应用的幻想。需求是选型中最重要的因素。根据需求,选取最合适的技术,针对多类需求,选取多种技术混搭来满足。引用Fred Brooks先生的经典论述:真正的银弹并不存在。最新的未必是最好的,以开放的心态面对所有技术类型,取我所需,为我所用。毕竟能够满足需求的技术,才是最好的技术。