当前位置: 首页 > 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.lryc.cn/news/612986.html

相关文章:

  • Python实现点云随机一致性(RANSAC)配准——粗配准
  • (Python)Python爬虫入门教程:从零开始学习网页抓取(爬虫教学)(Python教学)
  • 利用vue.js2X写前端搜索页面,express写后端API接口展现搜索数据
  • python数据结构与算法(基础)
  • DrissionPage自动化:高效Web操作新选择
  • 怎么在本地引入字体
  • 深入解析嵌套事务:原理与应用
  • 基于langchain的两个实际应用:[MCP多服务器聊天系统]和[解析PDF文档的RAG问答]
  • HTTP 协议升级(HTTP Upgrade)机制
  • 自动驾驶控制算法——滑模控制(SMC)原理与建模
  • TCP 如何保证可靠性
  • FluentUI-main的详解
  • 多账号管理方案:解析一款免Root的App分身工具
  • B-树与B+树
  • 动力电池点焊机:效率质量双提升,驱动新能源制造升级
  • Dify 从入门到精通(第 20/100 篇):Dify 的自动化测试与 CI/CD
  • Oracle exp imp expdp impdp 命令详解
  • PCB制造中压接孔、插接孔、沉头孔、台阶孔的区别及生产流程
  • 《C语言》函数练习题--1
  • 基于大数据的美食视频播放数据可视化系统 Python+Django+Vue.js
  • Vscode Data Wrangler 数据查看和处理工具
  • GitHub 上 Star 数量前 20 的开源 AI 项目
  • 中国MCP市场:腾讯、阿里、百度的本土化实践
  • 医疗人效管理新标杆:盖雅工场如何赋能健康服务企业提质增效
  • Java 大视界 -- Java 大数据在智能教育在线课程互动优化与学习体验提升中的应用(386)
  • 一篇文章用大白话带初学者搞清训练集、测试集及验证集关系及场景逻辑(包清楚)
  • LLMs api价格对比平台
  • --- Eureka 服务注册发现 ---
  • 【第7话:相机模型3】自动驾驶IPM图像投影拼接技术详解及代码示例
  • TikTok Shop冷启动破局战:亚矩阵云手机打造爆款账号矩阵