Greenplum缺点

2024-03-18 19:48
文章标签 缺点 greenplum

本文主要是介绍Greenplum缺点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说起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.18789027263233343" 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.18789027263233343',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.840501765512368" 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.840501765512368',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.17964831515706808" 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.17964831515706808',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.6840042604336357" 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.6840042604336357',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缺点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/823455

相关文章

【python 连接 Greenplum】python 连接Greenplum数据库

Python和PostgrelSQL进行交互,需要安装三方库,PostgrelSQL跟mysql 的用法类似 pip install psycopg2 例子: import psycopg2 import psycopg2.extras conn = psycopg2.connect(host='localhost', port=6432, user='postgres', passwo

【mysql 存储过程】应用存储过程的优点与缺点

总结下使用存储过程的优缺点 一、存储过程优点 存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并存储起来,以后当需要数据库提供相同的服务时,只需再次执行该存储过程。 1.具有更好的性能 存储过程是预编译的,只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因

数据库索引的作用优点和缺点

为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能。  第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。  第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。  第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。  第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。  第五,通过使用索引,可以在

java并发编程(5)--CAS是什么 底层原理 缺点

一、CAS是什么?   看下⾯代码进⾏思考,此时number前⾯是加了volatile关键字修饰的,volatile不保证原⼦性,那么使 ⽤AtomicInteger是如何保证原⼦性的? 这⾥的原理是什么?CAS   class MyData {volatile int number = 0;AtomicInteger atomicInteger = new AtomicIntege

NLP-生成模型-2014:Seq2Seq【缺点:①解码器无法对齐编码器(Attention机制);②编码器端信息过使用或欠使用(Coverage机制);③解码器无法解决OOV(Pointer机制)】

《原始论文:Sequence to Sequence Learning with Neural Networks》 Seq2Seq模型是将一个序列信号,通过“编码&解码”生成一个新的序列信号,通常用于机器翻译、语音识别、自动对话等任务。 Seq2Seq(多层LSTM-多层LSTM)+Attention架构是Transformer提出之前最好的序列生成模型。 我们之前遇到的较为熟悉的序列问题,

Greenplum标量查询及常用示例

标量查询是指仅返回单个值的查询,而不是返回多行或多列的结果集。在Greenplum数据库中,标量查询通常用于获取单个值,以供其他查询、计算或条件判断使用。 以下是几个标量查询的示例: 1. 获取表中的最大值: SELECT MAX(column) FROM mytable; 2. 统计表中的行数: SELECT COUNT(*) FROM mytable; 3. 检查某个条件是否满

系统缺点

2017/05/13 现知的几个缺点: 1、存放数据流的数据结构虽然是链表,但却在开始的时候就进行初始化, 实际上退化为数组。 2、读取配置的文件的过程部分,可以模块化,这是其一。 另一部分,反正要读取的是这部分内容,可以直接将这部分内容读取到内存中,后面再释放,而不是多次读取文件的方式,这样反而浪费系统资源。 3、很多地方,不注重内存的管理,直接就申请了1000或者更多的位置,这是没用的。 4

Spring IOC的优、缺点

Spring IOC的优、缺点 1、优点: ①.简化了bean之间的依赖关系,使得bean的管理更加简单。 ②.提高了代码的可读性和可维护性。 ③.可以通过注解或XML配置文件来定义服务之间的依赖关系。 ④.可以动态地加载和注入Bean,提高了应用的灵活性和扩展性。 2、缺点 ①.对于大型应用,Bean对象之间的依赖关系可能会变得非常复杂,导致代码的维护变得困难。 ②.对于某些场景

Greenplum集群或者Postgresql出现死锁肿么办?

1、Greenplum集群或者Postgresql出现死锁肿么办?   由于Postgresql和Greenplum集群这数据库知识很深的,没有仔细研究,遇到问题真的不知道肿么处理,我遇到死锁,是采取了暴力手段,直接杀锁了。 1 [biehl@cen-gp-master ~]$ sudo su 2 [sudo] password for biehl: 输入密码,看不见的。 3 [root

传统零售运营模式有什么缺点?新零售模式下的运营思维好在哪里?

随着科技的进步、消费者需求的多样化以及市场竞争的加剧,传统零售模式已逐渐难以满足现代消费者对购物体验的期待。新零售,作为一个创新的概念,应运而生,它不仅代表着零售行业的未来趋势,更是一种全新的商业思维和运营模式。然而,许多企业在这一转型过程中,仍面临着传统运营思维的束缚,未能完全适应这一变化。 本文将深入探讨零售企业在传统运营思维中存在的局限,分析新零售模式下”以消费者为中心”的运营思维,并提出