#产品架构

# 单机部署

# 分布式部署

# 主要模块介绍

数据库客户端

一般是客户基于YashanDB驱动开发的应用程序,或者YashanDB提供的客户端工具。

  • 驱动:应用程序和数据库存储之间的接口,每一个驱动实现某一种开发语言对数据库各类操作指令的调用。
  • 工具:一类软件应用程序或工具集,旨在帮助数据库管理员(DBA)和开发人员管理和维护数据库系统。

单机数据库服务端

包括数据库实例和一系列持久化文件。

数据库实例只在运行态存在,包括一组线程和内存空间,YashanDB采取单进程多线程架构,内存空间则由共享内存区域和私有内存区域两部分组成。

分布式数据库服务端

包括分布式服务组件、节点上的数据库实例和一系列持久化文件。

YashanDB分布式部署采用了Shared-Nothing的架构,各服务组件描述如下:

  • MN Group: MN负责集群的节点管理、元数据管理和分布式事务管理。MN组内节点具有主从关系,通过Raft协议实现节点间的一致性。
  • CN Group:CN负责对外提供接口,接收用户请求,生成分布式查询计划,向DN分发查询计划并汇总执行结果。
  • DN Group:DN负责存储数据,执行CN下发的查询计划。通过DN组提供高可用能力,组内节点具有主从关系,通过Raft协议实现节点间的数据一致性。

持久化文件

数据库的持久化文件,确保在掉电等异常关闭场景中数据库仍能启动并正常使用,主要包括:

  • 控制文件:数据库最关键入口信息,保存数据库所包含数据文件、日志文件等结构,以及持久化相关信息。
  • 数据文件:保存所有系统表、用户表(HEAP表/TAC表/LSC表)、以及undo等数据。
  • Slice文件:保存LSC表的稳态数据。
  • 日志文件:保存redo日志,在recovery场景中用于修复脏页,在主备场景中用于向备机复制。
  • 归档日志文件:保存归档的redo日志,在recovery场景中用于结合数据库的备份文件将数据库恢复到特定时间点。

私有内存区域

私有内存区域是各工作线程运行时分配释放内存的区域,与共享内存区域不同,此区域的内存一旦分配给特定工作线程后就是私有的,释放后才能再次分配给其他线程,各部分描述如下:

  • SQL执行区:SQL执行期使用的堆栈空间。
  • 虚拟内存:即Materialize zone,虚拟内存主要为需要物化数据的SQL算子使用,且在物化对象过大时将磁盘作为虚拟内存使用。

共享内存区域

共享内存区域包括内存共享池、数据缓存和有界加速缓存三个部分。

内存共享池的各部分描述如下:

  • SQL缓存:SQL解析树和执行计划保存在这里,用于同一SQL再次被调用时避免硬解析,节省开销。
  • 日志缓存:redo日志的缓存区,日志并发写入缓存区,批量刷盘。
  • PL/SQL池:存储过程、包、触发器等对象第一次执行时加载到这里,以提高后续再次执行的效率。
  • 数据字典缓存:数据字典是极为频繁使用的信息,缓存于此可以极大提升访问效率。
  • 大对象池:分配大对象的区域,例如超大SQL文本。

数据缓存用于当磁盘上的一个Block被访问时,将其事先装载到此区域,且当此区域空间快满时,通过一定算法淘汰不经常使用的Block。

有界加速缓存是基于有界理论的AC对象缓存。

工作线程

工作线程是处理客户端连接请求的线程,可以为会话专有模式或共享模式。

后台线程

数据库后台任务的工作线程,主要包括:

  • 写日志:将redo缓存内容写入redo文件的后台任务线程。
  • 写数据:将数据缓存中脏页数据写入数据文件的后台任务线程 。
  • Checkpoint:负责检查点任务的线程。
  • 数据转换:MCOL可变数据向SCOL稳态数据转换的线程。
  • MDS:分布式部署中的元数据管理服务线程。
  • CMS:分布式集群管理服务线程。
  • GTS:分布式部署中的全局时间管理服务线程。
pdf-btn 下载文档
copy-btn 复制链接