MPP (Massively Parallel Processing)
Concept
MPP (Massively Parallel Processing),即大规模并行处理。简单来说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似,但主要针对大规模关系型数据的分析计算)。
MPP架构特征
- 任务并行执行;
- 数据分布式存储(本地化);
- 分布式计算;
- 私有资源;
- 横向扩展;
- Shared Nothing架构。
MPPDB v.s. Hadoop
知乎-为什么说HADOOP扩展性优于MPP架构的关系型数据库?
hadoop 和 MPPDB 最大的区别在于:对数据管理理念的不同。
- HDFS/Hadoop 对于数据管理是粗放型管理,以一个文件系统的模式,让用户根据文件夹层级,把文件直接塞到池子里。处理也以批处理为主,就是拼命 scan。如果想在一大堆数据里找符合条件的数据,hadoop 就是粗暴的把所有文件从头到尾 scan 一遍,因为对于这些文件他没有索引、分类等,他管的少,知道的也少,用的时候每次就要全 scan。
- 数据库的本质在于数据管理,对外提供在线访问、增删改查等一系列操作。数据库的内存管理比较精细,有一套很完善的数据管理和分布体系。如果想在一大堆数据里找符合条件的数据,他可以根据分区信息先落到某个机器,再根据多维分区落到某个文件,再在文件里通过索引数据页的树形结构查询,可以直接定位到记录。
- 因为这样的基本理念不同,使得 hadoop 的扩展只需要简单的增加机器,内部平衡和迁移 data block;而数据库的扩充则涉及到数据拓扑结构的变更、或者不同机器间数据的迁移,当变化迁移的时候,依然需要维护分区、索引等,这种复杂度就比粗放的 HDFS 要高很多了。目前两者的存储模型不同。hadoop 用的是 HDFS,而 MPP 需要自己切分扩展。HDFS 扩展是通过元数据做的,name node 存元数据,增加一个节点,修改元数据就行,所以 HDFS 的扩展能力受到管理元数据的机器(name node) 的性能限制,一般来说可以到 10k 的规模。但 MPP 采用没有中心节点的存储模型,比如 hash,每次增加节点,都需要 rehash,规模增加到几百台的时候,扩展能力就有下降下来了。
通常来讲,MPP数据库有对SQL的完整兼容和一些事务的处理能力,Hadoop在处理非结构化和半结构化数据上具备优势,所以MPP适合多维度数据自助分析、数据集市等;Hadoop适合海量数据存储查询、批量数据ETL、非结构化数据分析(日志分析、文本分析)等海量数据批处理应用要求。但通过 sql 还是 map-reduce 来查,其实只是一种查询形式。目前也有很多 sql on hadoop 的方案,例如 impala (sql on hadoop,其实是一个 MPP engine,所以它的查询性能会更好,提供更低的延迟和更少的处理时间)、spark Sql 等。现在Spark的重点都在Spark SQL,因为它已经不仅仅是SQL了,而是新的 “spark core”。(详见最后链接中Reynold Xin对此的解释)
Spark SQL is not just about SQL. It turns out the primitives required for general data processing (eg ETL) are not that different from the relational operators, and that is what Spark SQL is. Spark SQL is the new Spark core with the Catalyst optimizer and the Tungsten execution engine, which powers the DataFrame, Dataset, and last but not least SQL.
常用的MPP数据库有哪些
- 自我管理的数据仓库
- HPE vertica
- MemSql
- Teradata
- 按需 MPP 数据库
- aws redshift
- azure sql 数据仓库
- google bigQuery
- GreenPlum
- Sybase IQ
- TD Aster Data
Share Nothing
数据库架构设计的三种模式:share nothing , share everythong , share disk
数据库构架设计中主要有Shared Everthting、Shared Nothing、和Shared Disk:
Shared Everthting:一般是针对单个主机,完全透明共享CPU/MEMORY/IO,并行处理能力是最差的,典型的代表SQLServer
Shared Disk:各个处理单元使用自己的私有 CPU和Memory,共享磁盘系统。典型的代表Oracle Rac, 它是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好。其类似于SMP(对称多处理)模式,但是当存储器接口达到饱和的时候,增加节点并不能获得更高的性能 。
Shared Nothing:各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2 DPF和Hadoop ,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。
我们常说的 Sharding 其实就是Share Nothing架构,它是把某个表从物理存储上被水平分割,并分配给多台服务器(或多个实例),每台服务器可以独立工作,具备共同的schema,比如MySQL Proxy和Google的各种架构,只需增加服务器数就可以增加处理能力和容量。