`
weitao1026
  • 浏览: 1062633 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

说起Greenplum这个产品,最早是SUN来推他们的数据仓库产品DWA时接触到的,对这个由PgSQL堆叠出来的数据库产品还不是很了解,当时的焦点还在DWA本身的硬件上,当然不可否认,DWA还是有一些特点的。

后来,我们发现普通的PC+SAS磁盘具备非常好的吞吐能力,完全不逊于某些昂贵的存储设备。这样我们就尝试用PC+Greenplum搭建了一个 环境,效果完全超出了我们的预期,吞吐量完全超过了我们的大型存储。从那时开始,我们不再迷信那些昂贵的主机和存储,开始尝试一些新的东西,比如用 PC+SAS/SATA来堆叠廉价存储,用Greenplum来搭建数据仓库计算环境,搜索的hadoop集群,PC+SSD搭建OLTP数据库,用 Intel Nehalem来替代小型机等等。

昨天,去参加了数据仓库部门关于Greenplum的一个技术分享,期间大量列举了一些性能数据的对比,尤其是和当前的一套Oracle RAC的对比。结果不言而喻,在数据仓库的应用上,尤其是大数据量的处理,性能相差悬殊。这时问题就来了,很多人感觉这个产品太神奇了,可以解决数据仓库 的一切问题,好像它就是上帝赐予我们的礼物。最后好多人都在问:Oracle太烂了,用这么好的设备,性能还这么差,我们干嘛还要用?呜呼哀 哉,Greenplum是好,但并不“神奇”,我们不要被这些”神奇“的数据挡住了视线。

对于Greenplum,我其实也处于一知半解的状态,给大家讲原理未免有些力不从心,这里只简单给大家分析一下Greenplum为什么会快?他用了什么”神奇“的技术?

如何提升数据仓库的处理能力,有以下两个主要因素:第一,吞吐能力,就是所谓的IO;第二,并行计算能力。

我们都知道Oracle RAC是shared everything架构,而Greenplum是shared nothing架构。整个集群由很多个segment host(数据节点)+master host(控制节点)组成,其中每个segment host上运行了很多个PgSQL数据库(segment)。

<iframe id="iframe_0.9809646165074585" style="border: medium; border-image: none; width: 578px; height: 408px;" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.hellodb.net/wp-content/uploads/2009/07/greenplum.jpg?_=2644290%22%20style=%22border:none;max-width:578px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.9809646165074585',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no"></iframe>

数据在进入数据库时,首先要做数据分布的工作,即把一个表的数据尽可能均匀的分布到每个segment上,我们需要为每个表指定一个 distribute列,然后根据hash来做数据分布。这样做的目的就是要充分利用每个节点的IO能力,我们知道现在PC机的IO能力相当可观,象 DWA这种专门设计的数据节点,Sun Fire X4500 Server,在一个box内集成了48块SATA盘,号称“Scan 1 Terabyte of data in 60 seconds”。其实没必要买DWA,国内厂商都有那种磁盘密集型的PC,价格便宜量又足,我们一直用它。

<iframe id="iframe_0.3819953435020692" style="border: medium; border-image: none; width: 578px; height: 385px;" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.hellodb.net/wp-content/uploads/2009/07/greenplum2.jpg?_=2644290%22%20style=%22border:none;max-width:578px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.3819953435020692',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no"></iframe>

很多人在看到Greenplum架构的时候,第一个问题就是master机器承担了什么功能?它会不会成为系统的瓶颈?这也是Greenplum系 统的一个重要特点,master只承担非常少量的控制功能,以及和客户端的交互,完全不承担任何计算。如果存在一个中心节点的话,那意味着这个系统根本没 有办法线性扩展,因为master一定会成为系统的瓶颈。而Greenplum不存在这个问题,节点间的数据交互,不需要经过master,而是直接在节 点间就完成了。

现在,如果我们要查询某个表的数据,只要把工作分配给每个节点就行了,IO不再是问题,接下来要解决并行计算的问题,核心问题是多表做join。因 为表是通过DT列做分布的,所以每个节点通过DT列就知道数据在某个节点上,假设两个表用DT列做join,因为相同的数据都在相同的节点上,所以只需要 对应节点计算,然后合并结果就可以了。如果是非DT列做join,因为节点间不知道数据的分布,所以就会做一个数据重分布的过程 (redistribute)。我们看下面的例子,三个表都是用id列作为DT列,首先用id做join,因为设计到非DT列的join,这时 Greenplum会作redistribute的工作,作用就是重新按照hash做数据分布,这样做的目的就是要让节点知道数据在哪个节点上,以便完成 join的动作。我们看到后面的group by也做了redistribute,因为group by的也是非DT列,而hash aggregate动作也需要节点间交互数据,节点间也必须知道数据的分布。如果有redistribute动作,效率会高吗?因为 redistribute仅仅只针对需要的数据,而且全部在节点cache中完成,肯定要比DT列做join慢一些,但是效率还是非常高的。

<iframe id="iframe_0.4893581662418388" style="border: medium; border-image: none; width: 578px; height: 344px;" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.hellodb.net/wp-content/uploads/2009/07/greenplum3.jpg?_=2644290%22%20style=%22border:none;max-width:578px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.4893581662418388',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no"></iframe>

Greenplum真正发挥了并行无处不在的优势,在一个主机上同时启动多个PgSQL数据库,这样硬件上的多核CPU就可以充分发挥优势。有人问 我:Greenplum能并行处理多个任务吗?回答是:不可能。因为Greenplun已经将机器的IO和处理能力全部发挥出来了,再没有可能同时处理多 个任务。

Greenplum还有一个有意思的特性就是在数据装载时,不是我们一般想象的存在一个中心的数据分发节点,而是所有节点同时读取数据,然后根据hash算法,将属于自己的数据留下,将其他的节点的数据通过网络直接传送给他,所以数据装载的速度非常快。

Greenplum HA架构

<iframe id="iframe_0.5599700906339468" style="border: medium; border-image: none; width: 578px; height: 282px;" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.hellodb.net/wp-content/uploads/2009/07/greenplum4.jpg?_=2644290%22%20style=%22border:none;max-width:578px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.5599700906339468',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no"></iframe>

现在来看Greenplum并不神奇,其实Oracle RAC也是数据仓库非常好的解决方案,类似的技术Oracle全部都有。我们可以这样来做一个假设,如果针对某个固定的SQL,我可以同样用Oracle RAC来做Greenplum做的事情,根据SQL,我们可以把表做 Hash+Range分区(事实上Greenplum也是hash+range分区,用hash将数据分布到不同的数据库上,然后再用range将每个数 据库上的表做分区),再利用RAC的并行处理能力。Oracle也有partition-wise join这种类似功能,但是没有数据redistribute的操作。Oracle最大的问题还是在于shared everything的架构,导致IO的处理能力有限,我们的大型存储吞吐量也就1.4GB/S,而且扩展能力也有限。以前曾经介绍过的Oracle database machine,就是Oracle专门为数据仓库的提供的解决方案。

其实并存在什么神奇的技术,Greenplum之所以神奇是因为我们的场景发挥了他的特点,其实我们也可以设计一个场景来得到Greenplum很烂的结论,所以不要相信厂商的数据,不要相信什么可以解决一切问题的技术,那根本不存在。

分享到:
评论

相关推荐

    Greenplum技术架构介绍.pptx

    Greenplum 技术架构介绍 Greenplum 是一个全球领先的开源 MPP(Massively Parallel Processing)大数据平台,具有可扩展性、ACID 事务、分布式、简单易用、结构化、半结构化和非结构化数据处理能力。该平台可以满足...

    Greenplum数据仓库技术架构介绍.pptx

    Greenplum技术实现 Greenplum是基于PostgreSQL的分布式关系数据库管理系统,提供了高效的数据存储和计算性能。Greenplum的架构特点包括MPP ShareNothing海量并行处理、完全无共享、CPU计算能力、数据从Disk上的I/O...

    Postgres_2017象行中国杭州第一期_张文杰(卓刀)_Greenplum备份恢复浅析

    在本讲座"Postgres_2017象行中国杭州第一期_张文杰(卓刀)_Greenplum备份恢复浅析"中,张文杰(卓刀)深入探讨了Greenplum数据库的备份与恢复策略,这对于任何运行大型数据仓库或分析系统的组织来说都是至关重要的...

    Greenplum内核技术优化解读.pptx

    3. **流复制技术**:Greenplum 6.0引入了PostgreSQL原生的流复制技术,相比之前的Filerep机制,流复制降低了网络开销,减少了端口占用,增强了扩展性,为灾难恢复(DR)、持续数据保护(CDC)以及三副本配置奠定了...

    技术选型-DorisDB Vs ClickHouse Vs GreenPlum.pdf

    在进行OLAP(在线分析处理)技术选型时,常常需要对比不同的数据库系统以寻找最适合自己需求的解决方案。本文主要探讨了DorisDB、ClickHouse与GreenPlum三款OLAP数据库,并分析了各自的特点和性能表现。 首先,...

    Greenplum技术

    我们现在所处的时代是计算机信息技术迅猛发展的时代,信息的处理方式、IT管理方式、应用模式都发生了巨大的变化: 1)首先,过去10来年,计算机硬件技术得到了飞速发展,计算机的CPU、内存、网络等硬件设施在性能上...

    greenplum/postgresql驱动包:greenplum-1.0.jar

    《Greenplum与PostgreSQL数据库驱动详解》 在IT领域,数据库管理系统的高效运作是支撑企业数据处理和服务的核心。本文将深入探讨Greenplum和PostgreSQL两种数据库系统,以及它们对应的驱动包`greenplum-1.0.jar`的...

    greenplum数据库jdbc驱动下载

    绿盟(Greenplum)是一种基于MPP(大规模并行处理)架构的开源数据仓库系统,主要用于大数据分析和处理。JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一种标准接口。在Java应用...

    Greenplum技术深入介绍及产品规划.pptx

    **Greenplum技术深入介绍** Greenplum是一种高级的数据仓库和大数据分析平台,以其开源、大规模并行处理(MPP)架构以及强大的分析能力而知名。该系统基于PostgreSQL数据库,提供了一种分布式数据存储和处理的解决...

    greenplum的驱动

    《Greenplum数据库驱动详解与应用》 Greenplum,作为一个高效、可扩展的企业级大数据分析平台,广泛应用于数据仓库和大数据处理场景。其强大的并行处理能力与优秀的性能表现,使得众多企业和开发者青睐有加。本文将...

    GREENPLUM_5.1.4.zip

    《Greenplum数据库与Java连接实战指南》 在IT领域,大数据处理和分析已经成为不可或缺的一部分,而Greenplum作为一款高效、可扩展的并行数据库系统,被广泛应用于大规模数据仓库和数据分析场景。本文将围绕...

    greenplum 简介及数据库对比

    greenplum 简介及数据库对比 。 greenplum hive infobright 对比。

    greenplum安装包

    绿盟(Greenplum)是一款基于MPP架构的开源大数据分析平台,专为大规模数据仓库和分析设计。它由Pivotal公司开发,现在成为Apache软件基金会的顶级项目。Greenplum提供了高度并行的数据处理能力,使得企业能够快速、...

    greenplum管理员手册

    - **Greenplum Interconnect**:Greenplum集群内部通信机制,用于实现各组件之间的高效数据交换与通信,是实现高性能并行处理的关键技术之一。 - **Redundancy and Failover in Greenplum Database**: - **Segment...

    greenplum.jar.zip

    《Pivotal Greenplum数据库连接驱动详解》 在数据处理和分析领域,Pivotal Greenplum是一款广泛使用的开源大数据分析平台。它基于 PostgreSQL 构建,具有强大的并行处理能力,尤其适合大规模的数据仓库和数据分析...

    Greenplum日常运维手册

    Greenplum日常运维,针对运维dba,pivotal,postgresql

    Greenplum数据库文档(中文版)

    文档中包含了关于如何高效使用Greenplum数据库的最佳实践指南,这部分内容强调了最佳实践的重要性——即那些被证明能够带来更好结果的方法和技术。这些最佳实践来源于实践经验,并经过验证,可以可靠地实现预期目标...

    greenplum常用函数-基础

    Greenplum是基于PostgreSQL的开源分布式并行数据仓库,专为大数据分析而设计。在数据仓库的使用过程中,掌握一些常用函数对于提升工作效率和维护数据准确性至关重要。根据给定的文件内容,我们将详细介绍Greenplum中...

    greenplum_jdbc_5.1.4.zip

    《Greenplum JDBC驱动5.1.4详解》 在大数据处理领域,Greenplum数据库以其优秀的并行处理能力和大规模数据存储能力而受到广泛关注。为了方便Java开发者与Greenplum数据库进行交互,Pivotal公司提供了Greenplum JDBC...

    GreenPLum6-1.pdf

    GreenPlum6官方文档中文翻译,如下为节选: 有关配置,管理和监控Greenplum数据库安装以及管理,监控和使用数 据库的信息。该指南还包含有关Greenplum数据库架构和概念(例如 并行处理)的信息。 Greenplum...

Global site tag (gtag.js) - Google Analytics