yeshenjie
发布于

OushuDB 课程学习笔记

分析型数据库的发展

1、共享存储架构 例如:oracle/IBM Db2

缺点:基于专有高端存储、价格昂贵、可扩展性差、扩展到十几个节点就会撞到存储的瓶颈

2、无共享架构 MMP 例如:teradata

3、SQL-on-Hadoop 例如:cloudera/spark

存储与计算分离,管理的简单性,扩容不需要像 mpp 一样重新分布所有数据

缺点:兼容性不佳,性能一般

4、云原生架构 snowflake/oushu

其新一代 simd 执行器比传统 mpp 要快 5-10 倍

比一般的 SQL-on-Hadoop 要快 20 倍左右

实现了自研存储、对象存储,突破了 HDFS 的瓶颈

oushudb 具有云原生、高性能强兼容、纯国产、应用广

oushu 架构

存储与计算分离架构:多个主节点处理用户对数据库的连接请求(JDBC/ODBC),处理用户认证及协调分布式执行计划引擎、数千个计算/存储节点分布式调度服务来完成后续 SQL 查询的处理流程。

分布式执行计划引擎:负责用户端标准的 SQL 语句的解析、语意检查、基于代价的查询优化到最终产生分布式的查询任务规划工作

分布式任务调度引擎 QD:负责执行计划的分发与执行状态跟踪,同时也负责节点间的数据分发

支持 SIMD 的极速执行引擎:负责将分布式调度引擎转发的逻辑计划,转换成物理计划并完成资源配置,启动并控制整个查询计划的执行,并将执行结果透过分布式调度引擎传回上层执行节点

分布式可插拔存储引擎:提供支持 HDFS/S3/本地表存储等多种存储引擎及数据格式(行存、列存)、数据的编码、压缩、存储与读写等机制

分布式事务管理:提供全局的数据库读写 ACID 机制,支持分布式锁、支持并发读写能力

数据库元数据管理:提供数据对象管理与存储,支持基于 mvcc 的事务处理机制

全局资源管理:提供支持多租户的基于多级资源队列的全局任务资源统一分配

oushu 组件

OushuDB 的数据存储在 magma 或者 HDFS 上的,(1)magma 是 oushuDB 从 4.0 引入,在主节点需要配置 magma observer,它提供整个集群的 magma 可用节点,在各个从节点上会配置 magma node,用来提供访问和存储 magma 数据的服务 (2)HDFS 需要配置 HDFS 服务,在主节点上需要配置 NameNode,在各个子节点上需要配置 DataNode,从而提供对于 HDFS 数据的访问

Master

元数据信息仅存储在 Master 的本地存储中

认证客户和接受客户的要求

将 SQL 转换为解析树数据结构

SQL 优化器决定最有效的并行查询执行

将查询计划分发 segment

将结果返回给客户端

执行事务管理

Segment

一个 OushuDB segment host 是一个计算节点

每个 segment host 可以有多个虚拟 segment,一般为(2,4,6,8),缺省为 8

一个虚拟 segment 是一个并行查询的最基本计算单元(资源的 container,并行度的弹性)

多个部分协同工作,形成一个单一的并行查询处理系统

OushuDB segment 向 HDFS/Magma 客户端传递请求所需的数据节点完成数据查询

Magma

高可用的支持分布式事务的高性能分布式存储

【主要功能:】

结构化数据定义存储

支持数据的增删改查

支持数据索引功能

提供针对分析型负载的高性能数据查询能力(行列混合存储格式)

支持基于 Raft 协议数据复制实现数据存储和访问服务的高可用

支持基于多版本 MVCC 的分布式事务特性

整合数据预处理技术提升数据查询性能

提供了便捷的集群扩展、集群容错以及负载抗衡

HDFS

HDFS 是在一个大规模分布式服务器集群上,对数据分片后进行并行读写及冗余存储
关键组件:

Namenode:负责整个分布式文件系统的元数据管理,也就是文件路径名、数据块的 ID 以及存储位置等信息

Datanode:负责文件数据的存储和读写操作,HDFS 将文件数据分割成若干数据块即 Block,每个 DataNode 存储一部分数据块(它会配置在所有的从节点上,当配置了 HDFS 的 HA 的时候,需要使用 Zookeeper)

高可用 HA

(1)数据存储故障容错

解决:对于存储在 DataNode 上的数据块,计算并存储校验和,在读取数据的时候,重新计算读取出来的数据的校验和,校验不正确抛出异常,应用程序捕获异常后,去其他 DataNode 读取备份数据

(2)磁盘故障容错

解决:将该块磁盘上存储的所有 BlockID 报告给 NameNode,NameNode 检查这些数据块,还在哪些 DataNode 备份,通知相应 DataNode 服务器将对应数据块复制到其他的服务器上,保证数据块的备份数满足要求

(3)DataNode 故障容错

解决:DataNode 会通过心跳和 NameNode 保持通信,如果 DataNode 超时未发送心跳,NameNode 会认为这个 DataNode 已经宕机失效,立即查找存储的哪些数据块及在哪些服务器上,通知服务器再复制一份数据块到其他服务器上,保证存储的数据块备份数符合用户设置的数目

(4)NameNode 故障容错

解决:采用主从热备的方式提供高可用服务,主从 NameNode 靠 shared edits 来同步文件系统的元数据信息,当主 NameNode 宕机,从 NameNode 会通过 Zookeeper 升级为主服务器

数据库

创建数据库

CREATE DATABASE name;

为其他人创建一个数据库并且使他成为新数据库的所有者

//sql环境下使用命令
CREATE DATABASE dbname OWNER rolename;

//命令行执行
create -O rolename dbname

删除数据库

DROP DATABASE dbname;

创建数据表

CREATE TABLE my_first_table(
	first_column text,
	second_column integer
);

OushuDB 现在支持多种存储格式:AO、ORC、Magma

缺省值:在创建数据行的时候不去给这些列指定值的时候,这些列将被填充为它们相应的缺省值;如果没有明确缺省值,那么缺省值为 null

CREATE TABLE products(
	product_no integer,
	name text,
	price numeric DEFAULT 9.99
);

检查约束

CREATE TABLE products(
	product_no integer,
	name text,
	price numeric CHECK(price>0)
);

非空约束

CREATE TABLE products(
	product_no integer NOT NULL,
	name text NOT NULL,
	price numeric
);

主键约束

CREATE TABLE products(
	product_no integer,
	name text,
	price numeric,
	PRIMARY KEY(product_no)
)FORMAT 'Magma';

删除表

DROP TABLE my_first_table;
评论
    test