cc
发布于

学习心得

初识 OushuDB
1、OushuDB ⽀持 Update/Delete 和混合⼯作负载,实现了⾃研存储、对象存储,突破了 HDFS 的瓶颈。
2、OushuDB 是⼀款云原⽣架构的分布式数据库,具备⾼并发、⾼吞吐和⾼性能的弹性计算能⼒。它⽀持多主节点、多虚拟计算集群和多虚拟存储集群。每⼀层级的节点都可以⽔平扩展,存储与计算完全分离。
3、虚拟⼦节点数量代表了查询的并⾏度。
架构简介
1、主节点:
(1)、资源管理器:资源管理器负责整个集群的资源管理。协调并发查询之间的资源分配,避免查询之间相互影响,提升系统的可⽤性。
(2)、查询解析器:负责解析查询,并检查语法及语义。最终⽣成查询树传递给优化器。
(3)、分析器:针对语法树结构进⾏检查,对语法树进⾏数据补充或者必要的优化改进。在 OushuDB 中分析器和查询解析器是合并的。
(4)、优化器:负责接受查询树,⽣成查询计划。优化器的作⽤是找出优化的查询计划。
(5)、容错服务:负责检测哪些节点可⽤,哪些节点不可⽤。
(6)、事务管理: 提供分布式事务的控制能⼒。
(7)、权限安全:负责控制⽤户的⾏为,对⽤户权限进⾏约束,保障数据库访问安全。
(8)、调度器:优化器优化完查询以后,查询派遣器派遣计划到各个节点上执⾏,并协调查询执⾏的整个过程。
2、虚拟计算集群:计算层可以被划分为多个虚拟计算集群(Virtual Compute Cluster),每个虚拟集群相互独⽴,并且⽀持动态弹性扩展。计算层的集群虚拟化能够在物理上进⾏计算资源隔离,⾼效隔离执⾏错误,快速容错,增强计算弹性,集群内的数据共享也解决了数据孤岛问题。
3、虚拟存储集群:
(1)、OushuDB 的存储层,由存储节点组成的多个可插拔存储集群组成。Magma 是 OushuDB ⾃研的存储模式,是⼀种⾼可⽤的⽀持分布式事务的⾼性能分布式存储,⽀持存储与计算分离架构。
(2)、分类:元数据集群与数据集群,⽤户数据存储则到数据集群。

产品特性
1、存储与计算分离架构:多个主节点处理⽤户对数据库的连接请求 (JDBC/ODBC),处理⽤户认证及协调分布式执⾏计划引擎、数千个计算/存储节点分布式调度服务来完成后续 SQL 查询的处理流程。
2、分布式执⾏计划引擎:负责⽤户端标准 SQL 语句的解析、语意检查、基于代价的查询优化到最终产⽣分布式的查询任务规划⼯作。
3、分布式任务调度引擎 QD:负责执⾏计划的分发与执⾏状态跟踪,同时也负责节点间的数据分发。
4、⽀持 SIMD 的极速执⾏引擎:负责将分布式调度引擎转发的逻辑计划转换成物理计划并完成资源配置,启动并控制整个查询计划的 执⾏并将执⾏ 结果透过分布式调度引擎传回上层执⾏节点。
5、分布式可插拔存储引擎:提供⽀持 HDFS/S3/本地表存储等多种存储引擎及数据格式(⾏存、列存)数据的编码、压缩、存储与读写等机制。
6、分布式事务管理:提供全局的数据库读写 ACID 机制,⽀持分布式锁, ⽀持并发读写能⼒。
7、数据库元数据管理:提供数据对象管理与存储,⽀持基于 MVCC 的事务处理机制。
8、全局资源管理:提供⽀持多租户的基于多级资源队列的全局任务资源统⼀分配。

部署架构
1、Master(主节点)和 standby(备份节点)两个机器来协同⼯作,同步元数据信息,从⽽提供 OushuDB 集群的⾼可⽤性。
2、Segment 节点-数据节点
3、Magma:分布式存储
4、为了保证负载均衡,通常会将 HDFS 的 Active NameNode 和 OushuDB 的 Master 配在两个不同的机器上。
5、Zookeeper Node:是一种用于分布式应用程序的高性能协调服务。
6、HA:高可用
7、OushuDB 的 Segment、Magma 和 Data Node 的部署基本⼀致,这样主要是为了保证本地读。

进程架构:
1、Dispatcher:用于管理线程工作项队列
2、Query Dispatcher:查询调度器 master 节点上负责处理用户查询请求的进程(DQ)
3、Query Executor:查询处理流程 QE
4、postgres 进程:管理后端的常驻进程,是所有进程的父进程
5、Logger 进程:多进程安全
6、postgres 进程出错时尝试修复;当 Segment 节点的 postgres 挂掉时候会认为节点已经 down 掉了。
7、Logger 进程负责收集各个进程的输出并将其写⼊ pg_log,这⾥包括成功 log 和出错的 log。
8、Stats collector 进程会统计收集数据的信息,会⽣成描述数据库、表等统计信息的。stat ⽂件。
Writer 进程是定期将共享内存的数据写到磁盘上的进程。
9、Master resource manager 负责管 理、分配、回收资源,定期查询、接收、处理 Segment 的⼼跳信息,从⽽获取整个集群可⽤的节点;Segment resource manager 是查询本节点的状态,包括查询临时⽂件是否可读写,发送 Segment 的⼼跳信息。
10、OushuDB 是存储和计算分离的,数据存储在 HDFS 或 magma 上。
11、Checkpoint 负责周期性做 checkpoint 或响应常规的 checkpoint 请求。
12、Sequence 是产⽣序列
13、Wal send server 和 Standby Master 保证 Master 的节点和 Standby 节点元数据信息进⾏同步的。

计算引擎及其执⾏器、优化器:

优化器:
(1)、早期使用启发式规则进⾏优化 RBP,方法不够准确,难以获得最优的查询计划
(2)、基于代价的优化 CBO 则能够针对⼤多数场景⾼效筛选出性能最好的执⾏计划。
2、OushuDB 在内的⾼性能数据库引擎往往使⽤基于代价的优化器
3、执行器:执⾏器是数据库内核最重要的部件之⼀。提升执⾏器性能的⼿段:⼀种是向量计算(更适合并行处理数据),另外⼀种是代码⽣成。
4、OushuDB 使⽤了向量计算外加 SIMD 优化技术(CPU 硬件指令)。
5、SIMD, 即单指令多数据流,以同步的⽅式在同⼀时间内执⾏同⼀条指令。SIMD 使⽤⼀条向量指令开启⼀组数据操作,其中数据的加载、存储以及数据计算以流⽔线的形式进⾏。
6、OushuDB 新执⾏器充分利⽤列式存储 ORC、Magma 存储格式。以 ORC 存储格式举例,ORC 是列式存储,有多种⽂件压缩⽅式,并且有着很⾼的压缩⽐。节省存储资源,并且使查询任务的输⼊数据量减少。orc 存储格式提供多种索引。
7、新执⾏器全量⽀持 TPCH 和 TPCDS
查询执行过程:
1、OushuDB 是分布式的集群,数据会分布到各个节点上,按照 Hash 分布或者是 random,Hash 分布我们需要指定分布 key。当两个节点做连接的时候,连接条件相同的这些数据必须在同节点,才能保证连接,连接条件才能完成。

2、query executor 进程的数⽬就等于 Virtual Segment 的数⽬乘以 query slice 数⽬。
3、OushuDB 集群⽀持三种 Motion,分别是 Redistribution、Broadcast、Gather。当需要对于数据进⾏重新分布的时候,就要进⾏ Redistribution;Broadcast ⽤在⼤表和⼩表进⾏ join 的时候,将⼩表分发到所有的节点上,这样所有的节点就有⼩表的数据,⼤表和⼩表也就可以直接进⾏ join 了;Gather Motion ⽤于 Master 节点最终收集汇总所有 Segment 节点数据。
4、Virtual Segment 数⽬是怎么决定的呢?Hash 表和 random 表有不同的计算⽅法,Hash 表是由 Hash 桶来决定的,Random 表是由 GUC 值以及 query 的复杂度来决定的。

外部接口:
1、PSQL 是 PostgreSQL 中的⼀个命令⾏交互式客户端⼯具。安装的 Oushu DB binary ⾥⾯会⾃动安装了 PSQL。
2、JDBC Oushu Software Tarball ⾥⾯涵盖了 JDBC jar 包,它也可以兼容 PG 官⽅ JDBC
3、ODBC:没有提供单独的 ODBC,可以兼容 PG 官⽅ ODBC。
4、PGAdmin:postgres 官方客户端。

Magma:
1、Magma 它是存储,它是分布式的,⾼可⽤的,⽀持事务的。HDFS 也能存储数据,只⽀持以追加的⽅式写⼊,对表数据的更新和删除操作很不友好,因此有了 Magma
2、Magma 存储的数据是表数据,是结构化数据
3、Magma 的功能,主要包括数据分布、数据清理、事务模型、索引、数据副本、负载均衡。
4、Magma 通过直接操作本地⽂件系统,实现了⽀持表数据的更新和删除操作。作为分布式存储,Magma 在集群的每个节点上启动 Magma 的进程。整个集群中的多个 Magma 进程组成了 Magma 集群。

HDFS:
1、Hadoop 分布式⽂件系统 HDFS 的设计⽬标是管理数以千计的服务器、数以万计的磁盘,将这么⼤规模的服务器计算资源当作⼀个单⼀的存储系统进⾏管理,对应⽤程序提供数以 PB 计的存储容量,让应⽤程序像使⽤普通⽂件系统⼀样存储⼤规模的⽂件数据。
2、HDFS 是在⼀个⼤规模分布式服务器集群上,对数据分⽚后进⾏并⾏读写及冗余存储。
3、HDFS 的组件:⼀个是 DataNode,⼀个是 NameNode。DataNode 负责⽂件数据的存储和读写操作,HDFS 将⽂件数据分割成若⼲数据块(Block),每个 DataNode 存储⼀部分数据块。NameNode 负责整个分布式⽂件系统的元数据(MetaData)管理,也就是⽂件路径名、数据块的 ID 以及存储位置等信息,相当于操作系统中⽂件分配表(FAT)的⻆⾊。
4、NameNode 采⽤主从热备的⽅式提供⾼可⽤服务。

对象存储
1、面向对象的存储
2、它综合了⽹络附加存储(NAS)和存储局域⽹(SAN)的优点,同时具有 SAN 的⾼速直接访问和 NAS 的分布式数据共享等优势,提供了具有⾼性能、⾼可靠性、跨平台以及安全的数据共享的存储体系结构。
3、对象存储允许将计算基础架构与存储需求分离。
4、优点 :⽆限存储、数据安全可靠性⾼、运维⽅便
5、OushuDB ⽀持的对象存储类型:
(1)、S3(亚马逊):⾏可扩展性、数据可⽤性、安全性和性能
(2)、cos(腾讯云):费⽤低廉、零运维成本、弹性伸缩、安全可靠

创建和管理数据库
1、创建数据库:create database
2、删除数据库:drop database
3、查看现有数据库的集合,可以检查系统表 pg_database select datname from pg_database
4、CREATE DATABASE dbname OWNER rolename; 创建数据库并使其成为数据库所有者

创建数据表
1、# 创建表并指定存储格式:CREATE TABLE rank2 (id int, rank int, year smallint,gender char(1), count int ) with (appendonly =true(列式), orientation =row);
2、# 创建⼀个带压缩的 ORC 表,需指定压缩类型。
CREATE TABLE rank3 (id int, rank int, year smallint,gender char(1), count int )with (appendonly =true, orientation =orc, compresstype = lz4);
3、# 创建⼀个有 primary key 的 magma 表, magma 内部⾃动实现了压缩。
CREATE TABLE rank3 (id int, rank int, year smallint,gender char(1), count int,
primary key(id) ) format 'magmaap';
4、缺省值:DEFAULT
5、约束:CHECK 为约束命名:CONSTRAINT 约束名 CHECK 约束条件
6、非空约束:NOT NULL
6、主键:⼀个主键约束表示可以⽤作表中⾏的唯⼀标识符的⼀个列或者⼀组列,它的值必须是是唯⼀的并且⾮空。 PRIMARY KEY

修改表:
1、增加列:ALTER TABLE 表名 ADD COLUMN 列名
2、删除列:ALTER TABLE 表名 DROP COLUMN 列名
3、增加约束:ALTER TABLE 表名 ADD CHECK 约束条件
4、删除约束:ALTER TABLE 表名 DROP CONSTRAINT 约束名
5、删除⾮空约束:ALTER TABLE 表名 ALTER COLUMN 列名 DROP NOT NULL
6、改变列的缺省值:ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT 值
7、删除缺省值:ALTER TABLE 表名 ALTER COLUMN 列名 DROP DEFAULT
8、重命名列:LTER TABLE 表名 RENAME COLUMN 旧列名 TO 新列名;
9、重命名表:ALTER TABLE 旧表名 RENAME TO 新表名;

表分区:
1、OushuDB 支持基于 Range 和 List 的两种分区方式:
2、Range 分区:表被一个或者多个关键列分区成”范围”,这些范围在不同的分区里没有重叠。 比如依 据日期、价格数值范围进行分区。
3、List 分区:依据一个值的列表进行分区,比如依据地区列表进行分区。
CREATE TABLE () PATITION BY 分区类型(range 或 list) 列名
多级分区:PARTITION BY RANGE (列名)
SUBPARTITION BY LIST (列名)
4、对一张已有大表数据进行分区,步骤如下:
(1). 按照现有大表结构创建一个新的分区表
(2). 将现有大表中的数据 load 到新创建的分区表中
(3). 删除原来的大表
(4). 按照原来大表名称重命名分区表名称
注意:数据量达到千万记录以上时使用分区表。
分区数不要超过 128 个,太多的分区将会减慢管理和维护任务。
除非必要,少用多级分区

数据操纵:
1、插入数据:insert into 表名 values(数据); 插入一行数值,数据值用逗号进行分隔,顺序与这些列在表中出现的顺序一致。
2、列出列名,并提供对应的数值来插入:insert into 表名(插入数据的列名) values(对应列的数据);
插入多行数据时,可以通过多个 insert 语句来完成或带多个数据行的 insert 语句:insert into
表名 values (101, '开发一部', '中国', '北京'), (102, '开发二部', '美国', '旧金山'), (103, '测试一部', '中国', '香港'), (104, '销售部', '中国', '上海'), (105, '市场部', '中国', '上海'), (106, '财务部', '中国', '广州');
3、更新数据:UPDATE 表名 SET d_name = '测试部' WHERE d_id = 103;
4、删除数据:DELETE FROM department WHERE d_id = 101;

数据查询:
1、SELECT * FROM 表名 where 条件;
2、条件:between......and........
IN 关键字,规定⼏个检查的字符串
NOT IN 来删除查询结果列举值的⾏
Like(模糊查询) _:一个字符 %:多个字符
3、排序:ORDER BY asc(升序)-默认 desc(降序)
4、LIMIT 和 OFFSET ⼦句允许只取出部分的查询数据⾏

表连接、组合查询:
1、表连接方式包括:
(1)、内连接 inner join(join)
select * from 表 A inner join 表 B on tableA.id=tableB.id;
(2)、外连接 out join :left join 、right join 、full join(完成对两张表单的连接,同时保留两侧无法匹配上的数据,无法匹配的字段用 null 来补充)
(3)、交叉连接 cross join 交叉连接,是一种不带 WHERE 子句的连接方式,T1 CROSS JOIN T2 返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
2、NATURAL JOIN 可以自动形成一个由两个表中同名的列组成的 USING 列表
3、组合查询:UNION ALL 直接对查询结果进行合并 、UNION 对查询结果合并并去重

数据类型:
1、常见的数据类型包括数值类型、字符类型、日期时间类型以及布尔类型(TRUE 和 FALSE)
2、日期类型:
Day:只用于日期
Time:只用于一日内时间
Timestamp:日期和时间

函数和操作符:
1、逻辑操作符:AND(与) 、OR(或) 、NOT(非)
2、比较操作符:<> 或 != 不等于
3、数学函数和操作符:

4、聚合函数:

5、字符串:

索引:
1、OushuDB 目前只有 Magma 表支持索引,AO、ORC 表均不支持创建使用索引。
2、创建索引:CREATE INDEX 命令用于创建表索引,默认的索引类型是 B-tree 索引。
CREATE INDEX name_idx ON 表名(e_name);
3、删除索引:DROP INDEX title_idx;

别名与视图
1、As(别名):FROM table_reference AS alias
2、视图(View)是从一个或多个表(或视图)导出的表,它所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。OushuDB 中的视图是只读的。系统不允许在视图上插入、更新或删除。

事务与锁:
1、事务(TRANSACTION)是数据库管理系统执行过程中的一个工作单元,由一个或多个数据库操作序列构成。
2、锁:在多个用户访问数据库的时候若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的 一致性。这个时候便可以通过锁来阻止用户修改一行或整个表,以保持数据库数据的一致性,锁一般用 在并发较高的数据库中。
3、数据库中有两种基本的锁:排它锁(Exclusive Locks)和共享锁(Share Locks)。 如果数据对象加上排它锁,则其他的事务不能对它读取和修改。 如果加上共享锁,则该数据库对象可以被其他事务读取,但不能修改。

集群监控:
1、SELECT * FROM gp_segment_configuration; 我们可以通过这条命令所查询的表来查看节点的状态
2、select count(1) from pg_stat_activity ; 来查看当前正在活跃任务的情况
3、偶数云平台可视化监控,我们可以查询的信息包括
(1). 集群信息
(2). 每个集群的详细信息。包括集群的节点数、创建者、状态,以及关联的集群等等
(3). 集群的设备 CPU 状态、内存状态、磁盘 IO 状态、⽹络 IO 状态的监测情况。CPU、内存等状态,还可以查询使⽤ TOP5 的情况。

评论
    test