2.5 segment fork 一个子进程处理QD的链接请求 9
https://www.bilibili.com/video/av81898649?p=1
ODBC与JDBC都是基于标准的SQL来执行的,支持很好的第三方工具
master与standby master 可以实现集群的高可用,通过共享高速的网络传送数据,除了网络是共享的其他的都是无共享的
集群内数据分两类:用户数据与元数据
global 日志在所有的节点上都是一样的
local 日志一般都是一些统计信息等系统表
segment data 保存的用户数据信息
对用户可以看到以下的instance
在以下的图标中可以看出用户数据已经打散到每个节点上,每个节点上有一部分,master有元信息
对于系统表/数据字典全部复制到每个节点上
集群按照算法均匀的把数据分不到不同的分区中,便于查快的查询
一般的数据都是有热度的,一般的越新的数据价值越高,越老的数据价值越低
1、访问多列时速度快
2、支持高效更新和删除
3、AO行储存主要为插入而优化
1、列储存更适合压缩
2、查询列子集时速度快
3、不同列可以使用不同的压缩方式:gzip(1-9),quicklz,delta,RLE,zstd
1、历史数据和不常访问的数据储存在HDFS或者其他外部系统中
2、无缝查询所有数据
3、Text,CSV,Bianry,Avro,Parquest,ORC格式
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
1、1个master,2个segment
11、postmaster 是数据库主进程,监听用户的请求
12、此时系统空闲,没有任何运行查询
13、Master 上的seq server 为序列号生成器
1、客户端通过libpq协议发送链接请求给Greenplum master节点
2、Master 节点上postmaster 进程会监听到链接请求,并处理
1、Master 上的postmaster 进程监听到链接请求后,fork一个子进程用于处理该客户端的所有查询请求
2、子进程在PostgrsSQL中称为backend;在Greenplum中该进程称为QD
1、QD进程使用libpq协议和每个segment建立链接请求
2、Segment上的postmaster进程监听到QD的链接请求并进行处理
3、对于segment而言,QD是他们的客户端
4、仅有在需要时QD才会建立和Segment的链接
1、Segment上的postmaster进程监听到QD的链接请求后,创建一个子进程以处理后续查询的请求
2、Segment 上创建的子进程称为QE
1、客户端使用libpq协议发送查询请求给master上得得QD进程
2、QD进程对接收到的查询进行处理,包括解析,优化生成分布式查询计划等
1、QD生成分布式查询计划后通过libpq协议发送给各个segment上的QE进程
1、QD和每个segment上的QEs根据查询计划里面的信息,简历interconnect链接
2、Interconnect用于内部数据通信
3、Libpq用于控制命令和结果返回
1、每个QE执行分配给它的任务
2、QE之间的通过interconnect交互数据
1、QE和QD之间通过libpq协议进行状态的跟新和管理,包括错误处理等
2、QE之间没有libpq链接
1、最终QD将查询的结果返回给客户端