Greenplum(一)【MPP 架构 数据类型】

1、Greenplum 入门

        Greenplum 是基于 MPP 架构的一款分布式分析型数据库,具备关系型数据库的特点,因为它处理的是结构化的数据,同时具备大数据分布式的特点。

1.1、MPP 架构

        MPP(Massively Parallel Processing)架构是一种用于处理大规模数据的计算架构,它通过将任务分配给多个处理单元并行执行,以提高处理速度和性能MPP 架构的由来可以追溯到对大规模数据处理需求的不断增长,传统的单一处理器或对称多处理器(SMP)架构无法满足这些需求。MPP 架构允许在大规模数据集上实现水平扩展,通过添加更多的处理单元来增加计算和存储能力。

  1. 分布式存储: 面对海量数据和计算时,采用大事化小的思路,对数据进行分割,数据分割后单独存储,数据处理消耗的资源也是相互隔开的,对于MPP数据库来讲,整个数据库由多个完全独立的数据库构成,各个拥有完整的数据存储、数据管理、数据操作能力。
  2. 并行处理: MPP 架构通过将任务分解成小块,并同时在多个处理单元上执行这些任务来实现并行处理。每个处理单元负责处理数据的一个子集,然后将结果合并以生成最终的输出。
  3. 共享无状态架构 MPP 系统通常采用共享无状态的架构,基于网络实现节点互联,形成一个整体对外提供服务,节点间互不干扰,即Share Nothing,不共享磁盘和计算能力。每个节点之间没有共享的状态,每个节点都可以独立处理查询请求,并将结果合并返回给用户。与传统的共享架构不同,MPP采用非共享架构(Share Nothing),将单机数据库节点组成集群,每个节点拥有独立的磁盘和内存系统,通过专用网络或商业通用网络连接彼此、协同计算,从而提供整体数据处理服务。这使得系统更容易水平扩展,因为可以简单地添加更多的节点,而不需要共享状态的复杂管理。

  4. 负载平衡: MPP 数据库通常具有负载平衡机制,确保任务在各个节点上均匀分布,避免某些节点成为性能瓶颈。
  5. 高可用性: 为了提高系统的可用性,MPP 架构通常设计成具有容错和故障恢复机制。如果一个节点出现故障,系统可以继续运行,而不会丢失数据或中断服务。

MPP 架构的缺点:如果整个集群有straggler,会导致整个engine的性能下降到该straggler的能力,木桶短板,故MPP架构不适合异构的机器,要求各节点配置一样

1.2、Greenplum

        Greenplum 是基于开源 PostgreSQL 的分布式数据库,采用 shared-nothing 架构,即主机、操作系统、内存、存储都是每台服务器独立自我控制,不存在共享。

        Greenplum 本质上是一个关系型数据库集群(可以理解为多个 MySQL 服务器组成的集群),实际上是由多个独立的数据库服务组合而成的一个逻辑数据库。

1.3、Greenplum 的组成

        GreenPlum 数据库是由 Master Server、Segment Server 和 Interconnect 三部分组成,Master Server 和 Segment Server 的互联使用 Interconnect。

        Greenplum是一个关系型数据库,是由数个独立的数据服务组合成的逻辑数据库,整个集群由多个数据节点(Segment Host)和控制节点(Master Host)组成。在典型的 Shared-Nothing中,每个节点上所有的资源的CPU、内存、磁盘都是独立的,每个节点都只有全部数据的一部分,也只能使用本节点的数据资源。在Greenplum中,需要存储的数据在进入到表时,先进行数据分布的处理工作,将一个表中的数据平均分布到每个节点上,并为每个表指定一个分布列(Distribute Column),之后便根据Hash来分布数据,基于 Shared-Nothing 的原则,Greenplum这样处理可以充分发挥每个节点处IO的处理能力。

Master 节点:简单说就是用来处理客户端请求的,以及把各个节点的计算结果汇总起来返回给客户端。它是整个系统的控制中心和对外的服务接入点,它负责接收用户SQL请求,将SQL生成查询计划并进行并行处理优化,然后将查询计划分配到所有的 Segment 节点并进行处理,协调组织各个Segment节点按照查询计划一步一步地进行并行处理,最后获取到Segment的计算结果,再返回给客户端。Master节点一般只有一个或二个(高可用)。

Segment节点:是Greenplum执行并行任务的并行计算节点,它接收Master的指令进行MPP并行计算,因此所有Segment节点的计算性总和就是整个集群的性能,通过增加Segment节点,可以线性化得增加集群的处理性能和存储容量,Segment节点可以是1~10000个节点。

Interconnect:是Master节点与Segment节点、Segment节点与Segment节点之间进行数据传输的组件,它基于千兆交换机或者万兆交换机实现数据在节点之间的高速传输。是一个非常强大的网络通信组件。

        外部数据在加载到Segment时,采用并行数据流进行加载,直接加载到Segment节点,这项独特的技术是Greenplum的专有技术,保证数据在最短时间内加载到数据库中。

1.4、Greenplum 的优缺点

1优点

1. 数据存储

        采取MPP架构的数据库系统可以对海量数据进行管理。

2. 高并发

        Greenplum利用强大并行处理能力提供并发支持。

3. 线性扩展

        Greenplum 支持数以千、万计的节点扩展。

4. 高性价比

        Greenplum 在普通的x86 Server上就能达到很高的性能,而且维护成本相比同类厂商也低许多,因此性价比很高。

5. 反应速度

        Greenplum通过准实时、实时的数据加载方式,实现数据仓库的实时更新,进而实现动态数据仓库(ADW)。

6. 高可用性

        对于主节点,Greenplum提供Master/Stand by机制进行主节点容错,当主节点发生错误时,可以切换到Stand by节点继续服务。

7. 系统易用

        Greenplum 产品是基于流行的 PostgreSQL 之上开发(站在巨人的肩膀上),几乎所有的PostgreSQL客户端工具及PostgreSQL应用都能运行在Greenplum平台上,在Internet上有着丰富的PostgreSQL资源供用户参考。

2缺点

1. 主从双层架构,并非真正的扁平架构,存在性能瓶颈和SPOF单点故障(通过备用Master实现高可用已解决)。

2. 无法支持数据压缩态下的DML操作,不易于数据的维护和更新。(可进可退,不常用的冷数据可以压缩,要做更新的时候可以先解压缩再做操作)

3. 单个节点上的数据库没有并行和大内存使用能力,必须通过部署多个实例(segment servers)来充分利用系统资源,造成使用和部署很复杂。(MPP 架构单台节点能力有限,可能需要部署多个实例去并行处理数据,区别于 Yarn 的资源共享,任务可以分配给别的节点)

2、Greenplum 数据类型

Greenplum 的安装这里省略,主要记录一下启停命令,防止之后忘记。

  • 使用创建好的 gpadmin 用户,启动 Greenplum:
-- 遇到问题输入y
gpstart
  •  查看集群状态
gpstate -f
  • 关闭集群(需要把客户端先关闭,比如 DataGrip 连接) 
-- 遇到问题输入y 询问等待模式(s 默认) 快速模式(f) 立即模式(i) 输入f
gpstop

2.1、基本数据类型

类型

类比Java

长度

描述

范围

bigint

long

8字节

大范围整数

-9223372036854775808 到 +9223372036854775807

smallint

short

2字节

小范围整数

-32768到+32767

integer(int)

int

4字节

常用整数

-2147483648 到 +2147483647

decimal

可变长

用户指定的精度,精确

小数点前 131072 位;小数点后 16383 位

real

4字节

可变精度,不准确

6位十进制数字精度

double precision

double

8字节

可变精度,不准确

15位十进制数字精度

smallserial

2字节

自增的小范围整数

1到32767

serial

4字节

自增整数

1到2147483647

bigserial

8字节

自增的大范围整数

1到9223372036854775807

character

char

别名char

定长,不足补空白

character varying

别名varchar

变长,有长度限制

text

变长,无长度限制

timestamp

8字节

日期和时间,无时区

4713 BC到294276 AD

timestamp with time zone

8字节

日期和时间,有时区

4713 BC到294276 AD

date

4字节

只用于日期

4713 BC到5874897 AD

boolean

1字节

true/false

money

8字节

货币金额

-92233720368547758.08 到 +92233720368547758.07

下面我们尝试创建一个简单的表并插入数据: 

CREATE TABLE stu(
    id      int,
    name    text,
    age     smallint,
    weight   double precision);

insert into stu values
                       (1,'李大喜',18,80.5),
                       (2,'李元芳',25,88.8);

select * from stu;

注意:建表时会提示 Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'id' as the Greenplum Database data distribution key for this table. 这是提醒建表时指定分布键和分布策略,默认第一个字段(或主键)和hash策略。

2.2、复杂数据类型

2.2.1、枚举类型

相当于 Java 的 Enum 类型,使用 create type 命令创建;

-- 创建枚举类型
CREATE TYPE season AS ENUM('Spring','Summer','Autumn','Winter');

-- 创建一个带有枚举类型的表
CREATE TABLE user_season(
    name text,
    sea season
);

INSERT INTO user_season
VALUES
       ('春招','Spring'),
       ('秋招','Autumn');

SELECT * FROM user_season;

2.2、几何类型

类型

大小

描述

表现形式

point

16字节

平面中的点

(x,y)

line

32字节

直线

((x1,y1),(x2,y2))

lseg

32字节

线段

((x1,y1),(x2,y2))

box

32字节

矩形

((x1,y1),(x2,y2))

path

16+16n字节

路径(与多边形相似)

((x1,y1),...)

polygon

40+16n字节

多边形

((x1,y1),...)

circle

24字节

<(x,y),r> (圆心和半径)

-- 创建带有几何类型的表
CREATE TABLE shapes(
    id serial PRIMARY KEY , -- 自增主键
    point_col point, -- 点
    line_col line, -- 线
    polygon_col polygon -- 多边形
);

INSERT INTO shapes VALUES
(1,point(1,1),line '[(0,0),(2,2)]',polygon'((0,0),(1,0),(1,1),(0,1))');

-- 根据点去查(不能使用 = )
SELECT * FROM shapes WHERE point_col <-> point(1,1) < 0.0001;
-- 根据直线去查询(可以使用 =)
SELECT * FROM shapes WHERE line_col = line '[(0,0),(2,2)]';
-- 根据多边形去查(必须使用 ~=)
SELECT * FROM shapes WHERE polygon_col ~= polygon '((0,0),(1,0),(1,1),(0,1))';

2.3、网络地址类型

类型

描述

说明

cidr

7或19字节

IPv4 或 IPv6 网络

inet

7或19字节

IPv4 或 IPv6 主机和网络

macaddr

6字节

MAC 地址

-- 创建包含网络地址数据类型的表
create table network_addresses (
    id serial primary key,
    ip_address inet,
    network cidr,
    mac_address macaddr
);

-- 插入数据
insert into network_addresses (ip_address, network, mac_address)
values
('192.168.1.1/24', '192.168.1.0/24', '08:00:2b:01:02:03');

-- 查询数据
select * from network_addresses;

-- 查询特定的 IP 地址
select * from network_addresses where ip_address = inet '192.168.1.1';
select * from network_addresses where host(ip_address) = '192.168.1.1';

-- 查询特定的网络
select * from network_addresses where network = cidr '192.168.1.0/24';

-- 查询特定的 MAC 地址
select * from network_addresses where mac_address = macaddr '08:00:2b:01:02:03';

-- 更新数据
update network_addresses set ip_address = inet '192.168.1.2' where id = 1;

-- 删除数据
delete from network_addresses where id = 1;

2.4、JSON

 数仓中 Maxwell 同步过来的数据就是 json 类型,我们当时是使用结构体来存储的; 

-- json 类型
CREATE TABLE json_demo(
    id serial PRIMARY KEY ,
    data jsonb
);

INSERT INTO json_demo (data) VALUES
('{"name": "李大喜","age": 18,"city": "上海"}');

SELECT * FROM json_demo;

SELECT data->>'name' AS name FROM json_demo; -- 李大喜

注意:这里需要注意 json 段的取值方式; 

2.5、数组类型

        GreenPlum 允许将字段定义成变长的多维数组。数组可以是任何基本类型或用户定义类型,枚举类型或复合类型。

-- 数组类型
CREATE TABLE array_demo(
    id serial PRIMARY KEY ,
    numbers int[]
);

INSERT INTO array_demo (numbers) VALUES
('{1,2,3,4,5,6}');

SELECT * FROM array_demo;
-- gp 的数组下标是从 1 开始的
SELECT numbers[1] FROM array_demo;
-- 将数组展开
SELECT id,unnest(numbers) FROM array_demo;

2.6、复合类型

-- 复合类型
CREATE TYPE student as (
    name text,
    age int,
    sex char,
    grade double precision
);

CREATE TABLE student_demo(
    id serial PRIMARY KEY ,
    student_info student
);

INSERT INTO student_demo (student_info) VALUES
( ( '燕双鹰',20,'男',98.5 ));

SELECT * FROM student_demo;

-- 复合类型必须加括号
SELECT (student_info).age FROM student_demo WHERE (student_info).name = '燕双鹰';

总结

        学习 Greenplum 主要是因为之前接触过另一款 MPP 架构的数据库——StarRocks,但是资料不是那么完善,没有项目能够练习。尽管实习的公司用的就是 StarRocks 引擎,但是除了基本常规的 SQL 查询,建表这些工作轮不到实习生来做。

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

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

相关文章

同方威视受邀盛装亮相2024长三角快递物流展(杭州)助力行业物畅其流

同方威视技术股份有限公司携安全检测产品和综合解决方案&#xff0c;盛装亮相2024长三角快递物流展&#xff08;杭州&#xff09; 展位号&#xff1a;3C馆A07-1 时间&#xff1a;2024年7月8-10日 地址&#xff1a;杭州国际博览中心&#xff08;浙江省杭州市萧山区奔竞大道35…

实现前端项目自动构建和部署(Gitee Go)

前言 相信所有的前端开发者都希望将自己的代码部署在服务器上让所有人都能访问到&#xff0c;但是却不知道如何进行部署。其实要是实现代码上线非常简单&#xff0c;我们只需要将build之后的代码上传到服务器&#xff0c;然后通过Nginx起一个服务指向我们build后的代码就可以了…

解析MySQL核心技术:视图的实用指南与实践案例

在数据库管理中&#xff0c;MySQL视图&#xff08;View&#xff09;是一种强大的功能&#xff0c;利用它可以简化复杂查询、提高数据安全性以及增强代码的可维护性。本篇文章将详细介绍MySQL视图的相关知识&#xff0c;包括视图的创建、修改、删除、使用场景以及常见的最佳实践…

WAIC热点聚焦|具身智能简介:AI新浪潮的领跑者

WAIC热点聚焦|具身智能简介&#xff1a;AI新浪潮的领跑者 引言 随着"具身智能"&#xff08;Embodied Intelligence&#xff09;的火热讨论&#xff0c;2024年标志着人机交互新时代的开启。在大模型技术的推动下&#xff0c;机器人响应语音指令成为现实&#xff0c;…

如何自动筛选螺丝不良品?

四角螺丝是一种特殊设计的螺丝&#xff0c;其螺纹头部呈四个平行的角状结构&#xff0c;与传统的六角螺丝相比具有独特的外观和功能。这种设计使得四角螺丝在安装和拆卸时更容易使用&#xff0c;并提供了更好的扭矩传递效率。四角螺丝头部呈现四个平行的角&#xff0c;与常见的…

系统级应用锁的实现方法

前言: 应用锁是一种常见的需求&#xff0c; 下面提供一个个人认为还比较完美的解决方法。本篇从两个方面详述应用锁的实现方法。 一. 流程图 二. 实现细节 一.流程图 二. 实现效果及细节

RocketMQ复杂过滤尝试

需求 消息实体&#xff0c;根据实体中的一个字段&#xff0c;决定推给多个业务系统。 例&#xff1a;一个点位信息Bean&#xff0c;这个点位信息&#xff0c;设备、能源、安全都有用&#xff0c;那么点位信息表中有适用模块标识。 点位新增 需要通知所有勾选业务系统 tag -…

摄像机反求跟踪软件/插件 Mocha Pro 2024 v11.0.2 CE Win

AE/PR/OFX/达芬奇/AVX插件 | 摄像机反求跟踪软件Mocha Pro 2024 v11.0.2 CE Win-PR模板网 Mocha Pro 软件(插件)&#xff0c;用于平面运动跟踪、3D跟踪、动态观察、对象移除、图像稳定和PowerMesh有机扭曲跟踪等功能。整合了SynthEyes核心的3D跟踪算法&#xff0c;能够快速自动…

Pluck-CMS-Pluck-4.7.16 远程代码执行漏洞(CVE-2022-26965)

前言 CVE-2022-26965 是一个影响 Pluck CMS 4.7.16 版本的远程代码执行&#xff08;RCE&#xff09;漏洞。该漏洞允许经过身份验证的用户通过 /admin.php?actionthemeinstall 的主题上传功能执行任意代码。 漏洞细节 在 Pluck CMS 的管理界面中&#xff0c;管理员可以上传主…

【数据结构】(C语言):堆(二叉树的应用)

堆&#xff1a; 此处堆为二叉树的应用&#xff0c;不是计算机中用于管理动态内存的堆。形状是完全二叉树。堆分两种&#xff1a;最大堆&#xff0c;最小堆。最大堆&#xff1a;每个节点比子树所有节点的数值都大&#xff0c;根节点为最大值。最小堆&#xff1a;每个节点比子树…

千万不要用国产BI,不然你会发现它性价比奇高——以奥威BI软件为例

在信息技术日新月异的今天&#xff0c;企业对于商业智能&#xff08;BI&#xff09;软件的选择往往陷入了一个误区&#xff1a;盲目追求国际品牌&#xff0c;却忽视了身边那些性价比极高的国产精品。如果你不慎踏入了“千万不要用国产BI”的陷阱&#xff0c;那么奥威BI软件将是…

PHP家政服务预约单开版微信小程序系统源码

&#x1f3e0; —— 便捷生活&#xff0c;从指尖开始&#x1f4aa; &#x1f308;【开篇&#xff1a;家政新风尚&#xff0c;一键触达】 在忙碌的生活节奏中&#xff0c;你是否渴望拥有一个温馨、整洁的家&#xff0c;却又苦于找不到合适的家政服务&#xff1f;现在&#xff…

C++_03

1、构造函数 1.1 什么是构造函数 类的构造函数是类的一种特殊的成员函数&#xff0c;它会在每次创建类的新对象时执行。 每次构造的是构造成员变量的初始化值&#xff0c;内存空间等。 构造函数的名称与类的名称是完全相同的&#xff0c;并且不会返回任何类型&#xff0c;也不…

对标GPT-4o!不锁区、支持手机、免费使用,Moshi来啦!

7月4日凌晨&#xff0c;法国知名开源AI研究实验室Kyutai在官网发布了&#xff0c;具备看、听、说多模态大模型——Moshi。 Moshi功能与OpenAI在5月14日展示的最新模型GPT-4o差不多&#xff0c;可以听取人的语音提问后进行实时推理回答内容。但GPT-4o的语音模式要在秋天才能全面…

适合弱电行业的项目管理软件!找企智汇软件!

随着科技的不断发展&#xff0c;弱电行业对于项目管理的需求日益增强。为满足这一需求&#xff0c;企智汇推出了一款专为弱电行业打造的工程项目管理系统。 企智汇弱电行业工程项目管理系统以其专业性、高效性和智能性&#xff0c;赢得了业界的广泛认可。该系统深入融合了弱电…

仓库管理系统

create database Warehouse_management;//建库 use Warehouse_management; 一、建表 1、管理员信息表 CREATE TABLE ManagerInfo (Mno CHAR(3) PRIMARY KEY,Mname VARCHAR(10) NOT NULL,Mgender CHAR(1) DEFAULT 男,Mbirhdate DATE,Mtelephone CHAR(11) NOT NULL,Mhiredate …

数据预处理:统计关联性分析/数据清洗/数据增强/特征工程实例

专栏介绍 1.专栏面向零基础或基础较差的机器学习入门的读者朋友,旨在利用实际代码案例和通俗化文字说明,使读者朋友快速上手机器学习及其相关知识体系。 2.专栏内容上包括数据采集、数据读写、数据预处理、分类\回归\聚类算法、可视化等技术。 3.需要强调的是,专栏仅介绍主…

C++(第四天----拷贝函数、类的组合、类的继承)

一、拷贝构造函数&#xff08;复制构造函数&#xff09; 1、概念 拷贝构造函数&#xff0c;它只有一个参数&#xff0c;参数类型是本类的引用。如果类的设计者不写拷贝构造函数&#xff0c;编译器就会自动生成拷贝构造函数。大多数情况下&#xff0c;其作用是实现从源对象到目…

Access,Trunk,Hybrid网络设备链接类型详解

带着问题找答案&#xff1a;网络链路上的数据包怎么看&#xff0c;是否携带vlan-id如何看&#xff0c;以及如何设计链接类型满足用户要求&#xff0c;请看如下解析。 第一种&#xff1a;链接类型access 无标记数据帧 第二种&#xff1a;链接类型trunk 第三种&#xf…

最新mysql打开远程访问和修改最大连接数

这里写目录标题 1.使用navicat进入命令控制板,进入use mysql;2.查询用户表3.更新user表中root用户域属性&#xff0c;%表示允许外部访问4.执行以上语句之后再执行&#xff0c;FLUSH PRIVILEGES;5. 执行授权语句修改最大连接数 1.使用navicat进入命令控制板,进入use mysql; use…