猿创征文 | openGauss 开发入门与实践

时间:2022-12-28 11:58:21


猿创征文 | openGauss 开发入门与实践



文章目录

  • ​​前言​​
  • ​​一、介绍​​
  • ​​二、openGauss 安装​​
  • ​​1、安装前准备​​
  • ​​① 关闭节点防火墙​​
  • ​​② 设置字符集参数(如果有多节点的话)​​
  • ​​③ 设置时区和时间(如果有多节点的话)​​
  • ​​④ 关闭 RemoveIPC​​
  • ​​⑤ 关闭 HISTSIZE 记录​​
  • ​​2、镜像包获取​​
  • ​​3、开始安装​​
  • ​​① CentOS7 以及 openEuler 20.03 及以下​​
  • ​​Ⅰ、安装前须安装​​
  • ​​Ⅱ、创建用户与赋值​​
  • ​​Ⅲ、软件安装​​
  • ​​② openEuler 22.03 及以上​​
  • ​​③ Docker 安装 openGauss​​
  • ​​三、Data Studio 安装、连接及常见问题​​
  • ​​1、Data Studio 安装​​
  • ​​2、常见问题​​
  • ​​① JVM 版本过低​​
  • ​​② 无法创建或加载日志文件​​
  • ​​③ openGauss 端口问题​​
  • ​​四、快速入门​​
  • ​​1、一个简单案例入门 openGauss​​
  • ​​① 创建数据库​​
  • ​​② 创建数据表​​
  • ​​③ 数据操作​​
  • ​​④ 修改表结构​​
  • ​​⑤ JDBC​​
  • ​​2、高级特性​​
  • ​​① 索引推荐​​
  • ​​② DB4AI​​
  • ​​③ 列存储​​
  • ​​④ LLVM​​
  • ​​⑤ Ustore​​
  • ​​⑥ MOT​​
  • ​​⑦ 全密态数据库​​
  • ​​⑧ DCF​​
  • ​​⑨ 并行查询​​
  • ​​五、总结​​
  • ​​1、优点​​
  • ​​① 高级特性​​
  • ​​② 提供了在线的 openGauss 使用平台​​
  • ​​③ Gauss 松鼠会​​
  • ​​2、缺点​​
  • ​​① 部分文档比较乱​​
  • ​​② 安装方式太繁杂,官方所给出的​​
  • ​​③ 支持的操作系统太少​​
  • ​​④ 资料太少​​



前言

在如今的情况下,各大厂商为了能够保证业务能够正常进行,都在宣传自家的数据库产品,像是阿里云的 OceanBase、腾讯的 TDSQL、华为的 openGauss 等国产数据库都在蓬勃发展着,可以看到都排在墨天轮中国数据库流行度排行的前列。因为最近有在了解华为开源的数据库 openGauss,便来写篇文章来带大家入门一下 openGauss 以及华为云 GaussDB 产品。

猿创征文 | openGauss 开发入门与实践

一、介绍

openGauss 是一款高性能、高安全、高可靠的企业级开源关系型数据库,是华为于 2019 年 9 月 19 日在全联接大会上宣布开源,并于 2020 年 6 月 30 日正式开源的数据库产品。目前已经有 100 多家企业加入到 openGauss 的社区组织,共建开源社区。

猿创征文 | openGauss 开发入门与实践

二、openGauss 安装

注意:

openGauss 目前支持的操作系统有 openEuler、麒麟V10、Asianux 以及 CentOS,详情可以查看下表:

架构

支持系统

ARM

openEuler 20.03LTS(其它版本似乎也能安装)

麒麟V10

Asianux 7.5

x86

openEuler 20.03LTS(其它版本似乎也能安装)

CentOS 7.6

Asianux 7.6

而这里,我们分别使用 ①openEuler、CentOS7 的通用安装方法与 ②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

猿创征文 | openGauss 开发入门与实践

③ 保存并生效

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 就安装成功了。

猿创征文 | openGauss 开发入门与实践

⑤ 配置生效

source ~/.bashrc

② openEuler 22.03 及以上

openEuler 22.03 在安装系统时可以选择软件,点击服务器后选择 openGauss 数据库即可。

猿创征文 | openGauss 开发入门与实践


安装完数据库后,输入以下命令即可进行 openGauss 的安装:

sudo yum install openGauss -y

③ Docker 安装 openGauss

① Docker 搜索 openGauss 镜像

docker search opengauss

猿创征文 | openGauss 开发入门与实践

② 拉取镜像

docker pull enmotech/opengauss

猿创征文 | openGauss 开发入门与实践

③ 查看镜像

docker images

猿创征文 | openGauss 开发入门与实践

④ 运行镜像

docker run --name opengauss -p 26000:26000 --privileged=true -d -e GS_PASSWORD=Enmo@123 enmotech/opengauss:latest

猿创征文 | openGauss 开发入门与实践

⑤ 获取容器 ID

docker ps

猿创征文 | openGauss 开发入门与实践

⑥ 进入容器

docker exec -it 5516999602ca /bin/bash

猿创征文 | openGauss 开发入门与实践

三、Data Studio 安装、连接及常见问题

Data Studio 是 openGauss 提供的用来管理与展示 openGauss 数据库的图形化管理工具,通过该工具可以更简单直观地进行数据库的开发以及应用构建任务。

1、Data Studio 安装

Data Studio 安装只需要从官网下载文件并解压即可。

Data Studio 的安装文件与 openGauss 的下载地址在同一个页面,点击下方链接也可以直接下载:????

之后解压到自己想要解压的目录。

猿创征文 | openGauss 开发入门与实践


打开填写自己的数据库信息即可。

猿创征文 | openGauss 开发入门与实践

2、常见问题

① JVM 版本过低

Data Studio 的安装需要 JVM 1.11 或者以上版本的 JVM,一般大家安装的可能是 1.8 版本的,所以可能需要重新安装以及配置 Java 环境变量即可解决。

猿创征文 | openGauss 开发入门与实践

② 无法创建或加载日志文件

打开 Data Studio,可能会报以下错误,这是软件权限不足的问题,给软件权限即可。

猿创征文 | openGauss 开发入门与实践

找到解压目录中的 ​​Data Studio.exe​​ 文件,右键属性,找到兼容性中的 以管理员身份运行此程序 即可解决。

猿创征文 | openGauss 开发入门与实践

③ openGauss 端口问题

不知道什么原因,openGauss 的端口似乎都不一样,在连接时可能找不到端口号,可以输入以下命令来查找 openGauss 的端口号:

netstat -ntlp

猿创征文 | openGauss 开发入门与实践


然后就可以看到自己的端口号使用 Data Studio 进行连接了。(更改端口号似乎没什么用)

四、快速入门

openGauss 对数据库的管理大致可分为三个部分:简单数据管理、高级数据管理以及 openGauss 的高级特性。学习过 MySQL 或者其它数据库的小伙伴相信可以很轻松的掌握简单数据管理与高级数据管理,而高级特性算是 openGauss 所特有的部分,需要额外掌握,具体的文档可以点击下面链接查看:????

猿创征文 | openGauss 开发入门与实践

1、一个简单案例入门 openGauss

以我们在学习数据库常见的学生成绩管理系统为例,

① 创建数据库

首先我们先创建一个数据库 demo

create database demo;

猿创征文 | openGauss 开发入门与实践

输入 ​​\l​​ 即可查看我们现有的数据库

\l

猿创征文 | openGauss 开发入门与实践

输入 ​​\c demo​​ 进入我们创建的 demo 数据库

猿创征文 | openGauss 开发入门与实践

② 创建数据表

接下来创建一个数据表

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)
)

猿创征文 | openGauss 开发入门与实践

输入 ​​\d​​​ 或者 ​​\dt​​ 查看我们创建的表

\d

猿创征文 | openGauss 开发入门与实践

③ 数据操作

向表中插入数据

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');

猿创征文 | openGauss 开发入门与实践

查询表中数据

select * from studenttable;

猿创征文 | openGauss 开发入门与实践

删除学号为 10001 的学生的数据

delete from studenttable where ID = '10001';

猿创征文 | openGauss 开发入门与实践

修改所有学生年龄 + 1

update studenttable set age = age + 1;


猿创征文 | openGauss 开发入门与实践

④ 修改表结构

修改表结构,增加表结构列

alter table studenttable add dormitory varchar(10);

猿创征文 | openGauss 开发入门与实践

⑤ 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
);

猿创征文 | openGauss 开发入门与实践

插入数据

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-');

猿创征文 | openGauss 开发入门与实践

创建模型

CREATE MODEL price_model USING logistic_regression
FEATURES size, lot
TARGET mark
FROM HOUSES
WITH learning_rate=0.88, max_iterations=default;

猿创征文 | openGauss 开发入门与实践

查看模型

select * from gs_model_warehouse where modelname='price_model';

猿创征文 | openGauss 开发入门与实践

进行预测

SELECT id, PREDICT BY price_model (FEATURES size,lot), price 
FROM houses;

猿创征文 | openGauss 开发入门与实践

③ 列存储

大多数数据库都是行存储的,因为对其进行增删改查十分的方便,不需要对其数据进行大幅度改动,但是有些时候可能会需要少量列来进行聚合操作的查询分析,这种时候使用列存储的优势就发挥出来了,这种格式检索数据非常快,且硬盘驱动器为列存储的顺序访问提供了非常好的性能。

猿创征文 | openGauss 开发入门与实践

CREATE TABLE customer_test2
(
state_ID CHAR(2),
state_NAME VARCHAR2(40),
area_ID NUMBER
)
WITH (ORIENTATION = COLUMN);

猿创征文 | openGauss 开发入门与实践

④ LLVM

openGauss 可以借助 LLVM 提供的库函数,依据查询执行计划树,将原本在执行器阶段才会确定查询实际执行路径的过程提前到执行初始化阶段,从而规避原本查询执行时候伴随的函数调用、逻辑条件分支判断以及大量的数据读取等问题,以达到提升查询性能的目的。目前支持 LLVM 表达式的有 Case…when 表达式、In 表达式、Bool 表达式等,这一部分我也不太了解,对 LLVM 编译优化在数据库中的应用以及 openGauss 中的编译优化感兴趣的小伙伴可以查看下面的页面:

⑤ 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​​ 参数用来打开密态开关

猿创征文 | openGauss 开发入门与实践

⑧ DCF

DCF(Distributed Consensus Framework),即分布式一致性共识框架。DCF实现了Paxos、Raft等解决分布式一致性问题典型算法。使用DCF可以提供日志复制、集群高可用等能力。DCF提供了自选主能力,支持少数派强起能力,日志复制支持动态流量调整。同时也提供了基于Paxos多种角色节点类型,并能进行调整。

猿创征文 | openGauss 开发入门与实践

⑨ 并行查询

并行查询简单来说就是一种用资源换取时间的方法,主要是利用计算机多核CPU架构来实现多线程并行计算,目前包括 openGauss、PolarDB MySQL 等数据库都已支持。

并行查询主要通过 ​​SET query_dop​​ 语句来设置并行度:

SET query_dop = 1;

SET query_dop = 4;

猿创征文 | openGauss 开发入门与实践

五、总结

1、优点

① 高级特性

openGauss 提供了许多高级特性来提高数据库的一些性能,以及其他数据处理的工具来方便个人以及企业开发者的开发。其中有些特性是 openGauss 所特有的,让我们不禁赞叹 openGauss 的创新能力,以及期待 openGauss 未来的发展。

② 提供了在线的 openGauss 使用平台

在 ​​openGauss 的官网​​​可以点击 ​​TRY ME​​ 即可进入官方提供的在线练习平台,这个感觉是很棒的部分,自己学习简单的 SQL 的时候可以免去搭环境的麻烦。

猿创征文 | openGauss 开发入门与实践

可以看到这个在线平台功能也是非常全的,感兴趣的小伙伴可以来体验一下。

猿创征文 | openGauss 开发入门与实践

③ Gauss 松鼠会

猿创征文 | openGauss 开发入门与实践

Gauss 松鼠会算是 openGauss 的一个社区,目前我知道的社交平台有  与 B站 上有 Gauss 松鼠会上的官方账号 的官方号上会有不少 Gauss 爱好人员发布相关知识,而 B站的 Gauss 松鼠会官方号会不定期有大佬来讲解 openGauss 的入门上手、技术细节等,非常值得大家去听一听。

Gauss 松鼠会

2、缺点

① 部分文档比较乱

不得不说,openGauss 的文档有些混乱,比如知识图谱中点进去就是大串代码,没有进行其它的文字解释。这里可能还没有完成。看官方文档可能还没有去看别人的博客来的快。文档中似乎没有自定义函数的内容。

猿创征文 | openGauss 开发入门与实践

② 安装方式太繁杂,官方所给出的

相较于 MySQL,openGauss 安装方式可能会稍微有一点麻烦,且按照官方文档安装似乎存在错误,比如自己在用 openEuler 创建安装过程中创建 demo 的时候,就会报以下错误。而且网上资料较少,自己只是安装就装了 3 天,真的都要炸了。

猿创征文 | openGauss 开发入门与实践

安装方式也有人提出 Issues 来建议简化安装方式,不过似乎还没有解决。

猿创征文 | openGauss 开发入门与实践

但是在 openEuler 22.03 安装时已经可以预选是否包含 openGauss Server,从该角度上来说也是在一定程度上降低了部署 openGauss 的难度。

其次,现在似乎也可以通过配置软件源的方式来安装 openGauss,只不过官方文档似乎没有写。

③ 支持的操作系统太少

这个虽然不是什么大问题,但是对于初学者来说可能还是不够友好;目前只支持 openEuler、CentOS、麒麟V10 与 Asianux 7.5,Ubuntu 也可以安装,不过官网以及官方文档中都没有教程,估计又是哪个大神搞出来的,希望官方可以支持一下其它操作系统。

④ 资料太少

每次遇到问题,在官方文档以及网上都找不到解决问题的方法,只能自己一个个尝试,一试就要尝试很长时间,已经多次劝退了。如果想要使用 openGauss 的话,还是建议去华为云购买 GaussDB(for openGauss),免去了搭建的麻烦,而且文档也很全,文档如下:


最后,希望大家都能为国产数据库加油,为国产打call!