1【学习心得】
在学习偶数 DB 之前,我并不了解偶数这个平台。然而,随着老师们的讲解,我对偶数 db 有了基本的认知,意识到现在工作中用到的关系型数据库已经无法满足一些大规模数据处理和存储的需求。正是在这样的背景下,我开始了偶数 DB 的学习之旅。学习的过程并非一帆风顺。偶数 DB 作为一种分布式数据库,其原理和传统的关系型数据库有着很大的差异。我在每周三老师的讲解中,经常混淆一些基本的概念,比如数据分片、分布式事务等。但随着不断地阅读文档、观看视频教程,以及参与社区的讨论,我对偶数 DB 的理解逐渐加深。
在学习偶数 DB 的过程中,我深刻体会到了理论与实践相结合的重要性。仅仅理解理论知识是远远不够的,真正的掌握需要通过大量的实践来巩固。我尝试使用偶数 DB 解决了一些实际问题,例如数据分片、高可用性部署等,通过这些实践,我不仅加深了对偶数 DB 的理解,也提升了自己的问题解决能力。
此外,我也认识到了持续学习的重要性。数据库技术是一个快速发展的领域,新的技术和产品不断涌现。为了保持竞争力,我需要不断地学习新技术,了解行业动态。在学习偶数 DB 的过程中,我接触到了许多新的概念和技术,如分布式系统、CAP 理论等。这些知识不仅对偶数 DB 的学习有帮助,也拓宽了我的技术视野。
回顾我的偶数 DB 学习之旅,我感到收获颇丰。我不仅掌握了分布式数据库的基本原理和实际应用,也提升了自己的问题解决能力和持续学习的意识。我相信,这些经验和教训将对我未来的学习和工作产生积极的影响。
2【学习笔记】
oushuDB 五个特点特点 :云原生、高性能、强兼容、纯国产、应用广。
oushuDB 基础架构:客户端、主节点、虚拟计算集群、虚拟存储集群。 --5.0 特点---多主节点、虚拟计算集群、虚拟存储集群。
oushuDB 的架构特点及优势:存储及计算分离机构、分布式执行计划引擎、分布式任务调度引擎(QD)、
支持 SIMD 的极速执行引擎、分布式可插拔存储引擎、分布式事务管理、数据库元数据管理、
全局资源管理。
基本组件:master 节点、segment 节点。
oushuDB 是计算和存储分离的,数据存储在 magma/hdfs。
在主节点需配置 magma observer
segment 与 master 区别:无状态、不存储数据库表元数据、不存储本地文件系统中的数据。
启动 oushuDB:集群 hawp start cluster
从节点 hawp start segment
主节点 hawp start master
启动数据存储 start-dfs.sh --hdfs
1、连接 gpadmin
psql -h 127.0.0.1 -p 5432 -U gpadmin -d postgres
h:主机
p: 端口
U: 用户名
d: 数据库名称
2、断开连接
ctrl + D
\q
3、查看数据库
\l
4、切换数据库
\c -d
5、查看当前库的表
\d
模式:
一个数据库包含多个模式(schema),而一个模式可以包含多种命名对象,比如表,数据类型,函数,操作符等。
场景:
允许多个用户同时使用一个数据库,而不产生名字冲突。
把数据库对象组织成多个 schema,好像是多个命名空间一样
第三方应用可以把它们的对象放到一个单独的 schema 中,而不和其他对象产生从图。
注意:schema 不可以嵌套,也就是说,schema 中不可以再包含 schema。
创建模式:
create schema SCHEMA_NAME;
创建或者存取一个 schema 中的对象,可以使用{schema}.{object}形式
eg. :create table myschema.test(i int);
select * from myschema.test;
删除模式:
删除一个空的 schema drop schema myschame;
删除不空的 schema,可以使用 cascade 关键词 drop schema myschema cascade;
使用搜索路径:
使用{schema}.{object}形式,通常用起来不是很方便。可以通过设置 schema 搜索路径来简化。
”SHOW search_path”命令可以给出当前的 schema 搜索路径。
”SET search_path TO schema-name1, schema-name2”可以设置 schema 搜索路径。
表:
OushuDB 表由行(rows)和列(columns)组成。
每一个列有一个列名和一个数据类型,一个表的列数和列的顺序是固定的。
一个表的行数是可变的
创建表:
create table tableName(
columnsName columnType,
...
);
删除表:
drop table tableName;
存储格式:
存储格式:AO,Parquet,ORC,MagmaAP。
AO:是按行存储的格式。
Parquet,ORC,MagmaAP:是按列存储的格式。
MagmaAP 是在 4.0.0.0 发布的全新的存储格式。MagmaAP,ORC 都支持 update/delete,支持事务, 且 MagmaAP 还支持 index。
默认创建的是 AO 表
CREATE TABLE rank1 (id int, rank int, year smallint,gender char(1), count int );
和上面的创建的表一样,显式指定存储格式类型
CREATE TABLE rank2 (id int, rank int, year smallint,gender char(1), count int ) with (appendonly =true, orientation =row);
创建一个 snappy 压缩的 AO 表
CREATE TABLE rank3 (id int, rank int, year smallint,gender char(1), count int ) with (appendonly =true, orientation =row, compresstype = snappy);
创建一个 snappy 压缩的 Parquet 表,如果不指定压缩类型的话,默认不压缩。
CREATE TABLE rank3 (id int, rank int, year smallint,gender char(1), count int ) with (appendonly =true, orientation =parquet, compresstype = snappy);
创建一个不压缩的 ORC 表,如果不指定压缩类型的话,默认不压缩。
CREATE TABLE rank3 (id int, rank int, year smallint,gender char(1), count int ) with (appendonly =true, orientation =orc);
创建一个带压缩的 ORC 表,需指定压缩类型。
CREATE TABLE rank3 (id int, rank int, year smallint,gender char(1), count int ) with (appendonly =true, orientation =orc, compresstype = lz4);
创建一个压缩的 magma 表, magma 内部自动实现了压缩。
CREATE TABLE rank3 (id int, rank int, year smallint,gender char(1), count int ) format 'magmaap';
创建一个有 primary key 的 magma 表, magma 内部自动实现了压缩。
CREATE TABLE rank3 (id int, rank int, year smallint,gender char(1), count int,primary key(id) ) format 'magmaap';
表的分布:
基于 Hash 的分布和 Random 分布
Hash:基于 Hash 的分布方法基于分布列的 Hash 值进行分布
Random:Random 分布采取随机分布模式
创建表时用户不指定分布方式的时候非 magmaap 表默认使用 Random 分布,magmaap 表目前不支持 Random 分布。
CREATE TABLE rank (id int, rank int, year smallint,gender char(1), count int );
CREATE TABLE rank (id int, rank int, year smallint,gender char(1), count int );
DISTRIBUTED RANDOMLY;
下面这个例子创建一个 Hash 分布的表,分布的 Key 使用三个列(rank, gender, year)的组合,数据分布到 32 个 bucket 里面。
如果不指定 bucketnum 的话,系统默认使用 default_hash_table_bucket_number 系统参数的值来做为 bucketnum。
CREATE TABLE rank (id int, rank int, year smallint,gender char(1), count int )
WITH (bucketnum = 32)
DISTRIBUTED BY (rank, gender,year);
优缺点:
非 Magma 表: Random 分布的表较灵活,在系统扩容添加节点后无需重新分布数据。
而 Hash 分布的表在系统扩容后,
为了利用新增加节点的计算能力,
需要重新分布数据。
另外,针对 Hash 分布的表资源管理器在分配资源的时候采取分配固定 virtual segment 数的方式,
不如 Random 分布灵活。
Hash 分布的表在某些查询上会有性能上的好处,因为有时可以避免重新分布某些表。
Hash 分布的表 bucketnum 的选取:
针对 Hash 分布的表,bucketnum 决定了一个查询的并行度。
表分区:
针对大的数据仓库事实表,往往我们可以通过对表进行分区的方式来把一个很大的表拆分成多个子表。
优点:
查询优化器可以针对分区表进行优化,如果查询只设计到某些分区,则查询计划只需要扫描这些分区,从而加速查询
如果我们按照日期进行分区的话,我们可以简单的加入分区和删除过期的分区。
OushuDB 支持基于 Range 和 List 的两种分区方式:
Range 分区:依据数值范围进行分区,比如日期,价格等
List 分区:依据一个值的列表进行分区,比如地区等
Range : # 创建一个 sales 表,按照 date 列 Range 分区,从 2008 年到 2009 年每月创建一个分区
postgres=# CREATE TABLE sales (id int, date date, amt decimal(10,2))
PARTITION BY RANGE (date)
( START (date '2008-01-01') INCLUSIVE
END (date '2009-01-01') EXCLUSIVE
EVERY (INTERVAL '1 month') );
List : List 分区表可以基于任意支持等值比较的数据类型。对与 List 分区,你需要 显式的指定所有子分区。
查看你的分区设计:
pg_partitions 视图来查看你的分区表设计。
添加一个分区:
ALTER TABLE sales ADD PARTITION
START (date '2009-02-01') INCLUSIVE
END (date '2009-03-01') EXCLUSIVE;