【赵渝强老师】国产金仓数据库的逻辑存储结构

金仓数据库的逻辑存储结构主要是指数据库中的各种数据库对象,包括:数据库集群、数据库、表、索引、视图等等。所有数据库对象都有各自的对象标识符oid(object identifiers),它是一个无符号的四字节整数,相关对象的oid都存放在相关的系统目录表中,比如数据库的oid和表的oid分别存放在sys_database,sys_class表中。下图展示了KingBaseES数据库的逻辑存储结构。

视频讲解如下
【赵渝强老师】金仓数据库的逻辑存储结构

下面对金仓数据库中的各种数据库对象进行说明。

一、 数据库集群-Database Cluster

它也叫数据库集簇,是指由单个KingBaseES数据库服务器实例管理的所有数据库集合。组成数据库集群的这些数据库使用相同的全局配置文件和监听端口、共用数据库的后台进程和内存结构。一个数据库集群可以包括:多个数据库、多个用户以及数据库中的所有对象。

在文件系统术语中,一个数据库集群是一个单一目录,该目录称之为数据目录或数据区域,所有数据都将被存储在该目录中。它没有默认的位置,其文件系统位置可以由-D选项或者环境变量KINGBASE_DATA指定,例如:

powershell 复制代码
[kingbase@kingbase Server]$ pwd
/home/kingbase/kdb/Server
[kingbase@kingbase Server]$ bin/sys_ctl -D /home/kingbase/kdb/kes_oracle_instance/ start

二、 数据库-Database

在金仓数据库中,数据库本身也是数据库对象。不同的数据库在逻辑上彼此分离,除数据库之外的其他数据库对象(例如:表、索引等等)都属于它们各自的数据库。通过下面的语句可以查看金仓数据库服务器中已存在的数据库。

(1)登录KingBaseES。

powershell 复制代码
ksql -U system -d kingbase

(2)查看KingBaseES中已有的数据库。

powershell 复制代码
kingbase=# \l 

# 输出的信息如下:
                    数据库列表
   名称    | 拥有者 | 字元编码 |  校对规则   | ......
-----------+--------+----------+-------------+-......
 kingbase  | system | UTF8     | zh_CN.UTF-8 | ......
 scott     | system | UTF8     | zh_CN.UTF-8 | ......
 security  | system | UTF8     | zh_CN.UTF-8 | ......
 template0 | system | UTF8     | zh_CN.UTF-8 | ......
 template1 | system | UTF8     | zh_CN.UTF-8 | ......
 test      | system | UTF8     | zh_CN.UTF-8 | ......
(6 行记录)

三、 表空间-Tablespace

数据库在逻辑上分成多个存储单元,该单元称作表空间。表空间用作把逻辑上相关的数据结构放在一起。数据库逻辑上是由一个或多个表空间组成。在数据库初始化的时候,会自动创建sys_default、sys_global和sysaudit三个表空间。

其中:

  • sys_global:该表空间用于存放系统表,对应存储目录是$KINGBASE_DATA/global/。
  • sys_default:创建表时的默认表空间,该表空间的物理文件存储在数据目录中的base目录中,例如:$KINGBASE_DATA/base/。
  • sysaudit:该表空间用于存放安全审计相关的数据。对应存储目录$KINGBASE_DATA/sys_aud

下面通过具体的操作来演示如何查看KingBaseES中已有的表空间和如何创建自己的表空间。

(1)登录KingBaseES。

powershell 复制代码
ksql -U system -d kingbase

(2)查看KingBaseES中已有的表空间。

powershell 复制代码
kingbase=# \db

# 输出的信息如下:
          表空间列表
    名称     | 拥有者 | 所在地 
-------------+--------+--------
 sys_default | system | 
 sys_global  | system | 
 sysaudit    | system | 
(3 行记录)

(3)创建自己的表空间。

sql 复制代码
kingbase=# create tablespace mydemotbs location '/home/kingbase/mydemotbs';

(4)在mydemotbs 表空间上创建表。

sql 复制代码
kingbase=# create table testtable1(tid int primary key,tname text)
           tablespace mydemotbs;

(5)再次查看KingBaseES中已有的表空间。

powershell 复制代码
kingbase=# \db

# 输出的信息如下:
                   表空间列表
    名称     | 拥有者 |          所在地          
-------------+--------+--------------------------
 mydemotbs   | system | /home/kingbase/mydemotbs
 sys_default | system | 
 sys_global  | system | 
 sysaudit    | system | 
(4 行记录)

(6)将该表空间设置为默认的表空间。

powershell 复制代码
kingbase=# set default_tablespace = mydemotbs;

(7)查询表空间信息

powershell 复制代码
kingbase=# select * from sys_tablespace;

# 输出的信息如下:
  oid  |   spcname   | spcowner | spcacl | spcoptions 
-------+-------------+----------+--------+------------
  1663 | sys_default |       10 |        | 
  1664 | sys_global  |       10 |        | 
  1986 | sysaudit    |       10 |        | 
 16427 | mydemotbs   |       10 |        | 
(4 行记录)

(8)使用\db+命令查看表空间的详细信息,输出的信息如下:

powershell 复制代码
kingbase=# \db+

# 输出的信息如下:
                                      表空间列表
    名称      | 拥有者  |          所在地           |    大小    | 描述 
-------------+--------+--------------------------+------------+------
 mydemotbs   | system | /home/kingbase/mydemotbs | 8237 bytes | 
 sys_default | system |                          | 102 MB     | 
 sys_global  | system |                          | 101 MB     | 
 sysaudit    | system |                          | 32 kB      | 
(4 行记录)

# 命令中的加号表示显示详细信息。

四、 模式-Schema

当创建一个数据库时,会为其自动创建一个名为"public"的默认Schema。Schema是数据库中的命名空间,在数据库中创建的所有对象都是在Schema中创建。一个用户可以从同一个客户端连接中访问不同的Schema。而不同的Schema中可以有多个同名的表、索引、视图、序列、函数等等各种不同的数据库对象。可以通过下面的方式来查看当前数据库的Schema。

powershell 复制代码
kingbase=# \dn

# 输出的信息如下:  
       架构模式列表
       名称       | 拥有者 
------------------+--------
 anon             | system
 dbms_job         | system
 dbms_scheduler   | system
 dbms_sql         | system
 kdb_schedule     | system
 perf             | system
 public           | system
 src_restrict     | system
 sys_hm           | system
 sysaudit         | system
 sysmac           | system
 wmsys            | system
 xlog_record_read | system
(13 行记录)

五、 段-Segment

一个段是分配给一个逻辑结构,如:一个表、一个索引或其他对象的一组区,它是数据库对象使用空间的集合。段可以有表段、索引段、回滚段、临时段和高速缓存段等,而最常用的段就是表段和索引段。

六、 区-Extent

区是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成。一个段是由一个或多个磁盘盘区组成。当一段中间所有空间已完全使用,KingBaseES会自动为该段分配一个新的磁盘盘区范围。

七、 块-Block(Page)

数据块是KingBaseES管理数据文件中存储空间的单位,为数据库使用的I/O的最小单位。数据库是最小的逻辑存储单位,其默认值8K。通过参数block_size可以查看当前数据库的数据块大小。

powershell 复制代码
kingbase=# show block_size;

# 输出的信息如下:
 block_size 
------------
 8192
(1 行记录)

在KingBaseES中,数据的读写是以数据块为最小单位。在编译KingBaseES时通过指定BLCKSZ参数大小将决定数据块的大小。每个表文件由都由BLCKSZ字节大小的数据块组成。在分析型数据库中,适当增加BLCKSZ大小可以小幅度提升数据库的性能。

八、 数据库对象-Database Object

KingBaseES提供了各种数据库对象,如表、视图、索引、序列、函数等等。在KingBaseES中的所有数据库对象都由各自的对象标识符(oid)进行内部的管理。数据库的oid存储在sys_database系统表中,可以通过下面的语句进行查询。

powershell 复制代码
kingbase=# select oid,datname from sys_database;

# 输出的信息如下:  
  oid  |  datname  
-------+-----------
 14791 | test
 14792 | kingbase
     1 | template1
 14790 | template0
 14793 | security
 16384 | scott
(6 行记录)

而数据库中的表、索引、序列等数据库对象的oid则存在了sys_class系统表中,例如可以通过下面的语句查询前面创建的testtable1表的OID。

powershell 复制代码
kingbase=# select oid,relname,relkind,relfilenode from sys_class
           where relname ='testtable1';
# 输出的信息如下:  
  oid  |  relname   | relkind | relfilenode 
-------+------------+---------+-------------
 16428 | testtable1 | r       |       16428
(1 行记录)
相关推荐
一 乐1 天前
健康管理|基于springboot + vue健康管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·学习
学编程就要猛1 天前
MySQL:CRUD
数据库·sql·mysql
IT技术分享社区1 天前
MySQL实战:自动计算字段如何让查询效率翻倍?
数据库·mysql
Live&&learn1 天前
Redis语法入门
数据库·redis
未羽出衫1 天前
DB-GPT本地模型+tuGragh安装使用
数据库·gpt
忧郁蓝调261 天前
Redis不停机数据迁移:基于 redis-shake 的跨实例 / 跨集群同步方案
运维·数据库·redis·阿里云·缓存·云原生·paas
VekiSon1 天前
数据库——基础概念与 SQLite 实践
数据库·sqlite
点云SLAM1 天前
Boost中Graph模块中boost::edge_capacity和boost::edge_capacity_t
数据库·算法·edge·图论·最大团·最大流算法·boost库使用
五阿哥永琪1 天前
Redis的常用数据结构
数据结构·数据库·redis
猴子年华、1 天前
【每日一技】:SQL 常用函数实战速查表(函数 + 场景版)
java·数据库·sql·mysql