PostgreSQL实例管理

1. PG实例的创建

介绍

本课程将带领您在已经部署 SequoiaDB 巨杉数据库引擎及安装了 SequoiaSQL-PostgreSQL 程序的环境中,创建 PostgreSQL 实例及数据库和数据表,并向数据表中写入数据。

请点击右侧选择使用的实验环境
部署架构:
本课程中 SequoiaDB 巨杉数据库的集群拓扑结构为三分区单副本,其中包括:1 个 SequoiaSQL-PostgreSQL 数据库实例节点、1 个引擎协调节点,1 个编目节点与 3 个数据节点。

图片描述

详细了解 SequoiaDB 巨杉数据库系统架构:

SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-PostgreSQL 实例均为 3.4 版本。

切换用户及查看数据库版本

切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-PostgreSQL 实例的操作系统用户为 sdbadmin。

su - sdbadmin

用户 sdbadmin 的密码为 sdbadmin

查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:

sequoiadb --version

查看节点启动列表

查看 SequoiaDB 巨杉数据库引擎节点列表:

sdblist 

如果显示的节点数量与预期不符,请稍等初始化完成并重试该步骤。

C: 编目节点,S:协调节点,D:数据节点

创建 PostgreSQL 实例

实验环境已经安装了 SequoiaSQL-PostgreSQL 服务,可以直接添加 PostgreSQL 实例。

1)切换到 SequoiaSQL-PostgreSQL 安装目录;

cd /opt/sequoiasql/postgresql
copy
2)添加实例;

bin/sdb_sql_ctl addinst myinst -D database/5432/
copy
Note:

指定实例名为 myinst,该实例名映射相应的数据目录和日志路径,用户可以根据自己需要指定不同的实例名,实例默认端口号为 5432。

3)查看实例,可以看到实例名为 myinst 的数据和日志目录信息;

bin/sdb_sql_ctl listinst
copy
4)启动实例;

bin/sdb_sql_ctl start myinst
copy
5)查看实例状态;

bin/sdb_sql_ctl status
copy
操作截图:

图片描述

在 SequoiaDB 中建立集合空间和集合

进入 SequoiaDB Shell,在 SequoiaDB 巨杉数据库引擎中创建 company 集合空间和 employee 集合。

1)使用 Linux 命令进入 SequoiaDB Shell 命令行;

sdb
copy
2)使用 JavaScript 语法,连接协调节点,获取数据库连接;

var db = new Sdb("localhost", 11810);
copy
3)创建 company_domain 数据域;

db.createDomain("company_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } );
copy
4)创建 company 集合空间;

db.createCS("company", { Domain: "company_domain" } );
copy
5)创建 employee 集合;

db.company.createCL("employee", { "ShardingKey": { "_id": 1 }, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
copy
6)退出 SequoiaDB Shell;

quit;
copy

创建数据库

在 SequoiaSQL-PostgreSQL 实例中创建 company 数据库实例,为接下来验证 PostgreSQL 语法特性做准备。

1)在 PostgreSQL 实例创建数据库 company;

/opt/sequoiasql/postgresql/bin/sdb_sql_ctl createdb company myinst
copy
2)查看数据库;

/opt/sequoiasql/postgresql/bin/psql -l

配置 PostgreSQL 实例

在 PostgreSQL 实例中加载 SequoiaDB 的连接驱动并配置连接参数。

加载 SequoiaDB 连接驱动
1)登录到 PostgreSQL 实例 Shell;

/opt/sequoiasql/postgresql/bin/psql -p 5432 company
copy
2)加载 SequoiaDB 连接驱动;

CREATE EXTENSION sdb_fdw;
copy
配置与 SequoiaDB 连接参数
在 PostgreSQL 实例中配置 SequoiaDB 连接参数:

CREATE SERVER sdb_server FOREIGN DATA WRAPPER sdb_fdw
OPTIONS
(
address '127.0.0.1',
service '11810',
user '',
password '',
preferedinstance 'A',
transaction 'on'
);
copy
Note:

如果没有配置数据库密码验证,可以忽略 user 与 password 字段。
如果需要提供多个协调节点地址,options 中的 address 字段可以按格式 'ip1:port1,ip2:port2,ip3:port3'填写。此时,service 字段可填写任意一个非空字符串。
preferedinstance 设置 SequoiaDB 的连接属性。多个属性以逗号分隔,如:preferedinstance '1,2,A'。详细配置请参考 preferedinstance 取值
preferedinstancemode 设置 preferedinstance 的选择模式
sessiontimeout 设置会话超时时间 如:sessiontimeout '100'
transaction 设置 SequoiaDB 是否开启事务,默认为 off。开启为 on
cipher 设置是否使用加密文件输入密码,默认为 off。开启为 on
token 设置加密口令
cipherfile 设置加密文件,默认为 ./passwd

实例与数据引擎中集合关联

将 PostgreSQL 实例中的外部表与 SequoiaDB 中的集合空间、集合关联。

1)创建 employee 表;

CREATE FOREIGN TABLE employee
(
empno INT,
ename VARCHAR(128),
age INT
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'employee', decimal 'on' );
copy
2)查询数据,验证是否能够访问数据引擎;

SELECT * FROM employee LIMIT 1;
copy
Note:

集合空间与集合必须已经存在于 SequoiaDB,否则查询出错。
如果需要对接 SequoiaDB 的 decimal 字段,则需要在 options 中指定 decimal 'on' 。
pushdownsort 设置是否下压排序条件到 SequoiaDB,默认为 on,关闭为 off。
pushdownlimit 设置是否下压 limit 和 offset 条件到 SequoiaDB,默认为 on,关闭为 off。
开启 pushdownlimit 时,必须同时开启 pushdownsort,否则可能会造成结果非预期的问题。
默认情况下,表的字段映射到 SequoiaDB 中为小写字符,如果强制指定字段为大写字符,创建方式参考“注意事项1”。
映射 SequoiaDB 的数组类型,创建方式参考“注意事项2”。

实例进行数据操作

使用 PostgreSQL 实例操作关联表中的数据。

通过关联表插入数据
在 PostgreSQL 实例中向外部表 employee 中插入数据:

INSERT INTO employee VALUES (10001, 'Georgi', 48);
INSERT INTO employee VALUES (10002, 'Bezalel', 21);
copy
查询 employee 表中的数据
查询 PostgreSQL 实例外部表的数据:
SELECT * FROM employee;

总结

通过本课程,我们通过 PostgreSQL 语法在 SequoiaSQL-PostgreSQL 实例上创建外部表与 SequoiaDB 巨杉数据库引擎的集合关联,并通过外部表实现对数据库引擎的数据操作。

2. PG实例操作与事务管理

课程介绍

本课程将带领您在已经安装部署 SequoiaDB 巨杉数据库引擎(已开启事务,隔离级别为读未提交)及 SequoiaSQL-PostgreSQL 实例的环境中进行基本的 PostgreSQL 语法操作,并演示事务的使用。

PostgreSQL 实例事务功能是基于 SequoiaDB 巨杉数据库存储引擎来完成的,如果需要 PostgreSQL 实例支持事务,那么 SequoiaDB 巨杉数据库存储引擎也必须开启事务。当事务功能开启时,PostgreSQL 实例的隔离级别设置以SequoiaDB 巨杉数据库存储引擎的为准。

请点击右侧选择使用的实验环境
环境架构:
本课程中 SequoiaDB 巨杉数据库的集群拓扑结构为三分区单副本,其中包括:1 个 SequoiaSQL-PostgreSQL 数据库实例节点、1 个引擎协调节点,1 个编目节点与 3 个数据节点。

图片描述

详细了解 SequoiaDB 巨杉数据库系统架构:

SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-PostgreSQL 实例均为 3.4 版本。

环境检查

切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-PostgreSQL 实例的操作系统用户为 sdbadmin。

su - sdbadmin
copy
Note:

用户 sdbadmin 的密码为 sdbadmin

查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:

sequoiadb --version

查看节点启动列表

查看 SequoiaDB 巨杉数据库引擎节点列表:

sdblist
copy
操作截图:

图片描述

Note:

如果显示的节点数量与预期不符,请稍等初始化完成并重试该步骤。

C: 编目节点,S:协调节点,D:数据节点

检查 PostgreSQL 实例进程
1)查看 PostgreSQL 数据库实例;

/opt/sequoiasql/postgresql/bin/sdb_sql_ctl listinst
copy
操作截图: 图片描述

2)查看数据库实例进程;

ps -elf | grep postgre
copy

创建域、集合空间和集合

进入 SequoiaDB Shell,在 SequoiaDB 巨杉数据库引擎中创建 company 集合空间、 employee 集合和 manager 集合。

1)使用 Linux 命令进入 SequoiaDB Shell 命令行;

sdb
copy
2)使用 JavaScript 语法,连接协调节点,获取数据库连接;

var db = new Sdb("localhost", 11810);
copy
3)创建 company_domain 数据域;

db.createDomain("company_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } );
copy
4)创建 company 集合空间;

db.createCS("company", { Domain: "company_domain" } );
copy
5)创建 employee 集合;

db.company.createCL("employee", { "ShardingKey": { "empno": 1 }, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
copy
6)创建 manager 集合;

db.company.createCL("manager", { "ShardingKey": { "empno": 1 }, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
copy
7)退出 SequoiaDB Shell;

quit;

创建数据库

在 SequoiaSQL-PostgreSQL 实例中创建 company 数据库,为接下来验证 PostgreSQL 语法特性做准备。

1)在 PostgreSQL 实例创建数据库 company;

/opt/sequoiasql/postgresql/bin/sdb_sql_ctl createdb company myinst
copy
2)查看数据库;

/opt/sequoiasql/postgresql/bin/psql -l

配置 PostgreSQL 实例

在 PostgreSQL 实例中加载 SequoiaDB 的连接驱动并配置连接参数。

加载 SequoiaDB 连接驱动
1)登录到 PostgreSQL 实例 Shell;

/opt/sequoiasql/postgresql/bin/psql -p 5432 company
copy
2)加载 SequoiaDB 连接驱动;

CREATE EXTENSION sdb_fdw;
copy
配置与 SequoiaDB 连接参数
在 PostgreSQL 实例中配置 SequoiaDB 连接参数:

CREATE SERVER sdb_server FOREIGN DATA WRAPPER sdb_fdw
OPTIONS
(
address '127.0.0.1',
service '11810',
user '',
password '',
preferedinstance 'A',
transaction 'on'
);

实例与数据引擎中集合关联

将 PostgreSQL 实例中的外部表并与 SequoiaDB 中的集合空间、集合关联。

1)创建 employee 表;

CREATE FOREIGN TABLE employee
(
empno INTEGER,
ename TEXT,
age INTEGER
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'employee', decimal 'on' );
copy
2)创建 manager 表;

CREATE FOREIGN TABLE manager
(
empno INTEGER,
department TEXT
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'manager', decimal 'on' );

基本数据操作

SequoiaDB 巨杉数据库的 PostgreSQL 实例支持完整的 CRUD 数据基本操作。

1)验证基本的数据写入操作;

INSERT INTO employee VALUES (1, 'Jacky', 36);
INSERT INTO employee VALUES (2, 'Alice', 18);
INSERT INTO manager VALUES (1, 'Sales Department');
copy
2)验证单表查询与排序;

SELECT * FROM employee ORDER BY empno ASC LIMIT 1;
copy
3)验证两表关联功能;

SELECT * FROM employee, manager WHERE employee.empno = manager.empno;
copy
4)验证数据更新能力;

UPDATE employee SET ename = 'Bob' WHERE empno = 1;
copy
5)查看数据结果;

SELECT * FROM employee;
copy
6)验证数据删除能力;

DELETE FROM employee WHERE empno = 2;
copy
7)查看数据结果并确认 empno 为 2 的记录被删除;

SELECT * FROM employee;

事务操作

SequoiaDB 巨杉数据库的 PostgreSQL 数据库实例支持完整的事务操作能力,本小节将验证其回滚与提交能力。

验证回滚能力
1)开始事务;

BEGIN;
copy
2)写入数据;

INSERT INTO manager VALUES (2, 'Product Department');
copy
3)回滚事务操作;

ROLLBACK;
copy
4)查询写入数据,确保刚才写入的数据被撤销;

SELECT * FROM manager WHERE empno = 2;
copy
验证提交能力
1)开始事务;

BEGIN;
copy
2)写入数据;

INSERT INTO manager VALUES (2, 'Product Department');
copy
3)提交事务;

COMMIT;
copy
4)查询写入数据,确保之前写入的数据被正确提交;

SELECT * FROM manager WHERE empno = 2;

事务管理

本小节将讲解如何查看并关闭 PostgreSQL 的事务功能,关闭后需要重新进入实例的 Shell 命令行。

1)查看 PostgreSQL 是否打开事务功能;

\des+ sdb_server;
copy
操作截图:

图片描述

操作截图中 transaction 的参数值为 on,说明 PostgreSQL 的事务功能已经打开。

2)关闭 PostgreSQL 事务功能;

ALTER SERVER sdb_server OPTIONS ( SET transaction 'off' );
copy
3)退出 PostgreSQL 实例 Shell ;

\q
copy
4)登录到 PostgreSQL 实例 Shell,使事务功能关闭设置生效;

/opt/sequoiasql/postgresql/bin/psql -p 5432 company
copy
5)开始事务;

BEGIN;
copy
6)写入数据;

INSERT INTO manager VALUES (3, 'Finance Department');
copy
7)回滚事务操作;

ROLLBACK;
copy
8)查询写入数据,验证事务功能是否已经关闭;

SELECT * FROM manager WHERE empno = 3;
copy
操作截图:

图片描述

如操作截图显示,是能够查询到刚刚写入的数据,说明 PostgreSQL 的事务功能已经关闭,数据库没有执行回滚操作。

创建视图

SequoiaDB 巨杉数据库支持标准的 PostgreSQL 视图功能。本小节将验证其对标准 PostgreSQL 视图能力的支持。

1)创建视图;

CREATE VIEW manager_view AS
SELECT
e.ename, m.department
FROM
employee AS e, manager AS m
WHERE
e.empno = m.empno;
copy
2)查询视图数据;

SELECT * FROM manager_view;

创建自定义函数

SequoiaDB 巨杉数据库支持标准的 PostgreSQL 自定义函数功能。本小节将验证其对标准 PostgreSQL 自定义函数能力的支持。

1)创建自定义函数;

CREATE OR REPLACE FUNCTION totalRecords () RETURNS INTEGER AS
DECLARE
total INTEGER;
BEGIN
SELECT COUNT(*) INTO total FROM employee;
RETURN total;
END; language plpgsql;

图片说明
2)调用函数;

SELECT totalRecords();
copy
3)退出 PostgreSQL Shell;

\q

总结

通过本课程,我们验证了 SequoiaDB 巨杉数据库所支持的 PostgreSQL 语法及事务的提交与回滚。可以看出:SequoiaSQL-PostgreSQL 实例兼容标准的 PostgreSQL 语法。

3. PG数据导入导出

课程介绍

本课程主要讲解 PostgreSQL 数据库的导入导出操作,其中包含使用 PostgreSQL 的 COPY FORM 命令导出和 SequoiaDB 巨杉数据库的 sdbimprt 导入工具导入 CSV 格式的数据。

请点击右侧选择使用的实验环境
部署架构
本课程中 SequoiaDB 巨杉数据库的集群拓扑结构为三分区单副本,其中包括:1 个 SequoiaSQL-PostgreSQL 数据库实例节点、1 个引擎协调节点,1 个编目节点与 3 个数据节点。

图片描述

详细了解 SequoiaDB 巨杉数据库系统架构:

SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-PostgreSQL 实例均为 3.4 版本。

切换用户及查看数据库版本

切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-PostgreSQL 实例的操作系统用户为 sdbadmin。

su - sdbadmin
copy
Note:

用户 sdbadmin 的密码为 sdbadmin

查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:

sequoiadb --version

查看节点启动列表

查看 SequoiaDB 巨杉数据库引擎节点列表:

sdblist
copy
操作截图:

图片描述

Note:

如果显示的节点数量与预期不符,请稍等初始化完成并重试该步骤。

C: 编目节点,S:协调节点,D:数据节点

检查 PostgreSQL 实例进程
1)查看 PostgreSQL 数据库实例;

/opt/sequoiasql/postgresql/bin/sdb_sql_ctl listinst
copy
操作截图: 图片描述

2)查看数据库实例进程;

ps -elf | grep postgre

在 SequoiaDB 中建立集合空间和集合

进入 SequoiaDB Shell,在 SequoiaDB 巨杉数据库引擎中创建 company 集合空间和 employee 集合。

1)使用 Linux 命令进入 SequoiaDB Shell 命令行;

sdb
copy
2)使用 JavaScript 语法,连接协调节点,获取数据库连接;

var db = new Sdb("localhost", 11810);
copy
3)创建 company_domain 数据域;

db.createDomain("company_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } );
copy
4)创建 company 集合空间;

db.createCS("company", { Domain: "company_domain" } );
copy
5)创建 employee 集合;

db.company.createCL("employee", { "ShardingKey": { "_id": 1 }, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
copy
6)写入测试数据;

for (var i = 0; i < 1000; i++)
{
db.company.employee.insert( { "empno": i, "ename": "TEST", "age": 20 } )
};
copy
7)查询记录数;

db.company.employee.count();
copy
8)退出 SequoiaDB Shell;

quit;

创建数据库

在 SequoiaSQL-PostgreSQL 实例中创建 company 数据库,为接下来验证 PostgreSQL 语法特性做准备。

1)在 PostgreSQL 实例创建数据库 company;

/opt/sequoiasql/postgresql/bin/sdb_sql_ctl createdb company myinst
copy
2)查看数据库;

/opt/sequoiasql/postgresql/bin/psql -l

配置 PostgreSQL 实例

在 PostgreSQL 实例中加载 SequoiaDB 的连接驱动并配置连接参数。

加载 SequoiaDB 连接驱动
1)登录到 PostgreSQL 实例 Shell;

/opt/sequoiasql/postgresql/bin/psql -p 5432 company
copy
2)加载 SequoiaDB 连接驱动;

CREATE EXTENSION sdb_fdw;
copy
配置与 SequoiaDB 连接参数
在 PostgreSQL 实例中配置 SequoiaDB 连接参数:

CREATE SERVER sdb_server FOREIGN DATA WRAPPER sdb_fdw
OPTIONS
(
address '127.0.0.1',
service '11810',
user '',
password '',
preferedinstance 'A',
transaction 'on'
);

实例与数据引擎中集合关联

将 PostgreSQL 实例中的外部表与 SequoiaDB 中的集合空间、集合关联。

1)创建 employee 表;

CREATE FOREIGN TABLE employee
(
empno INT,
ename VARCHAR(128),
age INT
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'employee', decimal 'on' );
copy
2)查询数据,验证是否能够访问数据引擎;

SELECT * FROM employee LIMIT 1;

数据导出

通过 COPY (SELECT...) 命令将外部表 employee 的数据导出为 .csv 文件;

1)导出数据到 .csv 文件;

COPY (SELECT * FROM employee) TO '/opt/sequoiasql/postgresql/employee.csv' with delimiter ',' csv;
copy
2)查看 csv 文件内容;

! more /opt/sequoiasql/postgresql/employee.csv
copy
Note:

!前包含反斜线“\”,退出查看按 ctrl + c

操作截图:

图片描述

3)退出 PostgreSQL Shell;

\q

数据导入

PostgreSQL 的 COPY FORM 命令不支持直接向外部表中导入数据,一旦数据需要恢复,可以用 SequoiaDB 的导入工具 sdbimprt 完成向集合导入数据。

清空 employee 集合内数据
1)使用 Linux 命令进入 SequoiaDB Shell 命令行;

sdb
copy
2)使用 JavaScript 语法,连接协调节点,获取数据库连接;

var db = new Sdb("localhost", 11810);
copy
3)统计数据量;

db.company.employee.count();
copy
4)清空集合内数据;

db.company.employee.truncate();
copy
5)验证是否被清空,查询结果为 0;

db.company.employee.count();
copy
6)退出 SequoiaDB Shell;

quit;
copy
导入数据
1)通过 sdbimprt 工具从备份文件中恢复数据到 employee 数据集合中。

sdbimprt --hosts=localhost:11810 --type=csv --file=/opt/sequoiasql/postgresql/employee.csv --fields="empno int, ename string, age int" -c company -l employee
copy
操作截图:

图片描述

2)登录到 PostgreSQL 实例 Shell;

/opt/sequoiasql/postgresql/bin/psql -p 5432 company
copy
3)PostgreSQL shell 中验证数据量;

SELECT COUNT(*) FROM employee;
copy
4)退出 PostgreSQL Shell;

\q
copy

总结

本课程学习了如何在 PostgreSQL 实例导出数据到文件中,并使用 SequoiaDB 巨杉数据库的导入工具导入到数据库中。

4. PG执行计划

课程介绍

执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等。本课程主要讲解如何查看分析 SequoiaDB 访问计划,并在 PostgreSQL 中通过 EXPLAIN ANALYZE 展现。

请点击右侧选择使用的实验环境
部署架构
本课程中 SequoiaDB 巨杉数据库的集群拓扑结构为三分区单副本,其中包括:1 个 SequoiaSQL-PostgreSQL 数据库实例节点、1 个引擎协调节点,1 个编目节点与 3 个数据节点。

图片描述

详细了解 SequoiaDB 巨杉数据库系统架构:

SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-PostgreSQL 实例均为 3.4 版本。

切换用户及查看数据库版本

切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-PostgreSQL 实例的操作系统用户为 sdbadmin。

su - sdbadmin
copy
Note:

用户 sdbadmin 的密码为 sdbadmin

查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:

sequoiadb --version
copy
操作截图:

图片描述

查看节点启动列表

查看 SequoiaDB 巨杉数据库引擎节点列表:

sdblist
copy
操作截图:

图片描述

Note:

如果显示的节点数量与预期不符,请稍等初始化完成并重试该步骤。

C: 编目节点,S:协调节点,D:数据节点

检查 PostgreSQL 实例进程
1)查看 PostgreSQL 数据库实例;

/opt/sequoiasql/postgresql/bin/sdb_sql_ctl listinst
copy
操作截图: 图片描述

2)查看数据库实例进程;

ps -elf | grep postgre
copy
操作截图: 图片描述

在 SequoiaDB 中建立集合空间和集合

进入 SequoiaDB Shell,在 SequoiaDB 巨杉数据库引擎中创建 company 集合空间、 employee 集合和 manager 集合。

1)使用 Linux 命令进入 SequoiaDB Shell 命令行;

sdb
copy
2)使用 JavaScript 语法,连接协调节点,获取数据库连接;

var db = new Sdb("localhost", 11810);
copy
3)创建 company_domain 数据域;

db.createDomain("company_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } );
copy
4)创建 company 集合空间;

db.createCS("company", { Domain: "company_domain" } );
copy
5)创建 employee 集合;

db.company.createCL("employee", { "ShardingKey": { "empno": 1 }, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
copy
6)创建 manager 集合;

db.company.createCL("manager", { "ShardingKey": { "empno": 1 }, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
copy
7)向 employee 集合写入测试数据;

for (var i = 0; i < 1000; i++)
{
db.company.employee.insert( { "empno": i, "ename": "TEST", "age": 20 } );
}
copy
8)向 manager 集合写入测试数据;

for (var i = 0; i < 1000; i++)
{
db.company.manager.insert( { "empno": i, "department": "Sales Department" } );
}
copy

数据库引擎中查看执行计划

通过查看执行计划,可以判断查询语句在执行的时候有没有走索引。

1)查询记录数;

db.company.employee.count();
copy
2)执行条件查询,查询 empno = 1 的雇员信息;

db.company.employee.find( { "empno": 1 } );
copy
操作截图:
图片说明
图片描述

3)精准查询时,显示访问计划;

db.company.employee.find( { "empno": 1 } ).explain( { "Run": true } );
copy
操作截图:
图片说明
图片描述

注:其中 "ScanType": "tbscan" ,表示全表扫描。

4)在 employee 表的 empno 字段上创建唯一索引;

db.company.employee.createIndex("empno_Idx", { "empno": 1 }, true );
copy
5)再次执行上述条件查询,并显示访问计划;

db.company.employee.find( { "empno": 1 } ).explain( { "Run": true } );
copy
操作截图:
图片说明
图片描述

注:其中 "ScanType": "ixscan", "IndexName": "empno_Idx", 表示使用索引 empno_Idx 进行扫描。

6)退出 SequoiaDB Shell;

quit;
copy

创建数据库

在 SequoiaSQL-PostgreSQL 实例中创建 company 数据库实例,为接下来验证 PostgreSQL 语法特性做准备。

1)在 PostgreSQL 实例创建数据库 company;

/opt/sequoiasql/postgresql/bin/sdb_sql_ctl createdb company myinst
copy
2)查看数据库;

/opt/sequoiasql/postgresql/bin/psql -l

配置 PostgreSQL 实例

在 PostgreSQL 实例中加载 SequoiaDB 的连接驱动并配置连接参数。

加载 SequoiaDB 连接驱动
1)登录到 PostgreSQL 实例 Shell;

/opt/sequoiasql/postgresql/bin/psql -p 5432 company
copy
2)加载 SequoiaDB 连接驱动;

CREATE EXTENSION sdb_fdw;
copy
配置与 SequoiaDB 连接参数
在 PostgreSQL 实例中配置 SequoiaDB 连接参数:

CREATE SERVER sdb_server FOREIGN DATA WRAPPER sdb_fdw
OPTIONS
(
address '127.0.0.1',
service '11810',
user '',
password '',
preferedinstance 'A',
transaction 'on'
);
copy

实例与数据引擎中集合关联

将 PostgreSQL 实例中的外部表与 SequoiaDB 中的集合空间、集合关联。

1)创建 employee 表;

CREATE FOREIGN TABLE employee
(
empno INT,
ename VARCHAR(128),
age INT
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'employee', decimal 'on' );
copy
2)创建 employee2 表(把 pushdownsort 和 pushdownlimit 参数设置为关闭);

CREATE FOREIGN TABLE employee2
(
empno INT,
ename VARCHAR(128),
age INT
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'employee', decimal 'on', pushdownsort 'off', pushdownlimit 'off' );
copy
3)创建 manager 表;

CREATE FOREIGN TABLE manager
(
empno INTEGER,
department TEXT
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'manager', decimal 'on' );
copy
4)更新表的统计信息;

ANALYZE employee;
ANALYZE employee2;
ANALYZE manager;
copy
Note:

集合空间与集合必须已经存在于 SequoiaDB,否则查询出错。
如果需要对接 SequoiaDB 的 decimal 字段,则需要在 options 中指定 decimal 'on' 。
pushdownsort 设置是否下压排序条件到 SequoiaDB,默认为 on,关闭为 off。
pushdownlimit 设置是否下压 limit 和 offset 条件到 SequoiaDB,默认为 on,关闭为 off。
开启 pushdownlimit 时,必须同时开启 pushdownsort,否则可能会造成结果非预期的问题。
默认情况下,表的字段映射到 SequoiaDB 中为小写字符,如果强制指定字段为大写字符,创建方式参考“注意事项1”。
映射 SequoiaDB 的数组类型,创建方式参考“注意事项2”。

PostgreSQL执行计划查看

1)在 PostgreSQL 中执行条件查询语句,并查看执行计划;

EXPLAIN ANALYZE SELECT * FROM employee a INNER JOIN manager b ON a.empno = b.empno WHERE a.empno = 1;
copy
操作截图:

图片描述

从执行计划可以看出:

两个表的连接方式为 Nested Loop Join;
“Foreign Namespace”, 表示查询涉及到的外部表分别映射到 SequoiaDB 巨杉数据库的 company.employee 和 company.manager 集合中;
“Filter”,表示把 SQL 语句的查询条件转为 JavaScript 语法的查询条件。而最终,PostgreSQL 会把 JavaScript 语法的查询条件下压到 SequoiaDB 巨杉数据库对应的集合中执行;
2)在 PostgreSQL 中执行分页查询语句,并查看执行计划;

EXPLAIN ANALYZE SELECT * FROM employee ORDER BY empno ASC LIMIT 5 OFFSET 0;
EXPLAIN ANALYZE SELECT * FROM employee2 ORDER BY empno ASC LIMIT 5 OFFSET 0;
copy
操作截图:

图片描述

对比以上两个外部表的执行计划,可以看到:

employee 外部表的执行计划,PostgreSQL 把 limit、offset 和排序条件下压到 SequoiaDB 巨杉数据库中执行(分页和排序是在 SequoiaDB 巨杉数据库中完成),因为创建 employee 外部表时,没有指定 pushdownsort 和 pushdownlimit 参数,默认为开启。

employee2 外部表的执行计划,PostgreSQL 没有把 limit、offset 和排序条件下压到 SequoiaDB 巨杉数据库中执行(由 PostgreSQL 完成分页和排序),因为创建 employee2 外部表时,设置了 pushdownsort 和 pushdownlimit 参数为关闭。

3)退出 PostgreSQL Shell;

\q
copy

总结

通过本课程,我们熟悉了在 SequoiaDB 巨杉数据库引擎中创建集合空间和集合,并学会了通过 PostgreSQL Shell 查看 SQL 的执行计划。

5. PG元数据同步

课程介绍

元数据同步指在两个或多个 PostgreSQL 实例之间,完成元数据(如:建外部表等 DDL 操作)的同步。元数据同步工具主要用于定时解析主 SSQL 日志中新增的 DDL 操作语句并下发到各备 SSQL 执行,同时能过滤日志中执行失败的 DDL 操作语句。本次课程以两个 PostgreSQL 实例为例(一主一备),在主 PostgreSQL 实例中创建数据库和外部表,并通过元数据同步工具,实现将新创建的数据库和外部表同步到备 PostgreSQL 实例中,完成元数据同步。

请点击右侧选择使用的实验环境
环境架构:
本课程中 SequoiaDB 巨杉数据库的集群拓扑结构为三分区单副本,其中包括:1 个 SequoiaSQL-PostgreSQL 数据库实例节点、1 个引擎协调节点,1 个编目节点与 3 个数据节点。

图片描述

详细了解 SequoiaDB 巨杉数据库系统架构:

SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-PostgreSQL 实例均为 3.4 版本。

切换用户及查看数据库版本

切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-PostgreSQL 实例的操作系统用户为 sdbadmin。

su - sdbadmin
copy
Note:

用户 sdbadmin 的密码为 sdbadmin

查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:

sequoiadb --version

查看节点启动列表

查看 SequoiaDB 巨杉数据库引擎节点列表:

sdblist
copy
操作截图:

图片描述

Note:

如果显示的节点数量与预期不符,请稍等初始化完成并重试该步骤。

C: 编目节点,S:协调节点,D:数据节点

创建 PostgreSQL 实例 myinst 和 myinst1

1)切换到 SequoiaSQL-PostgreSQL 安装目录;

cd /opt/sequoiasql/postgresql
copy
2)添加实例;

添加实例 myinst(作为主 PostgreSQL 实例);

bin/sdb_sql_ctl addinst myinst -D database/5432/ -p 5432
copy
添加实例 myinst1(作为备 PostgreSQL 实例);

bin/sdb_sql_ctl addinst myinst1 -D database/5433/ -p 5433
copy
Note:

指定实例名为 myinst,该实例名映射相应的数据目录和日志路径,用户可以根据自己需要指定不同的实例名,实例默认端口号为 5432。

3)查看实例,可以看到实例名为 myinst 的数据和日志目录信息;

bin/sdb_sql_ctl listinst
copy
4)启动实例;

启动实例 myinst;

bin/sdb_sql_ctl start myinst
copy
启动实例 myinst1;

bin/sdb_sql_ctl start myinst1
copy
5)查看实例状态;

bin/sdb_sql_ctl status
copy

配置 PostgreSQL 实例免密登录

若 PostgreSQL 实例开启了用户鉴权,需要创建元数据同步用户以及配置免密登录。

1)进入 sdbadmin 的 home 目录;

cd /home/sdbadmin
copy
2)同步工具已提前放置在 sdbadmin 的 home 目录,解压同步工具;

tar xvf SsqlDisseminateDDL.tar
copy
3)进入解压目录;

cd SsqlDisseminateDDL
copy
4)拷贝免密文件到 home 目录;

cp .pgpass /home/sdbadmin/
copy
5)将文件权限设置为0600;

chmod 0600 /home/sdbadmin/.pgpass
copy

PostgreSQL 实例日志设置

1)进入 myinst 实例的数据目录,修改部分配置;

cd /opt/sequoiasql/postgresql/database/5432
copy
2)为了配合元数据同步,需要对应修改 postgresql.conf 配置文件的参数;

echo "log_destination = 'csvlog'" >> postgresql.conf
echo "logging_collector = on" >> postgresql.conf
echo "log_directory = '/opt/sequoiasql/postgresql/database/5432/pg_log'" >> postgresql.conf
echo "log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'" >> postgresql.conf
echo "log_rotation_age = 28d" >> postgresql.conf
echo "log_rotation_size = 20MB" >> postgresql.conf
echo "log_statement = 'ddl'" >> postgresql.conf
copy
Note:

log_destination:设置输出的日志类型;
logging_collector:是否开启日志功能,默认为关闭(off),开启为 on;
log_directory:日志输出目录;
log_filename:日志文件名称命名规则;
log_rotation_age:单个日志文件的保存周期,默认保存 1 天(1d);
log_rotation_size:单个日志文件的大小, 若超过指定大小,那么将新生成一个日志文件;
log_statement:控制记录哪些 SQL 语句;

工具配置

将元数据同步程序及 config 配置文件拷贝到本地,并查看 config 文件内容。

1)拷贝元数据同步工具到数据目录;

cp /home/sdbadmin/SsqlDisseminateDDL/SsqlDisseminateDDL ./
copy
2)拷贝元数据同步工具配置到数据目录;

cp /home/sdbadmin/SsqlDisseminateDDL/config ./
copy
3)查看 config 配置内容;

more config
copy
注:配置文件中参数包括:目标 PostgreSQL 实例 myinst1 运行的服务器名,端口号;源 PostgreSQL 实例 myinst 的安装目录,数据目录,解析日志目录;PostgreSQL 同步用户;以及元数据同步程序的执行时间间隔、执行日志目录,执行日志文件前缀。

重启 myinst 实例

创建配置文件指定的解析日志目录和执行日志目录,重启源 PostgreSQL 实例 myinst,使配置生效;

1)创建日志目录;

mkdir /opt/sequoiasql/postgresql/database/5432/pg_log
mkdir /opt/sequoiasql/postgresql/database/5432/log
copy
2)重启 myinst 实例;

/opt/sequoiasql/postgresql/bin/sdb_sql_ctl restart myinst

启动元数据同步工具

元数据同步工具在启动后会一直常驻后台运行,主要用于定时解析主 PostgreSQL 实例日志中新增的 DDL 操作语句并下发到各备 PostgreSQL 实例中执行。

nohup python /opt/sequoiasql/postgresql/database/5432/SsqlDisseminateDDL &

在 SequoiaDB 中建立集合空间和集合

进入 SequoiaDB Shell,在 SequoiaDB 巨杉数据库引擎中创建 company 集合空间和 employee 集合。

1)使用 Linux 命令进入 SequoiaDB Shell 命令行;

sdb
copy
2)使用 JavaScript 语法,连接协调节点,获取数据库连接;

var db = new Sdb("localhost", 11810);
copy
3)创建 company_domain 数据域;

db.createDomain("company_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } );
copy
4)创建 company 集合空间;

db.createCS("company", { Domain: "company_domain" } );
copy
5)创建 employee 集合;

db.company.createCL("employee", { "ShardingKey": { "_id": 1 }, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );
copy
6)写入数据;

db.company.employee.insert( { "empno": 1, "ename": "Jack", "age": 35 } );
copy
7)关闭 db 数据库连接;

db.close();
copy
8)退出 SequoiaDB Shell;

quit;
copy

验证元数据同步

在主 PostgreSQL 实例中创建 company 数据库并配置连接信息创建 employee 外部表,然后登录备 PostgreSQL 实例查看是否已经创建了数据库和外部表。

在 myinst 实例中创建数据库
1)在 PostgreSQL 的 myinst 实例创建数据库 company;

/opt/sequoiasql/postgresql/bin/sdb_sql_ctl createdb company myinst
copy
2)查看数据库;

/opt/sequoiasql/postgresql/bin/psql -l
copy
操作截图:

图片描述

加载 SequoiaDB 连接驱动
1)登录 PostgreSQL Shell 连接 myinst 实例的 company 数据库;

/opt/sequoiasql/postgresql/bin/psql -p 5432 company
copy
2)加载 SequoiaDB 连接驱动;

CREATE EXTENSION sdb_fdw;
copy
3)在 PostgreSQL 实例中配置 SequoiaDB 连接参数;

CREATE SERVER sdb_server FOREIGN DATA WRAPPER sdb_fdw
OPTIONS
(
address '127.0.0.1',
service '11810',
user '',
password '',
preferedinstance 'A',
transaction 'on'
);
copy
实例与数据引擎中集合关联
将 PostgreSQL 实例中的外部表与 SequoiaDB 中的集合空间、集合关联。

1)创建 employee 表;

CREATE FOREIGN TABLE employee
(
empno INT,
ename VARCHAR(128),
age INT
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'employee', decimal 'on' );
copy
2)查询 myinst 实例 employee 表中的数据;

SELECT * FROM employee;
copy
3)退出 myinst 实例;

\q
copy
查询 myinst1 实例是否已经建表成功
1)登录 PostgreSQL Shell 连接 myinst1 实例的 company 数据库;

/opt/sequoiasql/postgresql/bin/psql -p 5433 company
copy
2)查询 myinst1 实例 employee 表中的数据;

SELECT * FROM employee;
copy
3)退出 myinst1 实例;

\q
copy

总结

本课程讲述了 SequoiaSQL-PostgreSQL 的元数据同步工具的部署和使用,并进行了创建数据库和外部表的测试。

6. 考试

考试介绍
此考试是在安装部署 SequoiaDB 巨杉数据库和安装 PostgreSQL 实例组件的环境中创建 PostgreSQL 实例并进行建立外部表、数据写入、事务管理,数据的导出备份等操作。

PostgreSQL 已成为许多企业开发人员和初创公司的首选开源关系数据库,为领先的商用和移动应用程序提供助力。SequoiaDB 巨杉数据库支持创建 PostgreSQL 实例,兼容 PostgreSQL 语法,用户可以使用 SQL 语句访问 SequoiaDB 数据库,完成对数据的增、删、查、改及其他操作。

Note:

考试内容需在系统用户 sdbadmin 下完成,用户密码为 sdbadmin
SequoiaDB 巨杉数据库安装目录(/opt/sequoiadb)
SequoiSQL-PostgreSQL 安装目录(/opt/sequoiasql/postgresql)
知识点
1)在 SequoiaDB 巨杉数据库引擎中创建数据域、集合空间和集合;

2)PostgreSQL 数据库实例的创建;

3)连接 PostgreSQL 实例与 SequoiaDB 巨杉数据库存储引擎;

4)PostgreSQL 实例的数据与事务操作;

5)基于 PostgreSQL 实例外部表数据的导出备份;

考试内容
1)切换到 sdbadmin 用户;

2)创建 company_domain 数据域,包含 group1、group2、group3 三个复制组;

3)创建 company 集合空间,所属 company_domain 数据域;

4)创建 employee 集合;

5)创建实例 pginst,端口使用 5432;

6)配置连接 PostgreSQL 实例与 SequoiaDB 巨杉数据库存储引擎(transaction 设置为 on ,默认开启事务);

7)在 PostgreSQL 创建 company 数据库和 employee 外部表 ( id INT, name TEXT, age INT ) 映射到 SequoiaDB 数据库的 company.employee 集合;

8)向 employee 表插入数据 ( id: 10001, name: 'Jerry', age: 18 );

9)开始事务,向 employee 表插入数据 ( id: 10002, name: 'Tom', age: 20 ),回滚事务,然后查询 employee 表;

10)将 employee 表数据导出到 “/opt/sequoiasql/postgresql/employee.csv”,使用 “! more /opt/sequoiasql/postgresql/employee.csv” 命令查看数据内容;

11)在 company 集合空间创建集合 employee_bak, 并将上一步导出的数据文件导入到 employee_bak 中;

考试要求
1)正确创建 SequoiaDB 的数据域、集合空间和集合;

2)正确创建 PostgreSQL 映射表;

3)学会用 PostgreSQL 使用事务;

4)准确导出 PostgreSQL 表数据,并查看数据内容;

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务