赞
踩
Vastbase G100是海量数据融合了多年对各行业应用场景的深入理解,基于openGauss内核开发的企业级关系型数据库。
上一期,《Vast+产品展厅》为您介绍了Vastbase G100的部署架构和物理架构。
本期,我们将为您详细讲解Vastbase G100的物理架构和系统架构,拆解其中的关键技术和功能。
数据库集簇在本质上是一个文件目录,包含一系列子目录与文件。执行initdb命令会在指定目录下创建基础目录,从而初始化一个新的数据库集簇。
一个数据库集簇的主要文件与子目录如下:
base目录下的每一个子目录都对应着一个数据库,其目录名称即是数据库的oid,另外有一个目录pgsql_tmp主要用于存储数据库运行期间产生的临时文件。
每个数据库目录下都存储着该数据库中的一些对象(表和索引)的数据文件,表和索引作为数据库对象是通过oid来管理的,而它们的数据文件由relfilenode管理。表和索引在刚创建的时候,relfilenode值是与oid一致的,但是在后续维护过程中relfilenode可能会发生变化。
表和索引可能存在四种数据文件分支:
0号分支main 为数据文件本体;
1号分支fsm(空闲空间映射)保存了main分支中空闲空间的信息;
2号分支vm(可见性映射)保存了main分支中可见性的信息;
3号分支init 是很少见的特殊分支,通常表示不被WAL日志记录的表与索引。
Vastbase G100内核系统功能架构图如下所示,主要包括客户端驱动、通信管理、线程管理、SQL引擎、存储引擎、安全管理、通用组件、硬件与OS平台、工具等模块,下面将逐一阐述。
客户端驱动是指数据库内核提供的外部接口,客户端程序通过这些接口访问和操作数据库,Vastbase G100提供了LIBPQ、ODBC、JDBC等外部接口。
LIBPQ:LIBPQ是数据库本地原生C接口,应用程序使用它与Vastbase G100数据库建立连接并通过LIBPQ API执行各种数据库操作。
ODBC:Vastbase G100提供了标准的ODBC接口,用于某些应用或者内建的应用工具访问RDBMS。
JDBC:Vastbase G100提供了标准的JDBC接口,用于Java应用开发。
Vastbase G100可正常工作在Intel和Arm等芯片上;在操作系统的兼容性上,Vastbase G100可运行在国产操作系统如麒麟、欧拉以及Linux等主流操作系统上。
Vastbase G100正在不断适配更多操作系统和芯片,拓展更广阔的应用前景。
Vastbase G100提供了大量的数据库配套工具,以帮助用户更好地使用数据库。
常用的数据库工具如下:
客户端工具
是Vastbase G100自带的vsql工具,vsql基于Vastbase G100的LIBPQ接口,通过调用LIBPQ对应接口实现登录、SQL执行等操作。
vsql还提供了丰富的元命令,通过简单的元命令即可查看数据库的相关信息,例如\l可以查看数据库实例中的数据库信息、\dt可以查看数据库中表信息等。
初始化工具
是指vb_initdb,该工具用于初始化数据库实例。初始化工具在初始化过程中主要负责初始化数据目录结构、初始化数据字典等。
启停工具
是vb_ctl工具中提供的功能,使用该工具的start、stop、restart功能可以用来启动、停止、重启数据库实例。
物理备份工具
是指vb_basebackup工具,它可以将整个实例的数据进行备份。而vb_probackup工具用于管理Vastbase G100数据库物理备份和恢复,它可以对Vastbase G100实例进行定期备份,以便在数据库出现故障时能够恢复服务器。
数据库逻辑导出工具
是指vb_dump工具,用户可以自定义导出一个数据库或其中的对象(模式、表、视图等)。vb_restore工具用于导入由vb_dump生成的备份文件。
通信管理模块实现了通信协议处理和控制命令信号处理。Vastbase G100数据库网络通信支持TCP/IP协议、SSL标准协议(TLS 1.2)。
通信、会话建立、用户认证等流程如下:
Vastbase G100引入了模拟信号机制,单独启动一个signal monitor线程用来接收外部发送的process-directed signal,该线程未屏蔽SIGINT、SIGQUIT和SIGTERM这三个信号,而其余所有线程都屏蔽了这三个信号,因此只有signal monitor线程会接收并处理外部信号。
Vastbase G100内部为每个线程维护一个数组,数组每个元素记录接收到的信号和发送此信号的线程。所有线程都只向操作系统注册SIGUSR2的信号处理函数,内部线程之间通过SIGUSR2信号通信(pthread_kill),线程收到SIGUSR2信号后会检查自己的数组,然后调用对应信号的处理函数。
Vastbase G100使用多线程架构,相关的线程包括:业务处理线程池、日志写线程、数据页写线程、检查点线程、统计线程、日志发送线程、日志接收线程、清理线程、归档线程、管理线程等。
管理线程
负责响应客户端请求、创建新的线程为客户端提供服务、管理其它后台线程等。
业务处理线程池
主要负责接收客户端的请求、解析SQL并生成执行计划、返回执行结果给客户端等。
日志写线程
主要负责将内存中的预写日志(WAL)页刷新到预写日志文件中,确保已提交的事务数据不会丢失。
检查点线程
负责周期性执行检查点操作,确保所有数据文件被更新,将数据脏页刷新到磁盘,以保持数据库的一致性。
统计线程
负责收集对象、SQL、会话、锁等的统计信息,并将这些信息保存,用于性能分析、故障诊断和状态监控。
日志发送线程
负责将预写日志发送到备机,而日志接收线程负责在备机上接收预写日志。
清理线程
负责回收不再使用的资源,如断开的客户端连接、不再需要的临时文件等。
Vastbase G100安全管理模块主要实现三权分立、身份鉴别、访问控制、数据加密、安全审计等功能。
三权分立:数据库中通过设立三种角色来划分不同权限,提高数据库安全性
身份鉴别:用来管理用户登录过程
访问控制:分为自主访问控制和强制访问控制,包括对象访问、数据访问
加密:加密包括传输加密和数据存储加密;审计主要是提供数据库的安全审计功能
安全审计:审计主要是提供数据库的安全审计功能
数据字典:定义数据字典的结构和数据字典中初始的数据,例如pg_class系统表;
内存管理:负责数据库中的内存分配和回收,例如共享内存管理;
数据类型:定义数据库的各种数据类型,各类型的输入输出、操作符等;
内置函数:定义和实现数据库内置的函数,例如内置的时间函数now()。
SQL引擎负责普通SQL语句和PL/pgSQL的解析、分析、重写、计划、执行整个流程,流程图如下:
解析阶段
会根据语法规则将SQL语句文本生成解析树;
分析阶段
根据解析阶段生成的解析树执行语义检查,检查执行的操作是否合理,如检查查询的表是否存在等;
重写阶段
根据数据库中规则转换查询树,例如把视图展开为另外一个查询树;
计划阶段
由优化器对以上阶段生成的查询树进行逻辑上等价变换,然后基于代价模型选择一个代价最小的执行计划并生成相应的计划树;
执行阶段
据执行计划执行,并生成结果。
Vastbase G100存储引擎实现行存、列存、CSN快照、锁管理器、空闲空间管理、大内存缓冲区管理、索引管理、日志管理、并行日志回收、增量检查点功能等。
行存储是基于磁盘的存储引擎,存储格式的设计遵从段页式设计,存储结构需以页面(page)为单位,方便与操作系统内核以及文件系统的接口进行交互。
行存支持完整的事务系统,适用于交易型场景。
行存将数据按行组成tuple存储在页面上,必须按行读取数据,即使读取一列也必须读取整行数据。
在分析性的作业以及业务负载的情况下,数据库往往会遇到针对大量表的复杂查询,而这种复杂查询中,往往仅涉及一个较宽(列数较多)的列。此类场景下,行存储以行作为操作单位,会引入与业务目标数据无关的数据列的读取与缓存,造成了大量IO的浪费。
列存储引擎将数据按列划分,每一列数据使用单独的文件进行存储。一般来说,一列的数据特征比较相似,适合压缩,因此列存数据的压缩比相对较高。当表中列数比较多,但是访问的列数比较少时,列存储可以按需读取列数据,大大减少不必要的读IO,提高查询性能。
CSN(Commit Sequence Number)快照是一种用于实现多版本并发控制(MVCC)的机制。CSN 是一个64位的无符号自增长整数,它作为逻辑时间戳在数据库内部使用,模拟数据库操作的时序。
CSN 快照帮助确定哪些数据版本对当前事务可见,哪些不可见,从而允许多个事务并发地访问数据库而不会发生冲突。
锁管理器负责处理并发事务中的锁请求和释放,确保数据的一致性和隔离性。
FSM(Free Space Map)机制用于管理存储介质上空闲空间。FSM 通过一个专门的数据结构来跟踪和记录存储设备上的空闲空间块,从而优化空间的分配和回收,提高存储效率。
通常指共享缓冲区(Shared Buffers),它用于缓存数据页以减少对磁盘的读写操作,从而提高数据库查询和事务处理的性能。
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。Vastbase G100支持唯一索引、主键索引等多种索引方式,支持BTree、Hash、GIST、GIN等多种索引类型。通过索引管理,够确保数据库查询的高效执行,保持数据的一致性和完整性。
日志管理是确保数据库健康运行和便于故障排查的重要环节。日志文件记录了数据库的操作历史、系统事件、错误信息以及性能相关的数据。
并行日志回收(Parallel Log Recovery)允许多个线程同时执行日志回收(也称为 WAL 回收)。日志回收是指将不再需要的预写日志(WAL)文件从系统中删除的过程,这通常是因为这些日志所记录的数据变更已经被提交并且不再需要用于恢复。
增量检查点(Incremental Checkpoint)是一种优化的检查点机制,用于提高数据库的运行效率和性能。与传统的全量检查点相比,增量检查点不需要在每次检查点时将所有脏页写入磁盘,而是只处理自上次检查点以来发生变化的数据页。
在物理架构中,介绍了数据库的文件目录、各个目录的主要作用、数据目录下各个文件的作用,帮助您初步认识数据库的物理结构。
在系统架构中,Vastbase G100通过驱动、工具、管理等,实现高安全、高性能、低成本等特性。
通过对Vastbase G100的部署架构、逻辑架构、物理架构和系统架构的了解,能确保数据库系统高效、可靠和安全运行。
更多海量数据黑科技,敬请锁定《Vast+产品展厅》。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。