1. 产品架构
AnalyticDB PostgreSQL版具有MPP水平扩展,海量数据实时分析,兼容Oracle语法生态,高可用HA架构,支持分布式事务等优势。
AnalyticDB PostgreSQL具有协调节点和计算节点:
• 多活协调节点:主要负责Cascade架构SQL优化器和全局分布式事务管理。
• 计算节点水平扩展:计算任务全并行执行、新一代向量化计算引擎(包括Laser引擎和PG计算引擎)、非结构化数据检索。
• 高可靠存储引擎:本地数据双副本、支持行存储/列存储、具备高吞吐导入/导出。
• 分布式事务支持:支持分布式事务,保证强一致性,支持SI/RC隔离级别。
2. 模块组件
AnalyticDB PostgreSQL版的架构主要包含Master Node和Compute Node两大组件,中间通过Interconnect进行互联通信和数据交换传输。
1) Master Node
• 负责客户端连接协议层接入,认证和鉴权, SQL解析,重写,优化,和执行分发协调。
• 全局事务管理器(Global Transaction Manager)负责全局事务ID、快照生成和分布式事务管理。
• 全局元数据目录(Global Catalog)则记录了用户,库,表,视图,索引,分布分区等数据库对象的元数据信息。
2) Compute Node
• Compute Node包含了组Segment。
• 部署形态上可以是物理机,VM或者容器。
3) Segment
• Segment是负责具体的SQL执行和数据存储节点。
• 执行引擎通过向量化和及时编译(JIT)等技术,相比传统逐行计算的火山模型获得数倍性能提升。
• 数据和索引(Data&Index)支持行存表,列存表,和外表以及相应索引。
SQL在执行查询时,组件之间的交互:
• 接受客户端连接,用户认证鉴权。
• 语法语义解析,生成解析树。
• 根据语法解析树优化并生成执行计划。
• 分配集群segment并下发执行计划,协调执行并返回最终结果。
• Segment QE并行执行计划中的每个具体算子(Scan,Join,etc.),在不同QE间交换数据(Motion)。
• Sacan算子读取数据和索引。
• Master QE负责第二阶段聚集和最终结果收集(Gather Motion)。
3. 数据模型
ADB PG属于对象-关系型数据库,数据库的对象通常包括:表、视图、函数、序列、索引、分区子表、外部表等,而对象-关系型则进一步支持用户自定义对象和它的属性,包括数据类型、函数、操作符,域和索引,甚至复杂的数据结构也可以被创建,存储和检索。
1) 支持行存表、列存表和外表
• 行存表:数据按行存放,支持主键,B+树索引,Bitmap索引,GIN索引等,适合数据实时写入更新删除,点查,范围查。
• 列存表:数据按列存放,高压缩比,适合追加写(少量更新删除)场景。
• 外表:元数据存放在本地系统表,数据存放在OSS,支持的数据格式包括ORC,Parquet,CSV,JSON,支持表分区,其中ORC和Parquet支持列过滤和谓词下推,提升分析性能。
• 除OSS外,同时也支持Hadoop(HDFS,Hive)外表。
2) 表数据分布
将表数据均匀的分布到各个节点中,是发挥集群整体IO性能、提升存储容量、优化计算与网络传输效率的关键。
ADB数据库里表的数据分布如图,最左边为Lineitem表,首先需要定义分布键orderkey,然后对orderkey做HASH均匀分布到每个节点上,这样每个节点上都存了表的一部分数据,也可以按照日期做分区,方便查询时做分区的裁剪。