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 查詢,建表這些工作輪不到實習生來做。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42950.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42950.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42950.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從Java開發者到.NET Core初級工程師學習路線:目錄

C#語言基礎 1.1 C#語法概覽 1.2 變量和數據類型 1.3 運算符和表達式 1.4 控制流語句 1.5 方法和參數 1.6 類和對象 1.7 繼承和多態 1.8 接口和抽象類 1.9 委托和事件 1.10 泛型 1.11 LINQ (Language Integrated Query) 1.12 異步編程 (async/await) 1.13 異常處理 1.14 文件I/O…

IOC、DI<3> IServiceConllection 自定義IOC含屬性注入、多實現注入,方法注入

using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks;namespace IOC.Common {public class ZenServiceCollection : IZenServiceCollection{// 記錄IOC注冊的抽象、實現private Di…

SpringSecurity初始化過程

SpringSecurity初始化過程 SpringSecurity一定是被Spring加載的&#xff1a; web.xml中通過ContextLoaderListener監聽器實現初始化 <!-- 初始化web容器--><!--設置配置文件的路徑--><context-param><param-name>contextConfigLocation</param-…

sql注入問題批量處理

問題&#xff1a;SQL注入修改&#xff0c;歷史代碼全是${};無法修改的比如表名&#xff0c;列名&#xff0c;動態排序之類的不改&#xff0c;其他的都要修改完成 背景&#xff1a;新公司第一個任務就是SQL注入的修改&#xff0c;歷史sql全部都是${},一個個調整不太合適只能批量…

機場的出租車問題折線圖

分析并可視化機場離場車輛數數據 本文將詳細介紹如何使用Python的正則表達式庫re和繪圖庫matplotlib對機場離場車輛數數據進行分析和可視化。以下是具體步驟和代碼實現。 數據資源&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1rU-PRhrVSXq-8YdR6obc6Q?pwd1234 提…

Android C++系列:Linux常用函數和工具

1. 時間函數 1.1 文件訪問時間 #include <sys/types.h> #include <utime.h> int utime (const char *name, const struct utimebuf *t); 返回:若成功則為 0,若出錯則為- 1如果times是一個空指針,則存取時間和修改時間兩者都設置為當前時間; 如果times是非空指針…

一個python文件實現openai 轉換請求轉換成 ollama

最近在微軟開源了GraphRAG,項目&#xff0c;是一個很棒的項目&#xff0c;本著研究學習的態度下載了該項目測試&#xff0c;發現目前只可以使用openai chat gpt,或azure open chat gpt,也就是說意味著資料要上傳到第三方網站處理&#xff0c;為了本地的ollama也可以使用特意開發…

輪播圖案例

丐版輪播圖 <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title> 基礎輪播圖 banner 移入移出</t…

6000字以上論文參考:基于Java+SpringMvc+Vue技術的實驗室管理系統設計與實現

可參考&#xff1a;基于JavaSpringMvcVue技術的實驗室管理系統設計與實現&#xff08;6000字以上論文參考&#xff09;-CSDN博客 論文參考&#xff1a;

【python】字典、列表、集合綜合練習

1、練習1(字典) 字典dic,dic {‘k1’:‘v1’, ‘k2’: ‘v2’, ‘k3’: [11,22,33]} (1). 請循環輸出所有的key dic {"k1": "v1", "k2": "v2", "k3": [11, 22, 33]} for k in dic.keys():print(k)k1 k2 k3(2). 請循環輸…

2024 WAIC|第四范式胡時偉分享通往AGI之路:行業大模型匯聚成海

7月4日&#xff0c;2024世界人工智能大會&#xff08;WAIC&#xff09;正式開幕。此次大會圍繞核心技術、智能終端、應用賦能等板塊展開&#xff0c;展覽規模、參展企業數均達歷史最高。第四范式受邀參展&#xff0c;集中展示公司十年來在行業大模型產業應用方面的實踐。在當天…

【知網CNKI-注冊安全分析報告】

前言 由于網站注冊入口容易被黑客攻擊&#xff0c;存在如下安全問題&#xff1a; 暴力破解密碼&#xff0c;造成用戶信息泄露短信盜刷的安全問題&#xff0c;影響業務及導致用戶投訴帶來經濟損失&#xff0c;尤其是后付費客戶&#xff0c;風險巨大&#xff0c;造成虧損無底洞…

dockerfile里的copy只能使用相對路徑嗎?

在 Dockerfile 中&#xff0c;COPY 指令既可以使用相對路徑&#xff0c;也可以使用絕對路徑&#xff08;但絕對路徑的使用方式和上下文有關&#xff09;。不過&#xff0c;在實踐中&#xff0c;你通常會看到使用相對路徑&#xff0c;因為 Dockerfile 的構建上下文&#xff08;b…

NewspaceGPT帶你玩系列之【Song Maker】

目錄 注冊一個賬號&#xff0c;用qq郵箱&#xff0c;然后登錄選一個可用的Plus&#xff0c;不要選3.5探索GPT今天的主角是【Song Maker】翻譯一下用漢語吧我寫詞。你譜曲和其他伴奏&#xff0c;例子&#xff1a; 搖滾&#xff0c;憂傷&#xff0c;吉他&#xff0c;鼓&#xff0…

聊一聊Oracle的空間計算函數SDO_NN

網上對這個函數介紹的很少&#xff0c;對使用上也很模糊&#xff0c;我來補充一下&#xff0c;讓大家了解一下這個函數 from test1 y, test2 p where SDO_NN(p.geom,y.geom,sdo_num_res1, 0.5 )TRUE; 上面這個表達式的含義也就是說在test2中找到一個距離test1很近的&#x…

Android約束布局的概念與屬性(1)

目錄 1&#xff0e;相對定位約束2&#xff0e;居中和偏移約束 約束布局&#xff08;ConstraintLayout&#xff09;是當前Android Studio默認的布局方式&#xff0c;也是最靈活的一種布局方式。約束布局推薦使用所見即所得的模式進行布局&#xff0c;約束布局的大部分布局可以通…

超詳細的 Linux 環境下 Anaconda 安裝與使用教程

超詳細的 Linux 環境下 Anaconda 安裝與使用教程 前言 在數據科學和機器學習領域&#xff0c;Anaconda 是一個非常受歡迎的發行版&#xff0c;提供了許多常用的包和工具。本文將詳細介紹如何在 Linux 系統上安裝和配置 Anaconda 環境&#xff0c;并展示如何高效地使用它。 一…

CentOS7下安裝Doris

Doris簡介 Apache Doris 是一款基于 MPP 架構的高性能、實時的分析型數據庫&#xff0c;以高效、簡單、統一的特點被人們所熟知&#xff0c;僅需亞秒級響應時間即可返回海量數據下的查詢結果&#xff0c;不僅可以支持高并發的點查詢場景&#xff0c;也能支持高吞吐的復雜分析場…

從0到1搭建個性化推送引擎:百數教學帶你掌握核心技術

百數低代碼的推送提醒功能允許用戶高度自定義提醒規則&#xff0c;支持多種提醒方式&#xff08;如釘釘、企業微信、微信、短信、語音、郵件等&#xff09;&#xff0c;以滿足不同場景下的需求。 通過預設字段和模板&#xff0c;用戶可以快速編輯提醒內容&#xff0c;減少重復…

BaseServlet的封裝

創建BaseServlet的必要性 如果不創建BaseServlet&#xff0c;現在我們只要實現一個功能&#xff0c;我們就需要創建一個servlet! 例如:用戶模塊(登錄&#xff0c;注冊&#xff0c;退出錄&#xff0c;激活&#xff0c;發送郵件等等功能) 也就是說&#xff0c;我們必須要創建一…