Greenplum 架構和核心引擎

Greenplum 架構和核心引擎

Greenplum 架構和核心引擎 1

學習地址 2

1 Greenplum 架構概述 2

1.1 概述簡介 2

1.2 MPP無共享靜態拓撲 3

1.3 集羣內數據分兩類 3

1.4 對用戶透明 4

1.5 用戶數據表 4

1.6 系統表/數據字典 5

1.7 數據分佈:並行化處理的根基 5

1.8 多態儲存:根據數據溫度選擇最佳的儲存方式 6

1.8.1 行儲存 6

1.8.2 列儲存 6

1.8.3 外部表 6

2 Greenplum SQL的執行過程 7

2.1 系統空閒狀態 7

2.2 客戶端建立會話鏈接 7

2.3 Master fork一個進程處理客戶端請求 8

2.4 QD建立和Segment的鏈接 8

2.5 segment fork 一個子進程處理QD的鏈接請求 9

2.6 客戶端發送查詢請求給QD 10

2.7 QD發送任務給QE 10

2.8 QD與QEs建立數據通信通道 11

2.9 QE各司其職 11

2.10 QE狀態管理 12

2.11 QD返回查詢結果給客戶端 12

3 Greenplum 主要設計思考 13

3.1 繼承自PostgreSQL的設計 13

3.2 主從架構 13

3.3 數據儲存 14

3.4 數據通信 14

3.5 三級並行計算 15

3.6 流水線執行 15

3.7 網絡 16

3.8 磁盤 16

學習地址

https://www.bilibili.com/video/av81898649?p=1

1 Greenplum 架構概述

1.1 概述簡介

ODBC與JDBC都是基於標準的SQL來執行的,支持很好的第三方工具

1.2 MPP無共享靜態拓撲

master與standby master 可以實現集羣的高可用,通過共享高速的網絡傳送數據,除了網絡是共享的其他的都是無共享的

1.3 集羣內數據分兩類

集羣內數據分兩類:用戶數據與元數據

global 日誌在所有的節點上都是一樣的

local 日誌一般都是一些統計信息等系統表

segment data 保存的用戶數據信息

1.4 對用戶透明

對用戶可以看到以下的instance

1.5 用戶數據表

在以下的圖標中可以看出用戶數據已經打散到每個節點上,每個節點上有一部分,master有元信息

1.6 系統表/數據字典

對於系統表/數據字典全部複製到每個節點上

1.7 數據分佈:並行化處理的根基

集羣按照算法均勻的把數據分不到不同的分區中,便於查快的查詢

1.8 多態儲存:根據數據溫度選擇最佳的儲存方式

一般的數據都是有熱度的,一般的越新的數據價值越高,越老的數據價值越低

1.8.1 行儲存

1、訪問多列時速度快

2、支持高效更新和刪除

3、AO行儲存主要爲插入而優化

1.8.2 列儲存

1、列儲存更適合壓縮

2、查詢列子集時速度快

3、不同列可以使用不同的壓縮方式:gzip(1-9),quicklz,delta,RLE,zstd

1.8.3 外部表

1、歷史數據和不常訪問的數據儲存在HDFS或者其他外部系統中

2、無縫查詢所有數據

3、Text,CSV,Bianry,Avro,Parquest,ORC格式

2 Greenplum SQL的執行過程

0、The system at rest

1、Client connects via the entry postmaster

2、Entry postmaster forks a new backend -- the QD

3、QD connects to segment via the segment postmasters

4、Segment postmasters fork initial gang of QEs

5、Client submits a query to the QD

6、QD plans query and submits plans to QEs

7、QD and QEs setup interconnect routes according to plan

8、QD and QEs execute their slices sending tuples up the slice tree

9、QEs return status to QD

10、QD returns result set and status to the client

2.1 系統空閒狀態

1、1個master,2個segment

11、postmaster 是數據庫主進程,監聽用戶的請求

12、此時系統空閒,沒有任何運行查詢

13、Master 上的seq server 爲序列號生成器

2.2 客戶端建立會話鏈接

1、客戶端通過libpq協議發送鏈接請求給Greenplum master節點

2、Master 節點上postmaster 進程會監聽到鏈接請求,並處理

2.3 Master fork一個進程處理客戶端請求

1、Master 上的postmaster 進程監聽到鏈接請求後,fork一個子進程用於處理該客戶端的所有查詢請求

2、子進程在PostgrsSQL中稱爲backend;在Greenplum中該進程稱爲QD

2.4 QD建立和Segment的鏈接

1、QD進程使用libpq協議和每個segment建立鏈接請求

2、Segment上的postmaster進程監聽到QD的鏈接請求並進行處理

3、對於segment而言,QD是他們的客戶端

4、僅有在需要時QD纔會建立和Segment的鏈接

2.5 segment fork 一個子進程處理QD的鏈接請求

1、Segment上的postmaster進程監聽到QD的鏈接請求後,創建一個子進程以處理後續查詢的請求

2、Segment 上創建的子進程稱爲QE

2.6 客戶端發送查詢請求給QD

1、客戶端使用libpq協議發送查詢請求給master上得得QD進程

2、QD進程對接收到的查詢進行處理,包括解析,優化生成分佈式查詢計劃等

2.7 QD發送任務給QE

1、QD生成分佈式查詢計劃後通過libpq協議發送給各個segment上的QE進程

2.8 QD與QEs建立數據通信通道

1、QD和每個segment上的QEs根據查詢計劃裏面的信息,簡歷interconnect鏈接

2、Interconnect用於內部數據通信

3、Libpq用於控制命令和結果返回

2.9 QE各司其職

1、每個QE執行分配給它的任務

2、QE之間的通過interconnect交互數據

2.10 QE狀態管理

1、QE和QD之間通過libpq協議進行狀態的跟新和管理,包括錯誤處理等

2、QE之間沒有libpq鏈接

2.11 QD返回查詢結果給客戶端

1、最終QD將查詢的結果返回給客戶端

3 Greenplum 主要設計思考

3.1 繼承自PostgreSQL的設計

3.2 主從架構

3.3 數據儲存

3.4 數據通信

3.5 三級並行計算

3.6 流水線執行

3.7 網絡

3.8 磁盤

3.7 網絡

3.8 磁盤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章