作者:洋
缘起
1970年IBM的Edgar F. Codd博士的专著《A Relational Model of Data for Large Shared Data Banks》,被认为是关系型数据库的开山鼻祖,奠定了关系型数据库的一系列原则。1977年,Michael Stonebraker开启了一个名为Ingres的项目, 它是PostgreSQL的前身。 他引入了对象关系模型, 并于1996年正式开源Postgresql 6.0。除了优良的基础设计,它采用了类BSD3.0协议,给予了开发者最大的自由,因此大量的衍生数据库基于其分支。顺带说一句,两位大佬分别获得了1981年与2014年的图灵奖。
openGauss经由中华之光的华为开发团队精心打造并开源的, 正是分支于PostgreSQL 9.2.4。 据统计,openGauss 于2020年开源时有515个数据库参数, 已经远多于PostgreSQL的290个数据库参数。功能远强于同期的PostgreSQL, 改变包括但不限于:增加双写功能,增大transaction id范围,支持增量检查点,增加性能监控dbe_perf schema等。
而我,作为一名数据库小白,有幸参加了墨天轮举办的《每日一练:openGauss在线实训课程》的21天打卡活动, 亲身学习并操作这款数据库。
沉浸
墨天轮的线上系统让我能够能够在没能搭建自己环境的第一天就能实操所有命令。
21天的内容包括基本的客户端基本操作,SQL语句实操。
SQL
DDL(Data Definition Language数据定义语言)
CREATE/ALTER/DROP DATABASE/SCHEMA/TABLESPACE/TABLE[ PARTITION]/VIEW/INDEX/PROCEDURE/FUNCTION/PACKAGE/EXTENSION/AGGREGATE/CAST/EXTENSION/OPERATOR/LANGUAGE/TYPE
CURSOR/MOVE/FETCH/CLOSE
REINDEX
DML(Data Manipulation Language数据操作语言),用于对数据库表中的数据进行操作。如:插入、更新、查询、删除。
INSERT UPDATE SELECT DELETE/TRUNCATE
COPY LOCK CALL
ALTER SESSION
DCL(Data Control Language数据控制语言),是用来创建用户角色、设置或更改数
据库用户或角色权限的语句。
CREATE/ALTER/DROP USER
GRANT/REVOKE
工具
gsql
是客户端命令行工具, 也是在学习过程中我主要应用的工具, 但为了配合opengauss的使用, 我还需要学习服务端的工具:
gs_om
服务端主力选手
gs_ctl
可以用于各种服务端的命令
gs_guc
用于设置openGauss配置文件。 postgresql.conf、pg_hba.conf和 pg_ident.conf),并统一存放在数据目录(data)下。用户可以修改配置文件的名称和存放路径。
除此之外, 还有一系列的诸如数据导出恢复(
gs_dump
,
pg_dumpall
,
gs_restore
),数据备份(
gs_backup
,
gs_basebackup
),工况查询(
gs_check
,
gs_checkos
,
gs_checkperf
,
gs_collector
)等一系列工具,想成为DBA必须熟练掌握。
个人心得
在这21天中, 除了按时完成课程与作业, 我也浏览了openGauss的主要文档,赞叹文档内容非常之全面。
作为一个缺乏项目经验的人,我进入数据库学习经常的困扰就是觉得自己是在盲人摸象,缺乏对全局的认识。
但这21天的学习让我有了对数据库粒度的基本认识:
数据库 -> 逻辑分割信息模式、物理分割表空间 -> 表 -> 行(列)。
通过对如
pg_class
,
pg_type
,
pg_proc
,
pg_toast
这些系统表的学习,我对数据库的大局观增加了。
比如想成为数据库高手, 那么pg_proc里的函数不可不掌握,
select * from pg_proc;
返回3703个内置函数,
pg_proc
中的函数涵盖了从基本类型(整型、浮点型、字符、字符串)处理函数,到复杂类型(诸如日期、几何变换、网址、全文)的处理, 再到加解密、 统计 、聚合、以及AI等函数, 一站式解决分析问题, 要想写好存储过程, 必须要拿出钻研的劲头, 才能不浪费openGauss研发人员为我们提供的工具!
想关注数据库性能侧profiling,
pg_resource_pool
,
io_limits
,
pg_profile
里的参数要如数家珍。
特别地,openGauss在每个库下面会默认存在一个dbe_perf的性能监控视图,类似mysql的performance_schema,里面有几百个性能视图,虽然这些视图大部分pg里面都有,但是单独做到一个schema里方便查看和管理。
dbe_perf schema中包含可以对数据库全面调优的参数, 比如:
select * from dbe_perf.INSTANCE_TIME
能够返回包括数据库在解析,规划, 重写, 存储过程编译、执行、IO中分别花费的时间。
select * from dbe_perf.MEMORY_NODE_DETAIL
能够返回数据库节点内存使用情况
不仅低头写代码,更要抬头看路,时刻关注自己写代码的效率与资源占用情况,
blockchain
schema 可以确保每一个数据库的更改都能完好的记录在Ledger中,是一个很潮很值得研究的功能。
结语
21天的时光是短暂的,但openGauss的交互式学习为我打下了基础。
每当我遇到困难时, 群里的同学与墨天轮的老师总是会热心地伸出援助之手,让我能按时地完成学习与作业并将文章发表在墨天轮上(见附录)
在信息时代的浪潮里,小白也坚信可以通过抓住新数据库的良机,长风破浪会有时, 直挂云帆济沧海。
幸好遇见你, 在追求更好的路上, openGauss社区与我同在。
附录: 21天openGauss每日一练
openGauss每日一练第 1 天 | openGauss创建表、插入记录、查询记录和删除表基本使用
openGauss每日一练第 2 天 | openGauss查询、更新和删除基本使用
openGauss每日一练第 3 天 | 创建数据库、修改数据库属性和删除数据库
openGauss每日一练第 4 天 | 创建角色、修改角色属性、更改角色权限和删除角色
openGauss每日一练第 5 天 | 创建用户、修改用户属性、更改用户权限和删除用户
openGauss每日一练第 6 天 | 学习openGauss创建模式、修改模式属性和删除模式
openGauss每日一练第 7 天 | 表空间
openGauss每日一练第 8 天 | 学习openGauss分区表
openGauss每日一练第 9 天 | 普通表索引
openGauss每日一练第 10 天 | 分区表索引
openGauss每日一练第 11 天 | 学习openGauss视图
openGauss每日一练第 12 天 | openGauss 数据类型
openGauss每日一练第 13 天 | openGauss 导入数据
openGauss每日一练第 14 天 | openGauss 导出数据
openGauss每日一练第 15 天 | openGauss定义存储过程和函数
openGauss每日一练第 16 天 | openGauss事务控制
openGauss每日一练第 17 天 | openGauss定义游标
openGauss每日一练第 18 天 | openGauss触发器
openGauss每日一练第 19 天 | openGauss收集统计信息、打印执行计划、垃圾收集和checkpoint
openGauss每日一练第 20 天 | openGauss全文检索
openGauss每日一练第 21 天 | openGauss存储模型-行存和列存
版权归原作者 Gauss松鼠会 所有, 如有侵权,请联系我们删除。