发布于

课程学习笔记(ODCP 认证培训课程笔记)

数据库的发展

1、第一代(1980s)共享存储架构 share storage:Oracle,IBM DB2,基于专有高端存储,价格昂贵,可扩展性差,十几个节点会遇到存储瓶颈。
2、第二代(1980s-2000s)大规模并行处理架构 MPP,无共享架构 share nothing:Teradata,greenplum,基于 x86 架构服务器,可扩展到百节点规模。
3、第三代(2000s)SQL on Hadoop:cloudera,spark,存储计算分离,可扩展到几千节点,性能一般,对 update/delete 和混合负载支持的不好。
4、第四代(2015)云原生架构:snowflake,oushudb,SIMD 执行器优化,支持 update/delete 和混合负载,存算分离架构,可扩展到上万节点,可基于云基础设施构建,实现弹性扩缩容。
oushudb 特点:云原生、高性能、强兼容、纯国产、应用广。
应用场景:核心数仓、数据集市、实时数仓、湖仓一体数据平台,支持 BI、即席查询、实时指标等分析应用

基本原理:

1、基础架构
OushuDB 基础架构分为:客户端、主节点、虚拟计算集群、虚拟存储集群
架构特点:
1)存算分离
多个 Master 处理用户请求,处理用户认证,协调分布式执行计划引擎
2)分布式执行计划引擎
负责 SQL 解析,语义分析,基于代价的查询优化,产生分布式查询任务
3)分布式任务调度引擎 QD
负责执行计划分发、状态跟踪,节点间数据分发
4)SIMD 向量化执行引擎
逻辑计划转化为物理计划,完成资源分配,启动并控制查询计划的执行,并将执行结果回传
5)分布式可插拔存储引擎
支持 HDFS/S3/本地表,支持行存/列存,数据编码,压缩,存储和读写
6)分布式事务管理
提供 ACID 机制,支持分布式锁,支持并发读写
7)元数据管理
数据库对象管理与存储、基于 MVCC 的事务处理机制
8)全局资源管理
多租户、多级资源队列的资源统一分配

2、基本组件
1)Master 节点:接收客户端查询,分解任务,分派到 segment 节点,汇总 Segment 节点执行结果并返回客户端
2)Segment 节点:接收到任务,fork 出 QE 进程,协同完成任务,结果返回 master 节点
3)Standby 节点(5.0 版本之前):保证集群高可用
4)Magma:OushuDB4.0 时引入的分布式存储,在主节点配置 observer 用来提供 magma 的可用节点,magma node 用于提供读写服务,支持数据增删改,支持索引,行列混存,
5)HDFS:主节点配置 namenode,数据节点配置 datanode
6)运行模式:standalone,独占系统资源,自己管理资源;yarn,OushuDB 作为应用注册到 yarn,由 yarn 做资源管理和分配,在主节点配置 resource manager,在各个子节点配置 node manager
7)interconnect:节点间的数据传输服务

组件间运行模式:
1)元数据存储在 Master 节点本地(5.0 版本之前)
2)Master 节点认证和接受客户端请求
3)解释器生成语法树,优化器生成执行计划,从资源管理器得到可用节点资源
4)从 HDFS Catalog 获取存储在 HDFS 上的数据的分布,生成最优查询计划,决定在哪些节点访问哪些数据
5)QD 将查询计划分派给各个 segment 节点
6)处理事务

计算节点:
1)物理节点就是一个 segment 节点
2)segment 节点可分为多个 vsegment 节点,一般为 2、4、6、8,缺省 8
3)vsegment 是并行查询的基本计算单元,container

3、部署架构
OushuDB Master:配置 Magma observer,Standby Namenode
OushuDB Standby:配置 Magma observer,Active Namenode
Zookeeper node:3 个,有两个尽量在 Master 和 Standby 节点上
segment 与 hdfs 的 datanode 混布可以利用到本地读提高性能

4、进程架构
1)postmaster:监听用户请求的守护进程,为每个用户 fork 单独的 postgres 服务
2)logger:收集各个子进程的输出,写到 pg_log
3)stats collect:收集统计信息写入。stat 文件
4)Writer:共享内存数据刷到磁盘
5)resource manager:资源管理,segment 可用性检查
6)DFS metadata cache:缓存 block 信息
7)checkpoint:周期性 checkpoint 或 checkpoint 请求
8)sequenceserver:生成序列
9)Wal send server/sync agent:发送 WAL 日志,接收并执行 WAL 日志

5、计算引擎,执行器,优化器
优化器:
启发式规则优化 RBP(Rule Based Optimization)
基于代价的优化 CBO(Cost Based Optimization)

提升执行器性能:
向量计算 Vectorized Execution:snowflake,oushudb
代码生成 Code Generation:impala
spark 两者都有使用
两种技术侧重点不同,但都可以提升性能,不同的语句也会有不同程度的性能提升,向量计算更适合并行处理数据
SIMD(single instruction multi-data)单指令多数据流
SISD 单指令单数据流

Orc 存储格式
列式存储、可压缩
提供多种索引:row group index, bloom filter index
支持复杂数据结构,例如 Map

新执行器支持 TPC-H/TPC-DS
TPC-H 比 Greenplue 快 5-10 倍,比 sparksql3.0 以上版本快几十倍

6、查询执行过程
client 连接 master 节点的 postmaster 进程
Master 节点的 postmaster 进程 fork 出 QD 进程
client 连接 QD 进程
QD 进程将 SQL 通过解析器生成语法树,通过优化器生成查询计划
查询计划分派到各个 segment
segment 的 postmaster 进程 fork 出 QE 进程
QE 进程执行查询计划,并将结果返回 Master 的 QD 进程
QD 进程汇总结果,并返回给 client

Motion 的种类
1)Redistribution Motion:数据重分布
2)Broadcast Motion:小表广播到所有节点
3)Gather Motion:Master 节点收集汇总 segment 的执行结果
按 Motion 划分 slice,每个 slice 对应一个 QE 进程
QE 进程数=vseg 的数量 * slice 数

vseg 数量的确定:
Hash 表由桶数确定
Random 表由 guc 值和 SQL 的复杂度决定

7、外部接口
PSQL:PostgreSQL 的命令行交互工具
JDBC:提供 JDBC jar
ODBC:兼容 pg 官方 ODBC
pgadmin:postgres 官方 UI 客户端

8、Magma
存储结构化数据
支持增删改查
基于 Raft 协议数据复制实现存储和访问服务的高可用
支持基于多版本 MVCC 的分布式事务特性
行列混存
支持索引,主键索引和非主键索引
非纯粹的存储,具有内建的计算能力,支持算子下推
便捷的集群扩展
容错和负载均衡

主要功能:数据分布、负载均衡、数据副本、索引、事务、数据清理

节点启动 magma 进程,多个 magma 进程组成 magma 集群

RangeGroup 有多个副本,RangeGroup Leader 对外提供服务
每个 RG 包含多个 Range
每个 RG 包含数据缓冲、数据文件、统计数据、索引文件、删除数据 DBTFile
数据文件的结构:由多个 block 组成,按行切分,block 内按列存分页保存

数据结构:
每个节点有多个数据目录
每个数据目录有多个 RG
RG 下有 ap 数据目录、index 索引目录、rafelog 日志目录
ap 下分为多个 Table,每个 Table 下包含多个 Range 目录
Range 目录下是持久化文件、统计数据、索引文件、DBTFile

9、HDFS
Datanode 负责文件存储和读写,将文件分为多个 block 分布在 datanode 上,client 对 block 可并行访问
Namenode 负责文件元数据管理,文件路径名,数据块 ID 和存储位置
副本:一个 block 复制多份,存在不同 datanode 或不同机架,应对磁盘损坏、datanode 宕机、交换机宕机

高可用:
block 计算校验和 checksum,通过其他副本恢复
datanode 磁盘坏,将 blockid 上报 namenode,由 namenode 通过其他副本生成新副本
datanode 宕机,通过心跳发现,namenode 通过其他副本生成新副本
namenode 宕机,通过 namenode 主从热备高可用机制恢复,zookeeper 提供 znode 锁,共享存储系统 shared edits 同步元数据信息

评论(1)
    test