#冲刺创作新星# openGauss 入门上手指南 原创
@[toc]
前言
在如今的情况下,各大厂商为了能够保证业务能够正常进行,都在宣传自家的数据库产品,像是阿里云的 OceanBase、腾讯的 TDSQL、华为的 openGauss 等国产数据库都在蓬勃发展着,可以看到都排在墨天轮中国数据库流行度排行的前列。因为最近有在了解华为开源的数据库 openGauss,便来写篇文章来带大家入门一下 openGauss 以及华为云 GaussDB 产品。
一、介绍
openGauss 是一款高性能、高安全、高可靠的企业级开源关系型数据库,是华为于 2019 年 9 月 19 日在全联接大会上宣布开源,并于 2020 年 6 月 30 日正式开源的数据库产品。目前已经有 100 多家企业加入到 openGauss 的社区组织,共建开源社区。
- openGauss Gitee 地址:https://gitee.com/opengauss
二、openGauss 安装
<font color=‘red’ size=‘4’>注意:</font> 小白可以直接通过安装 openEuler 时进行 openGauss 的部署,手动安装可能会出现一些问题。
openGauss 目前支持的操作系统有 openEuler、麒麟V10、Asianux 以及 CentOS,详情可以查看下表:
架构 | 支持系统 |
---|---|
ARM | openEuler 20.03LTS(其它版本似乎也能安装)<br/>麒麟V10<br/>Asianux 7.5 |
x86 | openEuler 20.03LTS(其它版本似乎也能安装)<br/>CentOS 7.6<br/>Asianux 7.6 |
而这里,我们分别使用 <font size=‘1’ color=‘red’>①</font>openEuler、CentOS7 的通用安装方法与 <font size=‘1’ color=‘red’>②</font>openEuler 22.03 及以上版本使用软件源安装。
1、安装前准备
这里主要针对单节点、多节点两种情况;其次,如果你是用的是 wsl 版本的 openEuler 与 CentOS7,这一步可以直接跳过。
① 关闭节点防火墙
① 输入以下命令关闭防火墙
systemctl disable firewalld.service
② 查看防火墙状态(是否关闭成功)
systemctl status firewalld.service
② 设置字符集参数(如果有多节点的话)
① 将所有数据库节点的字符集设置为相同的字符集
sudo vim /etc/profile
② 在其中添加以下语句
export LANG=XXXX # XXX为Unicode编码
③ 设置时区和时间(如果有多节点的话)
① 检查数据库时区
date
② 使用如下命令将各数据库节点 /usr/share/zoneinfo/
目录下的时区文件拷贝为 /etc/localtime
文件。
cp /usr/share/zoneinfo/$地区/$时区 /etc/localtime
④ 关闭 RemoveIPC
A、修改 /etc/systemd/logind.conf
文件中的 “RemoveIPC” 值为 “no”。
① 使用 VIM 打开 logind.conf 文件。
vim /etc/systemd/logind.conf
② 修改 “RemoveIPC” 值为 “no”。
RemoveIPC=no
B、修改 /usr/lib/systemd/system/systemd-logind.service
文件中的 “RemoveIPC” 值为 “no”。
① 使用 VIM 打开 systemd-logind.service 文件。
vim /usr/lib/systemd/system/systemd-logind.service
② 修改 “RemoveIPC” 值为 “no”。
RemoveIPC=no
C、重新加载配置参数。
systemctl daemon-reload
systemctl restart systemd-logind
D、检查修改是否生效。
loginctl show-session | grep RemoveIPC
systemctl show systemd-logind | grep RemoveIPC
⑤ 关闭 HISTSIZE 记录
① 修改 /etc/profile 文件
sudo vim /etc/profile
② 设置 HISTSIZE 值为 0
③ 保存并生效
source /etc/profile
2、镜像包获取
镜像包可以在 openGauss 官网中获取,目前主要包含企业版、极简版、轻量版、分布式镜像版这四种版本,分别面向不同的用户以及场景,大家可以根据自己的需求进行选择安装。
这里我选择 openGauss 极简版进行安装。输入以下命令下载 CentOS 版本的 openGauss :
wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/3.1.0/x86/openGauss-3.1.0-CentOS-64bit.tar.bz2
3、开始安装
① CentOS7 以及 openEuler 20.03 及以下
Ⅰ、安装前须安装
① 安装前安装 libaio*
与 bzip2
:
yum install libaio*
yum install bzip2
Ⅱ、创建用户与赋值
① 创建用户:
sudo adduser omm
② 给 omm 赋 /opt
文件夹权限:
sudo chown omm /opt
③ 切换到 omm 用户
su - omm
Ⅲ、软件安装
① 创建安装文件夹(普通用户)
mkdir -p /opt/software/openGauss
② 解压文件安装包到指定文件夹(普通用户)
tar -jxf openGauss-x.x.x-openEuler-64bit.tar.bz2 -C /opt/software/openGauss
③ 进入解压目录下的 simpleInstall 目录
cd /opt/software/openGauss/simpleInstall
④ 执行安装脚本安装 openGauss
sh install.sh -w GaussUser@1234
-
-w
:初始化数据库密🎈码(gs_initdb指定),因安全需要,此项必须设置。 -
-p
:指定openGauss端口号,如不指定,默认为5432。 -
-h|–help
:打印使用说明。
至此,openGauss 就安装成功了。
⑤ 配置生效
source ~/.bashrc
② openEuler 22.03 及以上
openEuler 22.03 在安装系统时可以选择软件,点击服务器后选择 openGauss 数据库即可。
安装完数据库后,输入以下命令即可进行 openGauss 的安装:
sudo yum install openGauss -y
③ Docker 安装 openGauss
① Docker 搜索 openGauss 镜像
docker search opengauss
② 拉取镜像
docker pull enmotech/opengauss
③ 查看镜像
docker images
④ 运行镜像
docker run --name opengauss -p 26000:26000 --privileged=true -d -e GS_PASSWORD=Enmo@123 enmotech/opengauss:latest
⑤ 获取容器 ID
docker ps
⑥ 进入容器
docker exec -it 5516999602ca /bin/bash
三、Data Studio 安装、连接及常见问题
Data Studio 是 openGauss 提供的用来管理与展示 openGauss 数据库的图形化管理工具,通过该工具可以更简单直观地进行数据库的开发以及应用构建任务。
1、Data Studio 安装
Data Studio 安装只需要从官网下载文件并解压即可。
Data Studio 的安装文件与 openGauss 的下载地址在同一个页面,点击下方链接也可以直接下载:👇
之后解压到自己想要解压的目录。
打开填写自己的数据库信息即可。
2、常见问题
① JVM 版本过低
Data Studio 的安装需要 JVM 1.11 或者以上版本的 JVM,一般大家安装的可能是 1.8 版本的,所以可能需要重新安装以及配置 Java 环境变量即可解决。
② 无法创建或加载日志文件
打开 Data Studio,可能会报以下错误,这是软件权限不足的问题,给软件权限即可。
找到解压目录中的 Data Studio.exe
文件,右键属性,找到兼容性中的 以管理员身份运行此程序 即可解决。
③ openGauss 端口问题
不知道什么原因,openGauss 的端口似乎都不一样,在连接时可能找不到端口号,可以输入以下命令来查找 openGauss 的端口号:
netstat -ntlp
然后就可以看到自己的端口号使用 Data Studio 进行连接了。(更改端口号似乎没什么用)
四、快速入门
openGauss 对数据库的管理大致可分为三个部分:简单数据管理、高级数据管理以及 openGauss 的高级特性。学习过 MySQL 或者其它数据库的小伙伴相信可以很轻松的掌握简单数据管理与高级数据管理,而高级特性算是 openGauss 所特有的部分,需要额外掌握,具体的文档可以点击下面链接查看:👇
1、一个简单案例入门 openGauss
以我们在学习数据库常见的学生成绩管理系统为例,
① 创建数据库
首先我们先创建一个数据库 demo
create database demo;
输入 \l
即可查看我们现有的数据库
\l
输入 \c demo
进入我们创建的 demo 数据库
② 创建数据表
接下来创建一个数据表
CREATE TABLE StudentTable (
ID varchar(8) NOT NULL,
name varchar(8) DEFAULT NULL,
sex varchar(2) DEFAULT NULL,
age decimal(4,0) DEFAULT NULL,
class varchar(10) DEFAULT NULL,
password varchar(6) DEFAULT NULL,
PRIMARY KEY (ID)
)
输入 \d
或者 \dt
查看我们创建的表
\d
③ 数据操作
向表中插入数据
insert into studenttable (ID,name,sex,age,class,password) values ('10001','李明','M',18,'软工','123456');
insert into studenttable (ID,name,sex,age,class,password) values ('10002','王五','M',19,'网络','123456');
insert into studenttable (ID,name,sex,age,class,password) values ('10003','金三','F',18,'软工','123456');
insert into studenttable (ID,name,sex,age,class,password) values ('10004','楚云','F',18,'数据','123456');
查询表中数据
select * from studenttable;
删除学号为 10001 的学生的数据
delete from studenttable where ID = '10001';
修改所有学生年龄 + 1
update studenttable set age = age + 1;
'
④ 修改表结构
修改表结构,增加表结构列
alter table studenttable add dormitory varchar(10);
⑤ JDBC
复制官方代码,修改账号、密🎈码、url,用 JDBC 连接 openGauss 数据库。
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
public class JdbcConn {
public static void main(String[] args) {
getConnect();
}
public static Connection getConnect() {
String driver = "com.huawei.opengauss.jdbc.Driver";
String sourceURL = "jdbc:opengauss://127.0.0.1:8080/demo";
Properties info = new Properties();
info.setProperty("user","omm");
info.setProperty("password","123456");
Connection conn = null;
try {
Class.forName(driver);
} catch (Exception var9) {
var9.printStackTrace();
return null;
}
try {
conn = DriverManager.getConnection(sourceURL, info);
System.out.println("连接成功!");
return conn;
} catch (Exception var8) {
var8.printStackTrace();
return null;
}
}
}
2、高级特性
① 索引推荐
索引推荐算是解决了一个非常现实的问题,解决了大型关系型数据库中索引设计以及 SQL 语句执行效率的问题。openGauss 索引推荐包括三个子功能:单 query 索引推荐、虚拟索引、workload 级别索引推荐。
select "table", "column" from gs_index_advise('SELECT id from studenttable where age = 18');
② DB4AI
DB4AI 是一个人工智能数据库,它的创建是为了满足对数据库的需求,让数据库可以处理训练人工智能模型所需的大量数据。而 openGauss 支持原生 DB4AI 能力,3.1 版本的 openGauss 所支持的 DB4AI 支持基于 SGD 算子的逻辑回归(目前支持二分类任务)、线性回归和支持向量机算法(分类任务),以及基于 K-Means 算子的 Kmeans 聚类算法。
创建数据表
CREATE TABLE houses (
id INTEGER,
tax INTEGER,
bedroom INTEGER,
bath DOUBLE PRECISION,
price INTEGER,
size INTEGER,
lot INTEGER,
mark text
);
插入数据
insert into houses(id, tax, bedroom, bath, price, size, lot, mark) VALUES
(1,590,2,1,50000,770,22100,'a+'),
(2,1050,3,2,85000,1410,12000,'a+'),
(3,20,2,1,22500,1060,3500,'a-'),
(4,870,2,2,90000,1300,17500,'a+'),
(5,1320,3,2,133000,1500,30000,'a+'),
(6,1350,2,1,90500,850,25700,'a-'),
(7,2790,3,2.5,260000,2130,25000,'a+'),
(8,680,2,1,142500,1170,22000,'a-'),
(9,1840,3,2,160000,1500,19000,'a+'),
(10,3680,4,2,240000,2790,20000,'a-'),
(11,1660,3,1,87000,1030,17500,'a+'),
(12,1620,3,2,118500,1250,20000,'a-'),
(13,3100,3,2,140000,1760,38000,'a+'),
(14,2090,2,3,148000,1550,14000,'a-'),
(15,650,3,1.5,65000,1450,12000,'a-');
创建模型
CREATE MODEL price_model USING logistic_regression
FEATURES size, lot
TARGET mark
FROM HOUSES
WITH learning_rate=0.88, max_iterations=default;
查看模型
select * from gs_model_warehouse where modelname='price_model';
进行预测
SELECT id, PREDICT BY price_model (FEATURES size,lot), price
FROM houses;
③ 列存储
大多数数据库都是行存储的,因为对其进行增删改查十分的方便,不需要对其数据进行大幅度改动,但是有些时候可能会需要少量列来进行聚合操作的查询分析,这种时候使用列存储的优势就发挥出来了,这种格式检索数据非常快,且硬盘驱动器为列存储的顺序访问提供了非常好的性能。
CREATE TABLE customer_test2
(
state_ID CHAR(2),
state_NAME VARCHAR2(40),
area_ID NUMBER
)
WITH (ORIENTATION = COLUMN);
④ LLVM
openGauss 可以借助 LLVM 提供的库函数,依据查询执行计划树,将原本在执行器阶段才会确定查询实际执行路径的过程提前到执行初始化阶段,从而规避原本查询执行时候伴随的函数调用、逻辑条件分支判断以及大量的数据读取等问题,以达到提升查询性能的目的。目前支持 LLVM 表达式的有 Case…when 表达式、In 表达式、Bool 表达式等,这一部分我也不太了解,对 LLVM 编译优化在数据库中的应用以及 openGauss 中的编译优化感兴趣的小伙伴可以查看下面的页面:
- https://opengauss.org/zh/docs/3.1.0/docs/BriefTutorial/LLVM.html
- https://zhuanlan.zhihu.com/p/383816060
⑤ Ustore
Ustore 存储引擎,又名 In-place Update 存储引擎(原地更新),是 openGauss 内核新增的一种存储模式。此前的版本使用的行存储引擎是 Append Update(追加更新)模式。追加更新对于业务中的增、删以及 HOT(HeapOnly Tuple)Update(即同一页面内更新)有很好的表现,但对于跨数据页面的非 HOT UPDATE场景,垃圾回收不够高效。因此,Ustore存储引擎应运而生。
Ustore 存储引擎主要适用频繁更新数据的场景下,在这种场景下依然能够使业务系统运行更加平稳,以此来适应更多业务场景和工作负载。
⑥ MOT
openGauss 引入了MOT(Memory-Optimized Table)存储引擎,针对多核与大内存服务器进行了优化。这个特性主要运用到生产方面,为事务性工作负载提供更高的性能,一般开发过程中应该用不到,感兴趣的小伙伴可以查看下面的页面进行了解:👇
⑦ 全密态数据库
全密态数据库意在解决数据全生命周期的隐私保护问题,使得系统无论在何种业务场景和环境下,数据在传输、运算以及存储的各个环节始终都处于密文状态。
目前全密态数据库支持两种连接方式:gsql 连接与 jdbc 连接。
gsql 连接数据库主要通过以下命令打开:
gsql -p PORT -d postgres -r -C
-C
参数用来打开密态开关
⑧ DCF
DCF(Distributed Consensus Framework),即分布式一致性共识框架。DCF实现了Paxos、Raft等解决分布式一致性问题典型算法。使用DCF可以提供日志复制、集群高可用等能力。DCF提供了自选主能力,支持少数派强起能力,日志复制支持动态流量调整。同时也提供了基于Paxos多种角色节点类型,并能进行调整。
⑨ 并行查询
并行查询简单来说就是一种用资源换取时间的方法,主要是利用计算机多核CPU架构来实现多线程并行计算,目前包括 openGauss、PolarDB MySQL 等数据库都已支持。
并行查询主要通过 SET query_dop
语句来设置并行度:
SET query_dop = 1;
SET query_dop = 4;
五、总结
1、优点
① 高级特性
openGauss 提供了许多高级特性来提高数据库的一些性能,以及其他数据处理的工具来方便个人以及企业开发者的开发。其中有些特性是 openGauss 所特有的,让我们不禁赞叹 openGauss 的创新能力,以及期待 openGauss 未来的发展。
② 提供了在线的 openGauss 使用平台
在 openGauss 的官网可以点击 TRY ME 即可进入官方提供的在线练习平台,这个感觉是很棒的部分,自己学习简单的 SQL 的时候可以免去搭环境的麻烦。
可以看到这个在线平台功能也是非常全的,感兴趣的小伙伴可以来体验一下。
③ Gauss 松鼠会
Gauss 松鼠会算是 openGauss 的一个社区,目前我知道的社交平台有 CSDN 与 B站 上有 Gauss 松鼠会上的官方账号,CSDN 的官方号上会有不少 Gauss 爱好人员发布相关知识,而 B站的 Gauss 松鼠会官方号会不定期有大佬来讲解 openGauss 的入门上手、技术细节等,非常值得大家去听一听。
Gauss 松鼠会:
- CSDN 平台:https://bbs.csdn.net/forums/gaussdb
- B 站:https://space.bilibili.com/629605267
- OSCHINA:https://my.oschina.net/gaussdb
2、缺点
① 部分文档比较乱
不得不说,openGauss 的文档有些混乱,比如知识图谱中点进去就是大串代码,没有进行其它的文字解释。这里可能还没有完成。看官方文档可能还没有去看别人的博客来的快。文档中似乎没有自定义函数的内容。
② 安装方式太繁杂,官方所给出的
相较于 MySQL,openGauss 安装方式可能会稍微有一点麻烦,且按照官方文档安装似乎存在错误,比如自己在用 openEuler 创建安装过程中创建 demo 的时候,就会报以下错误。而且网上资料较少,自己只是安装就装了 3 天,真的都要炸了。
安装方式也有人提出 Issues 来建议简化安装方式,不过似乎还没有解决。
但是在 openEuler 22.03 安装时已经可以预选是否包含 openGauss Server,从该角度上来说也是在一定程度上降低了部署 openGauss 的难度。
其次,现在似乎也可以通过配置软件源的方式来安装 openGauss,只不过官方文档似乎没有写。
③ 支持的操作系统太少
这个虽然不是什么大问题,但是对于初学者来说可能还是不够友好;目前只支持 openEuler、CentOS、麒麟V10 与 Asianux 7.5,Ubuntu 也可以安装,不过官网以及官方文档中都没有教程,估计又是哪个大神搞出来的,希望官方可以支持一下其它操作系统。
④ 资料太少
每次遇到问题,在官方文档以及网上都找不到解决问题的方法,只能自己一个个尝试,一试就要尝试很长时间,已经多次劝退了。如果想要使用 openGauss 的话,还是建议去华为云购买 GaussDB(for openGauss),免去了搭建的麻烦,而且文档也很全,文档如下:
- GaussDB(for openGauss) 文档:https://support.huaweicloud.com/opengauss/index.html
最后,希望大家都能为国产数据库加油,为国产打call!