感谢官方提供的学习资料,经过一段时间的学习,对 OushuDB 有了深刻的理解,并对重要的知识点做了一些笔记,方便后续学习。OushuDB 是新一代的云数仓产品,由 Apache HAWQ 创始团队打造,技术采用计算与存储分离的技术架构,分为客户端、主节点、虚拟计算集群、虚拟存储集群四个主要部分。OushuDB 采用多主节点,并且计算和存储都做到了虚拟化,可以更好的适应不断的计算和存储的需求。
OushuDB 包含分布式执行计划引擎、分布式任务调度引擎、支持 SIMD 的极速执行引擎、分布式可插拔存储引擎、分布式事务管理、数据库元数据管理、全局资源管理等。分布式执行计划引擎负责处理 SQL 语句解析、语意检查、基于 CBO 优化到分布式的查询规划。分布式任务调度引擎负责执行计划的分发和状态跟踪,以及各个节点数据分发。分布式可插拔存储引擎支持 HDFS/S3/本地表存储等。分布式事务管理支持支持并发读写能力、锁、ACID 等。数据库元数据管理,提供数据对象管理与存储,支持 MVCC 事务处理机制。全局资源管理支持多租户的基于多级资源队列的全局任务资源统一分配。
Master 和 Segment,Master 节点主要负责接收和处理用户的查询,并将其分解成不同的任务,分派给不同的 Segment 节点。Segment 节点接收到 Master 分派的任务后,会 fork 成不同的 Query Executor 进程协同完成任务。OushuDB 增加了 Standby 节点,当 Master 不可用时,Standby 会成为新的 Master,保证集群的可用性。
OushuDB 从 4.0 开始引入了 Magma,在主节点上需要配置 Magma Observer,Magma 支持数据的增删改查,是行列混合存储的格式。数据还可以存储在 HDFS 上,需要配置 HDFS 服务,主节点上需要配置 NameNode,他负责管理文件系统的元数据,各个 DataNode 管理该节点上的数据存储,它会配置在所有的从节点上,如果 HDFS 配置高可用,则需要使用 Zookeeper,通过 Zookeeper,获取 NameNode 的心跳信息,在故障时触发 NameNode 的切换。
执行计划也叫查询计划或解释计划,explain analyze 可以分析每个操作的开始时间、结束时间。一个查询,可能会有无数个查询计划,OushuDB 对每个查询产生一个最优查询规划。为了支持查询的并行执行,OushuDB 添加了 motion 操作。motion 操作主要实现查询执行过程中元组在节点之间的传递。OushuDB 支持三种 motion 操作:如下
redistribute motion:按照 hash 值把数据发送到多个目标节点。
broadcast motion: 把数据广播到所有目标节点。
gather: 把数据从多个节点收集到一个节点。
查询优化:查询的业务表操作的时候,表业务数据庞大的时候,以及 left join 多的时候,甚至多表关联到几十张表的时候,建议拆分改临时表,再进行连接。表分区是解决一些因单表过大引起的性能问题的方式,表过大就会造成查询变慢,分区是一种解决方案。
在性能可以满足的情况下,尽量不使用数据分区;
因会造成表对象数量过多,增加执行计划生成的复杂性,禁止使用二级分区;
数据量在千万级别以下,建议不要使用分区;
分区数不要超过 128 个;
集群和 HDFS 启动停止
start-dfs.sh
stop-dfs.sh
hawq start cluster -a --with_magma
hawq stop cluster
进入数据库
psql -d postgres
查看数据库 \l 或 SELECT datname FROM pg_database;
创建数据库:CREATE DATABASE testdb;
创建用户及授权
create user db_user1 password '123';
create role db_user1 password '123' LOGIN;
drop user db_user1;
alter user db_user1 password '123456';
alter user db_user1 createdb createrole;
create user db_user1;
create user db_user2;
create role db_role1 createdb createrole;
grant db_role1 to db_user1,db_user2;
revoke db_role1 from db_user1;