当前位置: 首页 > news >正文

金仓KingbaseES逻辑架构,与Oracle/MySQL对比

KingbaseES的逻辑结构

       KingbaseES的逻辑结构采用层级式设计,从高到低依次为:实例/集簇 → 数据库(Database) → 模式(Schema) → 数据库对象(表/视图/函数等),其中多个数据库可以共享同一实例但它们之间相互隔离,模式作为命名空间管理对象,用户和角色全局统一管理权限。

数据库实例 (Instance/Cluster)
├── 全局用户/角色 (Global Users/Roles)
├── 实例配置 (Instance Config)
├── 共享内存 & 后台进程 (Shared Memory & Background Processes)
├── 事务日志 (WAL)

├── 数据库 (Database) 1 (e.g., `mydb`)
│   ├── 数据库配置 (DB Config)
│   ├── 模式 (Schema) 1 (e.g., `public`)
│   │   ├── 表 (Table) A
│   │   ├── 视图 (View) B
│   │   ├── 索引 (Index) on A
│   │   └── 函数 (Function) C
│   │
│   ├── 模式 (Schema) 2 (e.g., `sales`)
│   │   ├── 表 (Table) Orders
│   │   └── 表 (Table) Customers
│   │
│   └── **模式分组 (Schema Group)** `sales_group` (包含 `sales`, `inventory`)

├── 数据库 (Database) 2 (e.g., `testdb`)
│   └── ... (Schemas, Objects)

└── 系统数据库 (System Database) (e.g., `sysdatabase`)
└── 系统目录 (System Catalogs) (存储全局元数据) 

  1. 数据库实例 (Database Instance / Cluster)

    • 定义: 这是KingbaseES运行时的最高层逻辑结构。一个实例代表一个独立的KingbaseES服务器进程及其管理的所有内存结构和后台进程。

    • 内容: 一个实例管理着多个数据库(Databases)、全局的用户/角色信息、实例级的配置参数、共享内存区域、后台进程(如写进程、检查点进程、归档进程等)以及事务日志(WAL)。

    • 关键点: 连接到KingbaseES时,首先连接到一个具体的实例。不同数据库实例之间通常是物理隔离的。

  2. 数据库 (Database)

    • 定义: 数据库是存储在数据库实例中的、逻辑上独立的数据集合。它是用户或应用程序访问数据的主要入口点。

    • 内容: 一个数据库包含:

      • 多个模式(Schemas)

      • 该数据库特有的配置(如默认搜索路径、字符集、排序规则等)。

      • 属于该数据库的用户/角色权限信息(虽然用户/角色定义在实例级,但权限授予在数据库对象级)。

    • 关键点:

      • 不同数据库在物理存储上是分开的(有各自的系统目录、表空间映射)。

      • 客户端连接必须指定一个具体的数据库 (如使用\c mydb或连接字符串指定)。

      • 默认情况下,一个数据库中的对象(如表)不能直接访问另一个数据库中的对象(跨库查询需要特殊机制如dblinkpostgres_fdw扩展)。

      • 常见的系统数据库:template0template1 (用作创建新数据库的模板), sysdatabase (KingbaseES的系统数据库,存储全局元数据,通常不直接操作)。

  3. 模式 (Schema)

    • 定义: 模式是数据库内部的一个命名空间,用于组织和管理数据库对象(如表、视图、索引、函数、序列、类型等)。它提供了对象名称的第二层逻辑隔离。

    • 作用:

      • 避免命名冲突: 不同模式下的对象可以同名(如 sales.orders 和 hr.orders)。

      • 逻辑分组: 将属于同一应用、模块或用户的对象组织在一起(如 financeinventoryreporting)。

      • 权限管理: 权限可以授予到整个模式级别(如 GRANT USAGE ON SCHEMA myschema TO myrole;),方便批量授权。

    • 关键点:

      • 每个数据库都至少有一个模式,通常是 public(默认创建,如果未指定模式名,对象通常创建在此)。

      • 用户可以创建多个模式。

      • 搜索路径 (search_path): 是一个配置参数(可在会话级设置),指定了当使用非限定对象名(如 SELECT * FROM orders;)时,数据库按顺序查找对象的模式列表。例如 SET search_path TO myschema, public; 会先在 myschema 找 orders 表,找不到再去 public 找。

      • KingbaseES特有:模式分组 (Schema Group): 这是KingbaseES的一个重要扩展特性。它允许将多个模式逻辑上组合成一个。对组的授权(如 GRANT USAGE ON SCHEMA GROUP mygroup TO myrole;)会自动授予该组内所有模式的 USAGE 权限。这极大地简化了跨多个模式的对象管理和权限控制,尤其适合多租户或大型复杂应用。

  4. 数据库对象 (Database Objects)

    • 定义: 存储在特定模式中的实际数据结构或程序单元。

    • 主要类型:

      • 表 (Table): 存储数据的基本结构,由行(记录)和列(字段)组成。

      • 视图 (View): 基于一个或多个表的查询结果集的虚拟表。不存储实际数据。

      • 索引 (Index): 提高数据检索速度的数据结构(如 B-tree, Hash, GiST, GIN)。

      • 序列 (Sequence): 生成唯一的整数序列,常用于主键自增。

      • 函数 (Function): 可重用的 SQL 或过程化语言(如 PL/SQL, PL/pgSQL)代码块。

      • 存储过程 (Procedure): (KingbaseES兼容支持) 执行特定操作的程序单元,可能不返回值(标准SQL区分函数和过程)。

      • 触发器 (Trigger): 在表上发生特定事件(INSERT/UPDATE/DELETE)时自动执行的函数。

      • 类型 (Type): 自定义数据类型(复合类型、枚举类型等)。

      • 同义词 (Synonym): (KingbaseES兼容支持) 为数据库对象(如表、视图、另一个同义词等)提供别名。

      • 包 (Package): (KingbaseES兼容Oracle/PLSQL特性) 将相关的函数、过程、变量、类型、游标等封装在一起的逻辑单元。

    • 访问方式: 对象通常使用 限定名 访问:[database_name.][schema_name.]object_name。在连接上下文已知数据库、search_path 已知模式或使用默认值时,可以省略部分限定。

  5. 用户与角色 (Users & Roles)

    • 定义: 用于控制对数据库实例及其对象的访问权限。

    • 用户 (User): 通常指可以登录到数据库实例并进行操作的个体账号(包含登录权限的角色)。CREATE USER 等同于 CREATE ROLE ... LOGIN

    • 角色 (Role): 权限的集合。角色可以分配给用户或其他角色(实现权限继承)。

    • 关键点:

      • 用户和角色在KingbaseES中本质上都是“角色”,区别在于是否具有 LOGIN 属性。

      • 权限通过 GRANT 和 REVOKE 命令管理,可以授予到数据库、模式、模式组或具体对象上。

      • PUBLIC 是一个特殊的角色,代表所有用户。授予 PUBLIC 的权限对所有用户生效。

  6. 系统目录 (System Catalogs)

    • 定义: KingbaseES内部用于存储元数据(Metadata) 的特殊表和视图。

    • 内容: 存储了关于数据库本身的所有信息:有哪些数据库、每个数据库中有哪些模式、每个模式中有哪些对象(表、视图、索引...)、这些对象的定义、用户/角色信息、权限信息、统计信息等。

    • 位置: 通常位于每个数据库的 sys_catalog 模式(或类似名称,具体名称可能因版本或安装配置略有差异)下。系统数据库 sysdatabase 存储了实例级的全局信息。

    • 访问: 可以通过SQL查询系统目录视图(如 sys_class - 所有表/索引等对象, sys_tables - 表, sys_views - 视图, sys_indexes - 索引, sys_users/sys_roles - 用户/角色, sys_namespace - 模式等)来获取元数据信息。这些视图是理解和管理数据库逻辑结构的关键工具。

KingbaseES与Oracle/MySQL的对比

KingbaseESOracleMySQL
数据库连接连接时必须指定具体的数据库。同实例内不可以跨库访问。连接时必须指定具体的数据库。同实例内不可以跨库访问。连接时不必要指定具体的数据库。同实例内可以跨库访问。
数据库和模式的关系

一对多

一个数据库中可以有多个模式

一对多

一个数据库中可以有多个模式

一对一

可以认为数据库等同于模式

数据库和用户的关系

多对多

用户是实例全局的。用户可以操作不同数据库中的对象。

一对多

用户是隶属于具体数据库的(除sys和system用户外),一个数据库下的用户不能连接到其他数据库。不同数据库中可以有同名用户。

多对多

用户是实例全局的。用户通过用户名+主机名的方式来区分。用户可以操作不同数据库中的对象。

模式和用户的关系

多对多

模式和用户不等价

一对一

模式和用户等价

多对多

模式和用户不等价

用户和角色的关系用户和角色是实例全局的。用户和角色基本等价,用户默认可登录,角色默认不可登录,但都可以回收或授予登录权限。用户和角色都可以拥有数据库对象和获得权限。用户和角色都可以通过继承的方式将权限传递给其他用户/角色。用户和角色是隶属于具体数据库的。用户是实体,可以拥有数据库对象和权限。角色是用户的抽象表示,不能登录数据库,不能拥有数据库对象,只能获得权限。可以将角色授予用户,使用户获得角色的权限。用户和角色是实例全局的。用户是实体,可以拥有数据库对象和权限。角色是用户的抽象表示,不能登录数据库,不能拥有数据库对象,只能获得权限。可以将角色授予用户,使用户获得角色的权限。
默认查询路径通过search_path指定。和当前用户同名。和当前数据库同名。
http://www.dtcms.com/a/319652.html

相关文章:

  • Windows Oracle 11 g dmp数据库恢复笔记
  • 一种基于CEEMDAN-小波阈值联合降噪-快速谱峭度(FSK)/基尼谱Ginigram/Autogram的故障诊断 Matlab
  • 【已解决】-bash: mvn: command not found
  • [Oracle] FLOOR()函数
  • Oracle 12c + Pl/Sql windows系统下表空间创建、迁移,dmp备份导入,数据库字符集更改
  • 7. 什么是事件委托
  • 试用一个用v语言编写的单文件数据库vsql
  • RepoCoder:仓库级代码补全的迭代检索生成框架解析与应用前沿
  • 【FreeRTOS】(号外)任务间通讯2: 信号量- Counting Semaphore
  • NFS 服务器与iSCSI 服务器
  • USB枚举介绍 以及linux USBFFS应用demo
  • centos安装python、uv
  • Python包与虚拟环境工具全景对比:从virtualenv到uv的演进
  • python中用xlrd、xlwt读取和写入Excel中的日期值
  • python 常用条件判断语句用法
  • day44 力扣1143.最长公共子序列 力扣1035.不相交的线 力扣53. 最大子序和 力扣392.判断子序列
  • 关于时钟门控ICG的一切(与门及或门门控)
  • [论文阅读] 人工智能 + 软件工程 | 大型语言模型与静态代码分析工具:漏洞检测能力大比拼
  • 分布式事务与分布式锁
  • PCB布线
  • 大队列CT胰腺癌PANDA 模型 医生结合AI后,病灶检测灵敏度提升 8.5%,胰腺癌识别灵敏度提升 20.5%,住院医师性能接近专家水平
  • 补充一种激活函数:GeGLU
  • 关于AI应用案例计算机视觉、自然语言处理、推荐系统和生成式AI四大领域的详细技术分析。
  • 数学建模——粒子群算法
  • Gradle 全解析:Android 构建系统的核心力量
  • JavaScript构建工具
  • CSS overscroll-behavior:解决滚动穿透的 “边界控制” 专家
  • 《Day3-PyTorch 自动微分入门:从计算图到梯度下降的实践指南》
  • Redis中间件(三):Redis存储原理与数据模型
  • Dokcer创建中间件环境