Skip to content

DM 逻辑架构

达梦数据库的逻辑架构采用了分层设计,主要包括以下几个层次:

  • 应用层:提供与应用程序的交互接口
  • SQL引擎层:处理SQL语句的解析、优化和执行
  • 存储引擎层:负责数据的存储和检索
  • 事务管理层:确保事务的ACID属性
  • 数据字典层:管理数据库对象的元数据

应用层

应用层是达梦数据库与外部应用程序交互的接口层,提供了多种访问方式,包括:

客户端工具

  • DM管理工具:图形化管理界面,用于数据库的配置、监控和管理
  • DM查询分析器:用于执行SQL语句和查看执行结果
  • DM数据迁移工具:用于在不同数据库之间进行数据迁移
  • DM性能监控工具:用于监控数据库的性能指标

编程接口

达梦数据库提供了多种编程语言的编程接口,方便应用程序开发:

  • ODBC:开放数据库连接,支持多种编程语言
  • JDBC:Java数据库连接,用于Java应用程序
  • ADO.NET:用于.NET应用程序
  • Python DB API:用于Python应用程序
  • OCI:兼容Oracle的调用接口,便于从Oracle迁移的应用程序使用
  • DPI:达梦专用的编程接口,提供更高的性能和更多的特性

网络通信

应用层通过网络协议与数据库服务器进行通信,支持以下协议:

  • TCP/IP:标准的网络通信协议
  • SSL/TLS:加密通信协议,确保数据传输安全

SQL引擎层

SQL引擎层是达梦数据库的核心组件之一,负责处理SQL语句的解析、优化和执行。主要包括以下组件:

SQL解析器

SQL解析器负责将用户输入的SQL语句解析为抽象语法树(AST),进行语法检查和语义分析,确保SQL语句的合法性。

查询优化器

查询优化器根据SQL语句和数据库统计信息,生成最优的执行计划。达梦数据库的查询优化器支持以下优化技术:

  • 基于代价的优化:根据各种操作的代价估算,选择代价最低的执行计划
  • 基于规则的优化:根据预定义的优化规则,对SQL语句进行重写和优化
  • 统计信息收集:收集表、索引等对象的统计信息,为优化器提供决策依据
  • 查询计划缓存:缓存生成的执行计划,避免重复优化,提高查询效率

执行器

执行器负责按照优化器生成的执行计划执行SQL语句,包括:

  • 操作符执行:执行各种查询操作符,如扫描、连接、排序、聚合等
  • 数据访问:与存储引擎层交互,获取和修改数据
  • 结果集处理:处理查询结果,返回给客户端

存储引擎层

存储引擎层负责数据的物理存储和检索,是达梦数据库的核心组件之一。达梦数据库支持多种存储引擎,包括:

行存储引擎

行存储引擎以行为单位存储数据,适合OLTP(在线事务处理)应用,具有以下特点:

  • 适合频繁的插入、更新和删除操作
  • 适合查询整行数据的场景
  • 支持事务的ACID属性

列存储引擎

列存储引擎以列为单位存储数据,适合OLAP(在线分析处理)应用,具有以下特点:

  • 适合大数据量的查询和分析
  • 适合只查询部分列的场景
  • 具有较高的压缩率,节省存储空间

行列融合存储引擎

行列融合存储引擎结合了行存储和列存储的优点,适合HTAP(混合事务/分析处理)应用,具有以下特点:

  • 同时支持OLTP和OLAP应用
  • 根据不同的查询类型自动选择合适的存储方式
  • 提供了良好的性能平衡

事务管理层

事务管理层负责确保事务的ACID(原子性、一致性、隔离性、持久性)属性,主要包括以下组件:

事务管理器

事务管理器负责事务的开始、提交和回滚,维护事务的状态信息。

并发控制

并发控制机制用于处理多个事务同时访问数据时的冲突,确保事务的隔离性。达梦数据库支持以下并发控制技术:

  • 锁机制:包括共享锁、排他锁、意向锁等,用于控制数据的访问权限
  • 多版本并发控制(MVCC):通过维护数据的多个版本,允许读事务和写事务并发执行,提高并发性能
  • 死锁检测和处理:自动检测死锁,并通过回滚其中一个事务来解决死锁

日志管理

日志管理负责记录数据库的所有修改操作,确保事务的持久性和可恢复性。达梦数据库的日志包括:

  • 重做日志(Redo Log):记录数据的修改操作,用于崩溃恢复
  • 回滚日志(Undo Log):记录数据的旧值,用于事务回滚和MVCC

数据字典层

数据字典层管理数据库对象的元数据,包括表、索引、视图、存储过程等对象的定义和属性。数据字典存储在系统表中,用户可以通过查询系统表来获取数据库对象的元数据信息。

系统表

达梦数据库的系统表包括:

  • 基础系统表:存储数据库的基本信息,如数据库版本、字符集等
  • 对象定义表:存储表、索引、视图等对象的定义
  • 权限管理表:存储用户、角色和权限信息
  • 性能统计表:存储数据库的性能统计信息

数据字典缓存

为了提高数据字典的访问效率,达梦数据库将常用的数据字典信息缓存在内存中,称为数据字典缓存。当需要访问数据字典时,首先检查缓存,如果缓存中存在则直接使用,否则从磁盘读取并缓存。

数据库对象模型

达梦数据库支持多种数据库对象,包括:

表是存储数据的基本单位,由行和列组成。达梦数据库支持以下表类型:

  • 普通表:最基本的表类型
  • 分区表:将表数据按照一定规则分布到多个分区中,提高查询和维护效率
  • 临时表:用于存储临时数据,会话结束后自动删除
  • 外部表:指向外部数据源的表,不存储实际数据

索引

索引用于提高数据查询的效率,达梦数据库支持以下索引类型:

  • B树索引:最常用的索引类型,适合范围查询和等值查询
  • 哈希索引:适合等值查询,不支持范围查询
  • 位图索引:适合低基数列的查询
  • 全文索引:用于文本内容的全文检索
  • 空间索引:用于空间数据的查询

视图

视图是从一个或多个表中导出的虚拟表,不存储实际数据,只存储查询定义。达梦数据库支持以下视图类型:

  • 普通视图:基于SELECT语句的视图
  • 物化视图:将查询结果存储在磁盘上的视图,提高查询效率

存储过程和函数

存储过程和函数是预编译的SQL语句集合,存储在数据库中,可被多次调用。达梦数据库支持PL/SQL语法,与Oracle兼容。

触发器

触发器是与表关联的特殊存储过程,当表发生插入、更新或删除操作时自动执行。达梦数据库支持以下触发器类型:

  • 行级触发器:对每一行数据的修改都触发一次
  • 语句级触发器:对整个SQL语句触发一次
  • BEFORE触发器:在事件发生前执行
  • AFTER触发器:在事件发生后执行

序列

序列用于生成唯一的数字序列,常用于主键生成。

同义词

同义词是数据库对象的别名,用于简化对象访问和提供安全性。

数据组织方式

表空间

表空间是达梦数据库中数据存储的逻辑单位,每个表空间由一个或多个数据文件组成。表空间的主要作用包括:

  • 管理数据的存储位置
  • 控制数据的磁盘分配
  • 实现数据的备份和恢复
  • 提供数据的隔离性

达梦数据库包括以下系统表空间:

  • SYSTEM表空间:存储系统字典信息
  • ROLL表空间:存储回滚段信息
  • TEMP表空间:存储临时数据
  • MAIN表空间:默认的用户表空间

段、区、页

达梦数据库的数据存储采用了段、区、页的层次结构:

  • 页(Page):最小的存储单位,默认大小为8KB
  • 区(Extent):由连续的页组成,是分配存储空间的基本单位
  • 段(Segment):由多个区组成,是表、索引等对象的存储单位

版本差异

DM7 逻辑架构

DM7的逻辑架构相对简单,主要包括:

  • 应用层
  • SQL引擎层
  • 存储引擎层(主要是行存储引擎)
  • 事务管理层
  • 数据字典层

DM8 逻辑架构

DM8在DM7的基础上进行了扩展和优化,主要改进包括:

  • 增加了列存储引擎和行列融合存储引擎,支持HTAP应用
  • 增强了查询优化器,支持更多的优化技术
  • 改进了并发控制机制,提高了并发性能
  • 增加了MPP分布式架构支持
  • 增强了安全性特性

最佳实践

逻辑架构设计建议

  • 根据业务类型选择合适的存储引擎:OLTP应用选择行存储引擎,OLAP应用选择列存储引擎,混合应用选择行列融合存储引擎
  • 合理设计表空间:将不同类型的数据存储在不同的表空间中,便于管理和维护
  • 优化索引设计:根据查询模式设计合适的索引,避免过多或不合理的索引
  • 合理使用分区表:对于大数据量的表,使用分区表可以提高查询和维护效率
  • 优化SQL语句:编写高效的SQL语句,避免复杂的嵌套查询和全表扫描

性能优化建议

  • 收集统计信息:定期收集表和索引的统计信息,确保优化器生成准确的执行计划
  • 使用绑定变量:对于频繁执行的SQL语句,使用绑定变量可以提高查询计划缓存的命中率
  • 调整内存参数:根据系统配置和业务需求,调整数据库的内存参数,如缓冲区大小、共享池大小等
  • 监控和分析性能:定期监控数据库性能,分析性能瓶颈,及时进行优化

常见问题(FAQ)

Q1: 达梦数据库支持哪些存储引擎?

A1: 达梦数据库支持以下存储引擎:

  • 行存储引擎:适合OLTP应用
  • 列存储引擎:适合OLAP应用
  • 行列融合存储引擎:适合HTAP应用

Q2: 达梦数据库的SQL引擎与Oracle兼容吗?

A2: 达梦数据库的SQL引擎兼容Oracle的PL/SQL语法,支持存储过程、触发器、函数等Oracle特性,便于从Oracle迁移的应用程序使用。

Q3: 如何查看达梦数据库的执行计划?

A3: 可以通过以下方式查看达梦数据库的执行计划:

  • 使用DM查询分析器,在执行SQL语句前勾选"显示执行计划"
  • 使用SQL语句:EXPLAIN SELECT * FROM table_name;
  • 使用性能监控工具查看实时执行计划

Q4: 达梦数据库的表空间与Oracle的表空间有什么区别?

A4: 达梦数据库的表空间概念与Oracle类似,但有一些区别:

  • 达梦数据库的默认页大小为8KB,Oracle的默认块大小为8KB
  • 达梦数据库的表空间由数据文件组成,Oracle的表空间由数据文件和临时文件组成
  • 达梦数据库的系统表空间包括SYSTEM、ROLL、TEMP和MAIN,Oracle的系统表空间包括SYSTEM、SYSAUX、UNDOTBS1、TEMP等

Q5: 如何优化达梦数据库的查询性能?

A5: 优化达梦数据库查询性能的方法包括:

  • 设计合适的索引
  • 编写高效的SQL语句
  • 收集统计信息
  • 使用绑定变量
  • 调整内存参数
  • 优化表结构设计

Q6: 达梦数据库支持分区表吗?

A6: 是的,达梦数据库支持分区表,可以按照范围、列表、哈希等方式进行分区。分区表可以提高大数据量表的查询和维护效率。