【国产数据库】GBase学习⑥ – GBase 8c 存储逻辑结构

  • Post author:
  • Post category:其他


名词解释:

Tablespace :即表空间,是一个目录,可以存在多个,里面存储的时它所包含的数据库的各种物理文件、每个表空间可以对应多个Databases。

Database :即数据库,用于管理各类数据对象,各数据库间相互隔离。数据库管理的对象可分布在多个Tablespace上。

Datafile Segment :即数据文件,通常每张表只对应一个数据文件。如果某张表的数据大于1GB,则会分为多个数据文件存储。

Table : 即表,每张表只能属于一个数据库,也只能对应到一个Tablespace。每张表对应的数据文件必须在同一个Tablespace中。

Block :即数据块,时数据库管理的基本单位,默认大小为8KB。



表空间

① 如果数据库所在的分区或者卷空间已满,又不能逻辑上扩展更多空间,可以在不同的分区上创建和使用表空间,知道系统重新配置空间。

② 表空间允许管理员根据数据库对象的使用模式安排数据位置,从而提高性能:

  • 频繁使用的索引可以放在性能稳定且运算速度较快的磁盘上,比如SSD固态设备。
  • 存储归档的数据,很少使用或者对性能要求不高的表可以存储在一个运算速度较慢的磁盘上。

③ 通过表空间,管理员可以设置其占用的磁盘空间上限,用以在和其他数据共用分区的时候,防止表空间占用相同分区上的其他空间。

④ GBase 8c 自带两个表空间:

  • 默认表空间:pg_default:用来存储非共享系统表、用户表、用户表index、临时表、临时表index、内部临时表的默认表空间。对应存储目录为实例数据目录下的base目录。
  • 共享表空间:pg_global:用来存放共享系统表的表空间。对应存储目录为实例数据目录下的global目录。

使用示例:

管理表空间:
创建表空间:CREATE TABLESPACE    
修改表空间   ALTER TABLESPACE    
删除表空间 DROP TABLESPACE 
CREATE TABLESPACE ds_location1 OWNER user1 RELATIVE LOCATION 'tablespace/tablespace1';
ALTER TABLESPACE ds_location1 RENAME TO ds_location2;
DROP TABLESPACE ds_location2;



数据库

① 数据库兼容模式

DBCOMPATIBILITY兼容模式: 可选值:A(默认值) 、B、C、PG。 分别兼容O 、MY、TD和POSTGRES。

  • A兼容性下,数据库将空字符串作为NULL处理,数据类型DATE会被替换为TIMESTAMP(0) WITHOUT TIME ZONE。
  • B兼容性下,在将字符串转换成整数类型时,如果输入不合法,B兼容性将输入转换为0,而其他兼容性则会报错。
  • B、PG兼容性下,CHAR 和 VARCHAR 以字符为计数单位,其他兼容性以字节为计数单位。例如,对于UTF-8字符集,CHAR(3)在B、PG兼容性下能存放3个中文字符,而在其他兼容性下只能存放1个中文字符。

使用示例:

create database mydb1;

create database mydb2
encoding='UTF-8'
DBCOMPATIBILITY='A'  --- 兼容模式
CONNECTION LIMIT=1000;  --- 并发连接限制

alter database mydb2 rename to mydb4;
drop database mydb1;



模式(Schema)

① GBase 8c 使用模式Schema 对数据库database 做逻辑分割。所有的数据库对象都建立在模式下面,用户可以根据自己拥有的权限,访问数据库中一个或多个schema对象。这样就使得多个用户可以使用同一个数据库而不相互干扰。

② 和数据库不同,模式不是严格分离的:只要有权限,一个用户可以访问他所连接的数据库中的任意模式中的对象。

③ 相同的对象名称可以被用于不同的模式中而不会发生冲突,例如容易个数据库下名为schema1和schema2的模式下都可以包含名为table1的表。

注:show search_path; 搜索路径 操作一个表,首先用第一个(与用户同名)。

④ 模式管理:模式是一组数据库对象的集合,主要用于控制对数据库对象的访问。

管理模式的语句主要包括:

创建模式:CREATE SCHEMA    
修改模式属性:ALTER SCHEMA    
删除模式:DROP SCHEMA
CREATE SCHEMA sch_1;
CREATE SCHEMA sch_2
CREATE TABLE films(title text,release date,awards text[])
CREATE VIEW winners AS SELECT title,release FROM films WHERE awards IS NOT NULL;
DROP SCHEMA sch_2 CASCADE;  ---级联删除schema
CREATE SCHEMA AUTHORIZATION gbase; --自动创建与用户同名schema
  • 模式注意事项:

    1.不建议创建以PG为前缀的schema名,该类的schema是为数据库系统预留的。

    2.在每次创建新用户时,系统会在当前登录的数据库中为新用户创建一个同名Schema。对于其他数据库,若需要同名Schema,则需要手动创建。

    3.每个数据库都有名为pg_catalog的schema,它包含系统表和所有内置数据类型、函数、操作符。搜索路径(search_path)始终以pg_temp和pg_catlog这两个schema作为搜索路径顺序中的前两位。

    4.模式的权限:默认情况下,用户无法访问模式中不属于他们的对象;若要访问,模式的所有者必须在模式上赋予他们”USAGE”权限;用户要想在其他用户的模式里创建对象,需要被赋予在该模式上的”CREATE”权限。



用户、角色及权限

  • 用户 User:使用数据库管理系统的个体
  • 角色 Role:一组用户的集合,按照数据库系统中承担的责任划分具有不同权限的角色
  • 系统权限:又称为用户属性,包括 SYSADMIN CREATEDB CREATEROLE AUDITADMIN LOGIN
  • 对象权限:数据库对象(表和视图、指定字段、数据库、函数、模式、表空间等)的相关权限(创建、删除、修改等)

① 初始用户:GBase 8c 安装过程中自动生成的账户称为初始用户。初始用户拥有系统的最高权限,能够执行所有的操作。该账户与进行GBase 8c 安装的操作系统用户同名。在第一次登录数据库后,要及时修改初始用户的密码。

示例:

用户、角色管理:创建角色/用户       CREATE ROLE/CREATE User
修改角色/用户属性   ALTER ROLE/ALTER User
删除角色/用户       DROP RELE/DROP SUER
create user test_1 with password 'P@ssw0rd'
valid begin '2021-12-01 09:00:00'
valid until '2021-12-01 19:00:00';
alter user test_1 with 
valid begin '2021-12-01 09:00:00'
valid until '2021-12-01 19:00:00';
drop user test_1;



数据表

① 管理数据表:数据表是建立在数据库中的,在不同的数据库中可以存放相同的表。可以通过使用模式在同一个数据库中创建相同名称的表。

② 数据表是数据库中的一种特殊数据结构,用于存储数据对象以及对象之间的关系。

示例:

创建表    CREATE TABLE      
修改表属性    ALTER TABLE      
删除表      DROP TABLE(依赖于这个表的索引等也会被删除)

CREATE TABLE IF NOT EXISTS tab_1(
W_WAREHOUSE_SK  INTEGER,
W_WAREHOUSE_ID  CHAR(16),
W_GMT_OFFSET    DECIMAL(5,2));

ALTER TABLE tab_1 RENAME TO tab_2;
ALTER TABLE tab_2 ADD W_NEW_COLUMN CHAR(2);

DROP TABLE tab_2;

③ 分布式模式下数据表分类

  • Replication表 即复制表,各个datanode节点中,写入表的数据完全相同。读数据时,只需要读取任意一个datanode节点上的数据。一般小表或者只读表(dimension table,维度表,即描述性或静态数据表)采用此种方式。
  • Distribute表(默认创建方式) 即分布式表,基于指定列的hash值将数据完全切分到不同的datanode节点中,即与Replication表相反,各个datanode节点中,表的数据完全不相同。适用于write-heavy table,如事实表。

示例:

create table rep(dol1 int,col2 int) DISTRIBUTE BY REPLICATION;
create table dist(dol1 int,col2 int) DISTRIBUTE BY HASH(dol1);
insert into rep select generate_series(1,100),generate_series(101,200);
insert into dist select generate_series(1,100),generate_series(101,200);
execute direct on(dn1)  'select ''dn1'' as node_name, count(*) as count from rep';
execute direct on(dn2) 'select ''dn2'' as node_name, count(*) as count from rep';
execute direct on(dn1)  'select ''dn1'' as node_name, count(*) as count from dist';
execute direct on(dn2) 'select ''dn2'' as node_name, count(*) as count from dist';



视图(View )

① 当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图View,以便解决这个问题。

② 视图与基本表不同,它不是物理上实际存在的。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。

③ 物化视图:是 “物化” Materialized 之后的视图,它将视图查询的结果实际存储在磁盘中,有效提升查询性能。物化视图以类表的形式保存结果,但无法像普通表那样进行数据更新,需要使用REFRESH从基表获取更新数据。

示例:

CREATE TABLE tab_1(id int,name varchar(10));
INSERT INTO tab_1 values(1,'1');
CREATE VIEW v1 AS SELECT * FROM tab_1;
select * from v1;
ALTER VIEW v1 RENAME TO v2;
DROP VIEW v2;

CREATE MATERIALIZED VIEW mv1 AS SELECT * FROM tab_1;
INSERT INTO tab_1 VALUES(2,'2');
SELECT * FROM mv1;
REFRESH MATERIALIZED VIEW mv1;
SELECT * FROM mv1;
DROP MATERIALIZED VIEW mv1;



序列(Sequence)

① 序列是用来产生唯一整数的数据库对象,序列的值是按照一定规则自增的整数,可以看作是存放等差数列的特殊表。因为自增所以不重复,因此说Sequence具有唯一标识的特性。这也是Sequence常被用作主键的原因。

② 创建序列的同时如果指定相应的模式名,则该序列就在给定的模式中创建,否则会在当前模式中创建。序列名必须和同一个模式中的其他序列、表、索引、视图、或外表的名称不同。

③ 通过序列使某字段成为唯一标识符的方法有两种:

  • 一种是声名字段的类型为序列整型,由数据库在后台自动创建一个对应的Sequence。
  • 一种是使用 CREATE SEQUENCE 自定义一个新的Sequence,然后将nextval(‘sequence_name’)函数读取的序列值,指定为某一字段的默认值,这样该字段就可以作为唯一标识符。

示例:

CREATE TABLE SEQ_T1(id serial, name text);
\d+ SEQ_T1
insert into SEQ_T1(name) values('a1'),('a2'),('a3'),('a4'),('a5'),('a6');
select * from SEQ_T1 order by id;

CREATE SEQUENCE seq1 INCREMENT 1  MINVALUE 1  MAXVALUE 100 START 1;
#间隔1  最小1 最大100 开始1 
CREATE TABLE SEQ_T2(id int not null default nextval('seq1'),name text);
insert into SEQ_T2(name) values('b1'),('b2'),('b3'),('b4'),('b5'),('b6');
select * from SEQ_T2 order by id;



同义词(SYNONYM )

① 是数据库对象的别名,用于记录与其他数据库对象名间的映射关系,用户可以使用同义词访问关联的数据库对象。

② 定义同义词的用户成为其拥有者。

③ 若指定模式名称,则同义词在指定模式中创建。否则,在当前模式创建。

④ 支持通过同义词访问的数据库对象包括:表,视图,函数,存储过程。

⑤ 使用同义词时,用户需要具有对关联对象的相应权限。

⑥ 支持使用同义词的DML语句包括:SELECT、INSERT、UPDATE、DELETE、EXPLAIN、ALL。

⑦ 同义词创建语法:

CREATE [OR REPLACE] SYNONYM synonym_name FOR object_name;   
#object_name可以是不存在的对象名称。

示例:

CREATE SCHEMA ot;
CREATE TABLE ot.t1(id int,name varchar2(10));
CREATE OR REPLACE SYNONYM t1 FOR ot.t1;
SELECT * FROM t1;



版权声明:本文为qq_29567379原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。