GreenPlum简介

简介

  1. Greenplum是一家总部位于**美国加利福尼亚州,为全球大型企业用户提供新型企业级数据仓库(EDW)、企业级数据云(EDC)和商务智能(BI)提供解决方案和咨询服务的公司,在全球已有:纳斯达克,纽约证券交易所,Skype. FOX,T-Mobile;中国已有:中信实业银行东方航空公司阿里巴巴华泰保险,中国远洋(Cosco),李宁公司**等大型企业用户选择Greenplum的产品。
  2. 它的底层是基于开源的关系型数据库postgresql进行开发完成的
  3. Greenplum数据库是一种大规模并行处理(MPP)数据库服务器,其架构特别针对管理大规模分析型数据仓库以及商业智能工作负载而设计
  4. 当前使用的 OLTP程序中,用户访问一个中心数据库,如果采用SMP系统结构,它的效率要比采用MPP结构要快得多。而MPP系统在决策支持和数据挖掘方面显示了优势。

名词解释

  1. SMP与MPP
    1. SMP(Symmetric Multi-Processor)对称多处理器结构

      • 是指服务器中多个CPU对称工作,无主次或从属关系。
      • 各CPU共享相同的物理内存,每个 CPU访问内存中的任何地址所需时间是相同的,因此SMP也被称为一致存储器访问结构(UMA:Uniform Memory Access)
      • 对SMP服务器进行扩展的方式包括增加内存、使用更快的CPU、增加CPU、扩充I/O(槽口数与总线数)以及添加更多的外部设备(通常是磁盘存储)
      • SMP服务器的主要特征是共享,系统中所有资源(CPU、内存、I/O等)都是共享的。也正是由于这种特征,导致了SMP服务器的主要问题,那就是它的扩展能力非常有限
      • 对于SMP服务器而言,每一个共享的环节都可能造成SMP服务器扩展时的瓶颈,而最受限制的则是内存。由于每个CPU必须通过相同的内存总线访问相同的内存资源,因此随着CPU数量的增加,内存访问冲突将迅速增加,最终会造成CPU资源的浪费,使CPU性能的有效性大大降低
      • 在这里插入图片描述
    2. **MPP(Massively Parallel Processing)**大规模并行处理,是采用大量处理单元对问题进行求解的一种并行处理技术。是一种非共享架构,每个节点都有独立的操作系统和数据库等,节点之间信息交互只通过网络连接实现。简单的说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似)

      • 每个节点内的CPU不能访问另一个节点的内存,节点之间的信息交互是通过节点互联网络实现的,这个过程称为数据重分配
      • MPP适合出来结构化的数据,尤其是复杂的结构化查询(复杂查询经常使用多表联查、全表扫描等,牵涉的数据量十分庞大)
      • 在这里插入图片描述
    3. 两种结构的比较: 与传统的SMP架构明显不同,通常情况下,MPP系统因为要在不同处理单元之间传送信息,所以它的效率要比SMP要差一点,但是这也不是绝对的,因为 MPP系统不共享资源,因此对它而言,资源比SMP要多,当需要处理的事务达到一定规模时,MPP的效率要比SMP好。这就是看通信时间占用计算时间的比例而定,如果通信时间比较多,那MPP系统就不占优势了,相反,如果通信时间比较少,那MPP系统可以充分发挥资源的优势,达到高效率。

  2. OLTP(联机事务处理)与 OLAP(联机分析处理)
    1. OLAP全称为OnlineAnalyticalProcessing,它强调对大量历史数据的分析与处理。它的主要功能包括查询、分析、预测、数据挖掘等,为用户提供灵活的数据分析和快速决策支持。比如greenplum数据库
    2. OLTP全称为OnlineTransactionProcessing,它强调对数据的实时处理。OLTP系统通常用于处理企业的日常交易数据,例如订单处理、库存管理、银行交易等。它的主要功能是支持事务和实时数据处理,为用户提供高效的交易处理服务。比如mysql数据库

架构

  1. 主从结构。greenplum采用一主(Master)多从(Segment)的结构,Master负责查询解析、优化及任务分发,Segment负责查询处理、数据存储,双方通过Interconnect通信。总体架构图如下
    在这里插入图片描述

  2. master节点

    • 是整个系统的控制中心和对外的服务接入点,它负责接收用户SQL请求,将SQL生成查询计划并进行并行处理优化,然后将查询计划分配(dispatch)到所有的Segment节点进行并行处理,协调组织各个Segment节点按照查询计划一步一步地进行并行处理,最后获取到Segment的计算结果,再返回给客户端;从用户的角度看Greenplum集群,看到的只是Master节点,无需关心集群内部的机制,所有的并行处理都是在Master控制下自动完成的。Master节点一般只有一个或两个(互为备份),主备方案实现高可用
    • master上不包含任何用户数据,数据只存在于segment之上
  3. segment节点

    • 是Greenplum执行并行任务的并行运算节点,它接收Master的指令进行MPP并行计算,因此所有Segment节点的计算性能总和就是整个集群的性能,通过增加Segment节点,可以线性化得增加集群的处理性能和存储容量,Segment节点可以是1~10000个节点,它的数量决定greenplum的算力,可通过横向扩容提升整个数据库的算力及性能
    • 一个节点上可以有多个实例(一个节点简单理解为一个主机)
    • 每个实例都有自己独立的数据目录,以磁盘文件的方式保存用户数据
  4. Interconnect

    • 是Master节点与Segment节点、Segment节点与Segment节点之间的数据传输组件,它基于千兆交换机或万兆交换机实现数据在节点间的高速传输

数据存储与分布

  1. 存储

    1. 在Greenplum中,用户数据可按某种策略分布到不同节点的Segment实例中,每个实例都有自己独立的数据目录,以磁盘文件的方式存储用户数据。为了更好的AP性能,Greenplum在支持行存储的基础上,支持列存储。同时为了适应更多的应用场景,支持Appendonly表(只能insert,不能update、delete的一种表, 可以消除每行中的更新可见性信息负担,这可以为每一行节约大概20字节)与外部表(csv等文件)。用户可根据需要灵活进行选择,采用不同的存储策略保存不同时间的数据,比如最近三个月的数据使用堆表存储,更老的数据使用列存储,一年以前的数据使用外部表的方式存储在HDFS中。 在这里插入图片描述
  2. Greenplum提供了以下三种数据分布策略

    • 哈希分布:Hash分布是Greenplum最常用的数据分布方式,根据用户的分布键计算后的哈希值将数据分布到某个Segment上。分布键的选择非常重要,好的分布键应将数据均匀分布到各Segment上,同时在用户查询时尽量减少重分布

      create table t1(id, int) DISTRIBUTED BY (id);
      
    • 随机分布:采用循环的方式将一次插入的数据存储到不同的节点上,应尽量减少这种分布方式,除非不能确定一张表的哈希分布键或者不存在合理的能够避免数据倾斜的分布键。随机分布会采用循环的方式将一次插入的数据存储到不同的节点上。随机性只在单个 SQL 中有效,不考虑跨 SQL 的情况。譬如如果每次插入一行数据到随机分布表中,最终的数据会全部保存在第一个节点上。(一次插入一行和一次插入多行)

       create table t1 (id int) DISTRIBUTED RANDOMLY;
      
    • 复制表:即整张表在每个节点上都有完成的数据。一般适用于小表,这样可以减少查询执行过程中进行重分布或者广播

      CREATE TABLE student_rep (id int) DISTRIBUTED REPLICATED;
      

并行执行计划

  1. 三种数据的移动操作

    • Broadcast Motion (N:N):广播数据。每个节点向其他节点广播需要发送的数据。
    • Redistribute Motion (N:N):重新分布数据。利用 join 列数据的 hash 值不同,将筛选后的数据在其他 segment 重新分布
    • Gather Motion (N:1):聚合汇总数据。每个节点将 join 后的数据发到一个单节点上,通常是发到主节点 master 。
  2. 数据重分布和广播(优化器会计算广播与重分布两种方式各自的代价,选择代价低的方式进行)

    1. 数据准备

      1. -- 哈希分布
        CREATE TABLE student (
        	id int4 NULL,
        	"name" varchar(400) NULL
        )
        DISTRIBUTED BY ("name");
        
        -- 随机分布
        CREATE TABLE student_class (
        	id int4 NULL,
        	class_name varchar(255) NULL,
        	student_name varchar(255) NULL
        )
        DISTRIBUTED RANDOMLY;
        
        select *
        from
        	student st
        left join student_class sc on
        	st."name" = sc.student_name
        
    2. 重分布

      1. 即表的关联键和分布键不一致,因此数据需要重新分布来达到单库关联的效果
        在这里插入图片描述

参考文档

  1. 官方中文文档地址
  2. GP查询详解
  3. GP广播与重分布

关于管理和监控工具

  1. Greenplum数据库提供了标准的命令行工具来执行通常的监控和管理任务。
  2. Greenplum的命令行工具位于 $GPHOME/bin目录中并且在Master主机上执行。Greenplum为下列管理任务提供了实用工具
    1. 在一个阵列上安装Greenplum数据库
    2. 初始化一个Greenplum数据库系统
    3. 开始和停止Greenplum数据库
    4. 增加或者移除一个主机
    5. 扩展阵列并且在新的Segment上重新分布表
    6. 恢复失效的Segment实例
    7. 管理失效Master实例的故障切换和恢复
    8. 备份和恢复一个数据库(并行)
    9. 并行装载数据
    10. 在Greenplum数据库之间转移数据
    11. 系统状态报告

配置表

  1. gp_segment_configuration
    在这里插入图片描述

  2. 在这里插入图片描述

  3. 查看greenplum库各个节点数据的分布情况

    • select gp_segment_id,count(*) from table_name group by gp_segment_id;
      -- 查询数据在哪个节点上
      select gp_segment_id, * from student;
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/120117.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

idea 模板参数注释 {@link}

1. 新增组 2. 设置方法注释及变量 增加模板文本 ** * $param$ * return {link $return$} */3. 设置变量表达式 勾选跳过param 参数表达式 groovyScript("def result ;def params \"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toList();def param…

7.spark sql编程

目录 概述RDD ,Datasets,DataFrames 之间的区别Datasets , DataFrames和 RDD 入门people.jsonSparkSession创建 DataFramesDataFrame 操作编程方式运行 sql 查询创建 DatasetsDataFrames 与 RDDs 互相转换使用反射推断模式编码问题 编程指定 Schema官方文档的代码不全问题 结束…

idea使用gradle教程 (idea gradle springboot)2024

这里白眉大叔,写一下我工作时候idea怎么使用gradle的实战步骤吧 ----windows 环境----------- 1-本机安装gradle 环境 (1)下载gradle Gradle需要JDK的支持,安装Gradle之前需要提前安装JDK8及以上版本 https://downloads.gra…

Python - 面向现实世界的人脸复原 GFP-GAN 简介与使用

目录 一.引言 二.GFP-GAN 简介 1.GFP-GAN 数据 2.GFP-GAN 架构 3.GFP-GAN In Wave2Lip 三.GFPGAN 实践 1.环境搭建 2.模型下载 3.代码测试 4.测试效果 四.总结 一.引言 近期 wav2lip 大火,其通过语音驱动唇部动作并对视频质量进行修复,其中…

【微信小程序】新版获取手机号码实现一键登录(uniapp语法)(完整版附源码)

需求 如图,点击按钮,获取用户手机号实现一键登录,当然,用户也可以自行输入其他手机号进行登录 问题 要想获取用户手机号并不复杂,但由于近几年微信小程序获取手机号的api进行了更新,当前很多帖子使用的…

VB.NET—DataGridView控件教程详解

目录 前言: 过程: 第一步: 第二步: 第三步: 第四步: 第五步: 番外篇: 总结: 前言: DataGridView是.NET FormK中的一个Windows窗体控件,它提供了一个可视化的表格控件,允许用户以表格形式显示和编辑数据。它通常用于显示和编辑数据库…

Rust教程5:泛型和特征

文章目录 泛型函数特征特征泛型 Rust系列&#xff1a;初步⚙所有权⚙结构体和枚举类⚙函数进阶 泛型函数 Rust采纳了C中的泛型机制&#xff0c;并且形式上也几乎借鉴了C&#xff0c;示例如下 fn add<T: std::ops::Add<Output T>>(a:T, b:T) -> T {a b } fn…

Java智慧工地管理平台可视化大数据建造工地APP源码

建筑行业是国民经济的重要物质生产部门和支柱产业之一&#xff0c;同时&#xff0c;建筑业也是一个安全事故多发的高危行业。如何加强施工现场安全管理、降低事故发生频率、杜绝各种违规操作和不文明施工、提高建筑工程质量&#xff0c;是摆在各级政府部门、施工企业面前的一道…

一文学会Scala【Scala一站式学习笔记】

文章目录 为什么要学习Scala语言什么是Scala如何快速掌握Scala语言Scala环境安装配置Scala命令行 Scala的基本使用变量数据类型操作符if 表达式语句终结符循环高级for循环 Scala的集合体系集合SetListMapArrayArrayBuffer数组常见操作Tuple总结 Scala中函数的使用函数的定义函数…

Python+Selenium+Unittest 之selenium12--WebDriver操作方法2-鼠标操作1(ActionChains类简介)

在我们平时的使用过程中&#xff0c;会使用鼠标去进行很多操作&#xff0c;比如鼠标左键点击、双击、鼠标右键点击&#xff0c;鼠标指针悬浮、拖拽等操作。在selenium中&#xff0c;我们也可以去实现常用的这些鼠标操作&#xff0c;这时候就需要用到selenium中的ActionChains类…

Android transform旋转rotate圆角矩形图roundedCorners,Kotlin

Android transform旋转rotate圆角矩形图roundedCorners&#xff0c;Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.…

【IO多路转接】pollepoll

文章目录 1 :peach:poll:peach:1.1 :apple:poll函数接口:apple:1.2 :apple:poll接口的使用:apple:1.3 :apple:poll的优缺点:apple: 2 :peach:epoll:peach:2.1 :apple:epoll函数接口:apple:2.1.1 :lemon:epoll_create:lemon:2.1.2 :lemon:epoll_ctl:lemon:2.1.3 :lemon:epoll_wa…

pcie对phy的skew要求

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 pcie的设计中有这样一条要求&#xff0c;所有但phy/tx*_clk pin的clock skew要小于skew要求。 这里提供一下实现方法&#xff0c;如果你有更好的办法可以在评论区留言或者私信…

利用maven的dependency插件将项目依赖从maven仓库中拷贝到一个指定的位置

https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html 利用dependency:copy-dependencies可以将项目的依赖从maven仓库中拷贝到一个指定的位置。 使用默认配置拷贝依赖 如果直接执行mvn dependency:copy-dependencies&#xff0c;是将项目…

IP地址与MAC地址(硬件地址)的区别

IP地址和硬件地址都是用于标识网络设备的地址&#xff0c;但它们的作用和使用方式不同。IP地址是用于在网络中唯一标识一个设备的逻辑地址它是由网络协议栈分配的&#xff0c;可以动态地分配和改变。而硬件地址是设备的物理地址&#xff0c;也称为MAC地址&#xff0c;是由设备制…

TCP/IP的基础知识

文章目录 TCP/IP的基础知识硬件&#xff08;物理层&#xff09;网络接口层&#xff08;数据链路层&#xff09;互联网层&#xff08;网络层&#xff09;TCP/IP的具体含义传输层应用层&#xff08;会话层以上的分层&#xff09;TCP/IP分层模型与通信示例发送数据包的一个例子接收…

什么是微服务?与分布式又有什么区别?

什么是微服务&#xff0c;我们先从传统的单体结构进行了解&#xff0c;对两者进行对比。 单体结构 单体结构是一种传统的软件架构模式&#xff0c;它将应用程序划分为一组相互依赖的模块和组件。这些模块和组件通常都是构建在同一个平台上的&#xff0c;并且紧密耦合在一起。…

一种可以实现安全便捷文件摆渡的跨网文件安全交换软件

为了保护数据的安全性和完整性&#xff0c;很多企业都采用了内外网物理隔离的方式&#xff0c;防止核心数据泄露或被恶意篡改。然而&#xff0c;这也给企业内部或与外部合作伙伴之间的文件交换带来了很多不便和挑战。如何在保证数据安全的前提下&#xff0c;实现跨网文件的快速…

【h5 uniapp】 滚动 滚动条,数据跟着变化

uniapp项目 需求&#xff1a; 向下滑动时&#xff0c;数据增加&#xff0c;上方的日历标题日期也跟着变化 向上滑动时&#xff0c;上方的日历标题日期跟着变化 实现思路&#xff1a; 初次加载目前月份的数据 以及下个月的数据 this.getdate()触底加载 下个月份的数据 onReach…

缓冲流详解

缓冲流概述 缓冲流也称为高效流、或者高级流。之前学习的字节流可以称为原始流。 作用&#xff1a;缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能。 字节缓冲流 字节缓冲流性能优化原理&#xff1a; 字节缓冲输入流自带了8KB缓冲池&#xff0c;以后我们直接…