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 表数据,并查看数据内容;