yangxuejiao
发布于

OushuDB 学习心得&学习笔记

1.分析型数据库发展 4 个阶段:
1.1 共享存储(Share Storage)架构:oracle 和 IBM Db2。
1.2 无共享架构(Share Nothing),称为 MPP:Teradata、Greenplum,Vertica 和 Netezza。
1.3 存储与计算分离架构,称为 SQL-on-Hadoop:Hive 和 SparkSQL。
1.4 存储与计算分离的架构,称为云数据仓库。OushuDB 从设计之初就定位在新一代云数据仓库。

2.OushuDB 基础架构:
OushuDB 的架构图,分为客户端、主节点、虚拟计算集群、虚拟存储集群四个主要部分。

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

3.OushuDB 的基本组件:
3.1OushuDB 是一个分布式系统,主要需要 Master 的节点和 Segment 节点。
处理过程 1:Master 节点主要负责接收和处理用户的查询,并将其分解成不同的任务,分派给不同的 Segment 节点。
处理过程 2:不同的 Segment 节点接收到 Master 分派的任务后,会 fork 成不同的 QueryExecutor 进程协同完成任务。
处理过程 3:之后将结果返回给 Master 节点,最终由 Master 节点返回给 Client。

3.2OushuDB 是计算和存储分离的。它的数据是存储 Magma 或者是 HDFS 上。
高性能,高可用的分布式存储系统,在主节点上需要配置 MagmaObserver 他用来提供整个集群的 Magma 可用节点,
在各个从节点上会配置 MagmaNode。用来提供访问和存储 Magma 数据的服务,那数据还可以放在 HDFS 上。
OushuDB 现在支持多种存储格式:AO、ORC 和 Magma。AO 是按行存储的格式,而 ORC、Magma 是按行列存储的格式。

3.3Magma 是高可用的,支持分布式事物的高性能分布式存储。Magma 结构化数据定义存储。
支持数据的增删改查,支持数据所有功能,它是行列混合存储的格式。提供了针对分析性负载的高性能数据查询。

3.4HDFS 服务,在主节点上需要配置,NameNode,他负责管理文件系统的元数据,在一个集群中可以配置两个不同的机器来提供 HA 的服务。

3.5OushuDB 支持两种模式:Standalone 和 Yarn 模式。
Standalone 是 OushuDB 作为一个独立的应用独占系统资源。同时 OushuDB 作为一个单独的应用程序注册的 Yarn。由 Yarn 进行整个的集群的资源管理和分配。

4.OushuDB 的部署架构:Segment、Magma 和 Data Node。

5.OushuDB 的进程架构:
5.1 OushuDB 有不同的角色:Master 节点,Standby 节点、N 个 Segment 节点。
5.2 进程:
5.2.1PostMaster 进程,他监听用户请求的守护进程,为每个客户端 fork 连接出单独的 postgres 服务。
5.2.2Logger 进程负责收集各个进程的输出并将其写入 pg_log,这里包括成功 log 和出错的 log。
5.2.3Stats collector 进程会统计收集数据的信息,会生成描述数据库、表等统计信息的。stat 文件。
5.2.4Writer 进程是定期将共享内存的数据写到磁盘上的进程。
5.2.5Masterresource manager 进程负责管理、分配、回收资源,定期查询、接收、处理 Segment 的心跳信息,从而获取整个集群可用的节点。
5.2.6Segment resource manager 进程是查询本节点的状态,包括查询临时文件是否可读写,发送 Segment 的心跳信息。
5.2.7DFS metadata cache 进程读取并缓存 block location 信息,从而计算数据的存储,也就是存储数据的这些 block 是如何分布的,因此在生成查询计划时,可以确定去某些节点访问某些数据的速度,从而进一步保证本地读。
5.2.8Checkpoint 进程负责周期性做 checkpoint 或响应常规的 checkpoint 请求。
5.2.9Sequence 进程是产生序列,也我们通常说的自增长列。
5.2.10Wal send server 进程负责把 write ahead log 发给 StandbyMaster。
5.2.11Sync agent 进程负责和 Master 上 wal send server 通信的进程,处理 Master 和 standby 节点状态。

6.OushuDB 基础架构:主要内容为 OushuDB 的计算引擎及其执行器、优化器。
6.1 优化器把用户的需求转换为“如何找到点赞过万的回答”的策略和方法,即查询计划。
基于代价的优化 CBO (Cost Based Optimization)(P8)则能够针对大多数场景高效筛选出性能最好的执行计划。
包括 OushuDB 在内的高性能数据库引擎往往使用基于代价的优化器。
6.2 执行器是数据库内核最重要的部件之一。提升执行器的性能,会很大程度上提升数据库性能。
提升执行器性能的手段主要有两种技术路线:一种是向量计算(vectorized execution),另外一种是代码生成(code generation)。OushuDB 使用了向量计算外加 SIMD 优化技术。向量计算更适合并行处理数据。所以,想要在并行计算的基础上进一步提升数据库引擎性能,就可以结合并行处理数据充分利用 CPU 硬件指令(比如 SIMD)。
OushuDB 新执行器充分利用列式存储 ORC、Magma 存储格式。
6.3SIMD(single instruction multi-data), 即单指令多数据流,以同步的方式在同一时间内执行同一条指令。
相比单指令单数据流(SISD),单指令多数据流一次性获得所有操作数进而加快了运算,充分利用 CPU 性能,特别是数据密集型运算。
使用标量运算一次只能执行一对数据的乘法操作,而采用 SIMD 乘法指令则可以一次同时执行四对数据的乘法操作。
作为向量体系结构的一种,SIMD 使用一条向量指令开启一组数据操作,其中数据的加载、存储以及数据计算以流水线的形式进行。

7.OushuDB 的外部接口:PSQL 和 UI 界面。

8.Magma 介绍:
8.1Magma 它是存储,它是分布式的,高可用的,支持事务的。
8.2Magma 的功能,主要包括数据分布、数据清理、事务模型、索引、数据副本、负载均衡。
8.3Magma 在 OushuDB 架构的位置:Magma 通过直接操作本地文件系统,实现了支持表数据的更新和删除操作。
作为分布式存储,Magma 在集群的每个节点上启动 Magma 的进程。
整个集群中的多个 Magma 进程组成了 Magma 集群。
8.4Magma 是行列混合的存储模式。
8.5Magma 在磁盘上的数据结构:以单个节点为例,每个节点有多个数据目录,每个数据目录下又有多个 RG 目录,
每个 RG 目录分为 AP 数据目录、索引目录、raft 日志目录,数据目录下根据 Table 进行划分,
每个 Table 目录下是 Range 目录,Range 下面是数据文件、统计数据、索引文件、删除数据。

9.HDFS 介绍:
9.1Hadoop 分布式文件系统 HDFS 的设计目标是管理数以千计的服务器、数以万计的磁盘,
将这么大规模的服务器计算资源当作一个单一的存储系统进行管理,对应用程序提供数以 PB 计的存储容量,
让应用程序像使用普通文件系统一样存储大规模的文件数据。
9.2HDFS 是在一个大规模分布式服务器集群上,对数据分片后进行并行读写及冗余存储。
因为 HDFS 可以部署在一个比较大的服务器集群上,集群中所有服务器的磁盘都可供 HDFS 使用,
所以整个 HDFS 的存储空间可以达到 PB 级容量。
9.3HDFS 的关键组件有两个: DataNode 和 NameNode。
DataNode 负责文件数据的存储和读写操作,HDFS 将文件数据分割成若干数据块(Block),每个 DataNode 存储一部分数据块,这样文件就分布存储在整个 HDFS 服务器集群中。应用程序客户端(Client)可以并行对这些数据块进行访问,从而使得 HDFS 可以在服务器集群规模上实现数据并行访问,极大地提高了访问速度。
NameNode 负责整个分布式文件系统的元数据(MetaData)管理,也就是文件路径名、数据块的 ID 以及存储位置等信息,相当于操作系统中文件分配表(FAT)的角色。

10.数据库:
10.1 数据库是使用 CREATE DATABASE 命令创建的,使用 DROP DATABASE 命令删除。
10.2 在 shell 中用 createdb 程序来创建新数据库:createdb dbname。
10.3 为其它人创建一个数据库,并且应该使他成为新数据库的所有者,
在 SQL 环境使用下列命令:CREATE DATABASE dbname OWNER rolename 或 createdb -O rolename dbname
10.4 在 shell 上运行的删除数据库的 dropdb 程序:dropdb dbname。
10.5 在 OushuDB 支持的表格式(AO,ORC,MAGMA)中,只有 MAGMA 表支持主键约束,而且在创建 MAGMA 表时,可以声明主键列,
且主键约束的列里数据类型为非定长时需要将该列放置最后一列,主键约束也可以同时约束多个列,列名间用逗号分隔。
10.6OushuDB 支持基于 Range 和 List 的两种分区方式:
Range 分区:表被一个或者多个关键列分区成”范围”,这些范围在不同的分区里没有重叠。比如依据日期、价格数值范围进行分区。
List 分区:依据一个值的列表进行分区,比如依据地区列表进行分区。

11.数据操纵:oushudb 兼容的表格式中,目前只有 ORC 和 MAGMA 格式的表支持更新和删除操作,AO 格式的表不支持。

12.OushuDB 函数也称为 OushuDB 存储过程。
OushuDB 函数或存储过程是存储在数据库服务器上并可以使用 SQL 界面调用的一组 SQL 和过程语句(声明,分配,循环,控制流程等)。

评论
    test