Vast+产品展厅 | Vastbase G100数据库是什么架构?(2)

Vastbase G100是海量数据融合了多年对各行业应用场景的深入理解,基于openGauss内核开发的企业级关系型数据库

上一期,《Vast+产品展厅》为您介绍了Vastbase G100的部署架构和物理架构。

本期,我们将为您详细讲解Vastbase G100的物理架构系统架构,拆解其中的关键技术和功能。


1.Vastbase G100的物理架构

数据库集簇在本质上是一个文件目录,包含一系列子目录与文件。执行initdb命令会在指定目录下创建基础目录,从而初始化一个新的数据库集簇。

一个数据库集簇的主要文件与子目录如下:

base目录下的每一个子目录都对应着一个数据库,其目录名称即是数据库的oid,另外有一个目录pgsql_tmp主要用于存储数据库运行期间产生的临时文件。

每个数据库目录下都存储着该数据库中的一些对象(表和索引)的数据文件,表和索引作为数据库对象是通过oid来管理的,而它们的数据文件由relfilenode管理。表和索引在刚创建的时候,relfilenode值是与oid一致的,但是在后续维护过程中relfilenode可能会发生变化。

表和索引可能存在四种数据文件分支:

0号分支main 为数据文件本体;

1号分支fsm(空闲空间映射)保存了main分支中空闲空间的信息;

2号分支vm(可见性映射)保存了main分支中可见性的信息;

3号分支init 是很少见的特殊分支,通常表示不被WAL日志记录的表与索引。

2.Vastbase G100的系统架构

Vastbase G100内核系统功能架构图如下所示,主要包括客户端驱动、通信管理、线程管理、SQL引擎、存储引擎、安全管理、通用组件、硬件与OS平台、工具等模块,下面将逐一阐述。

2.1客户端驱动

客户端驱动是指数据库内核提供的外部接口,客户端程序通过这些接口访问和操作数据库,Vastbase G100提供了LIBPQ、ODBC、JDBC等外部接口。

LIBPQ:LIBPQ是数据库本地原生C接口,应用程序使用它与Vastbase G100数据库建立连接并通过LIBPQ API执行各种数据库操作。

ODBC:Vastbase G100提供了标准的ODBC接口,用于某些应用或者内建的应用工具访问RDBMS。

JDBC:Vastbase G100提供了标准的JDBC接口,用于Java应用开发。

2.2硬件与OS平台

Vastbase G100可正常工作在Intel和Arm等芯片上;在操作系统的兼容性上,Vastbase G100可运行在国产操作系统如麒麟、欧拉以及Linux等主流操作系统上。

Vastbase G100正在不断适配更多操作系统和芯片,拓展更广阔的应用前景。

2.3工具

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生成的备份文件。

 2.4通信管理

通信管理模块实现了通信协议处理和控制命令信号处理。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信号后会检查自己的数组,然后调用对应信号的处理函数。

2.5线程管理

Vastbase G100使用多线程架构,相关的线程包括:业务处理线程池、日志写线程、数据页写线程、检查点线程、统计线程、日志发送线程、日志接收线程、清理线程、归档线程、管理线程等。

管理线程

负责响应客户端请求、创建新的线程为客户端提供服务、管理其它后台线程等。

业务处理线程池

主要负责接收客户端的请求、解析SQL并生成执行计划、返回执行结果给客户端等。

日志写线程

主要负责将内存中的预写日志(WAL)页刷新到预写日志文件中,确保已提交的事务数据不会丢失。

检查点线程

负责周期性执行检查点操作,确保所有数据文件被更新,将数据脏页刷新到磁盘,以保持数据库的一致性。

统计线程

负责收集对象、SQL、会话、锁等的统计信息,并将这些信息保存,用于性能分析、故障诊断和状态监控。

日志发送线程

负责将预写日志发送到备机,而日志接收线程负责在备机上接收预写日志。

清理线程

负责回收不再使用的资源,如断开的客户端连接、不再需要的临时文件等。

 2.6安全管理

Vastbase G100安全管理模块主要实现三权分立、身份鉴别、访问控制、数据加密、安全审计等功能。

三权分立:数据库中通过设立三种角色来划分不同权限,提高数据库安全性

身份鉴别:用来管理用户登录过程

访问控制:分为自主访问控制和强制访问控制,包括对象访问、数据访问

加密:加密包括传输加密和数据存储加密;审计主要是提供数据库的安全审计功能

安全审计:审计主要是提供数据库的安全审计功能

 2.7通用组件

数据字典:定义数据字典的结构和数据字典中初始的数据,例如pg_class系统表;

内存管理:负责数据库中的内存分配和回收,例如共享内存管理;

数据类型:定义数据库的各种数据类型,各类型的输入输出、操作符等;

内置函数:定义和实现数据库内置的函数,例如内置的时间函数now()。

 2.8SQL引擎

SQL引擎负责普通SQL语句和PL/pgSQL的解析、分析、重写、计划、执行整个流程,流程图如下:

解析阶段

会根据语法规则将SQL语句文本生成解析树;

分析阶段

根据解析阶段生成的解析树执行语义检查,检查执行的操作是否合理,如检查查询的表是否存在等;

重写阶段

根据数据库中规则转换查询树,例如把视图展开为另外一个查询树;

计划阶段

由优化器对以上阶段生成的查询树进行逻辑上等价变换,然后基于代价模型选择一个代价最小的执行计划并生成相应的计划树;

执行阶段

据执行计划执行,并生成结果。

2.9存储引擎

Vastbase G100存储引擎实现行存、列存、CSN快照、锁管理器、空闲空间管理、大内存缓冲区管理、索引管理、日志管理、并行日志回收、增量检查点功能等。

(1)行存储

行存储是基于磁盘的存储引擎,存储格式的设计遵从段页式设计,存储结构需以页面(page)为单位,方便与操作系统内核以及文件系统的接口进行交互。

行存支持完整的事务系统,适用于交易型场景。

行存将数据按行组成tuple存储在页面上,必须按行读取数据,即使读取一列也必须读取整行数据。

在分析性的作业以及业务负载的情况下,数据库往往会遇到针对大量表的复杂查询,而这种复杂查询中,往往仅涉及一个较宽(列数较多)的列。此类场景下,行存储以行作为操作单位,会引入与业务目标数据无关的数据列的读取与缓存,造成了大量IO的浪费。

(2)列存储

列存储引擎将数据按列划分,每一列数据使用单独的文件进行存储。一般来说,一列的数据特征比较相似,适合压缩,因此列存数据的压缩比相对较高。当表中列数比较多,但是访问的列数比较少时,列存储可以按需读取列数据,大大减少不必要的读IO,提高查询性能。

(3)CSN快照

CSN(Commit Sequence Number)快照是一种用于实现多版本并发控制(MVCC)的机制。CSN 是一个64位的无符号自增长整数,它作为逻辑时间戳在数据库内部使用,模拟数据库操作的时序。

CSN 快照帮助确定哪些数据版本对当前事务可见,哪些不可见,从而允许多个事务并发地访问数据库而不会发生冲突。

(4)锁管理器

锁管理器负责处理并发事务中的锁请求和释放,确保数据的一致性隔离性

 (5)SM机制

FSM(Free Space Map)机制用于管理存储介质上空闲空间。FSM 通过一个专门的数据结构来跟踪和记录存储设备上的空闲空间块,从而优化空间的分配和回收,提高存储效率。

 (6)大内存缓冲区

通常指共享缓冲区(Shared Buffers),它用于缓存数据页以减少对磁盘的读写操作,从而提高数据库查询和事务处理的性能。

(7)索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。Vastbase G100支持唯一索引主键索引等多种索引方式,支持BTree、Hash、GIST、GIN等多种索引类型。通过索引管理,够确保数据库查询的高效执行,保持数据的一致性和完整性。

(8)日志管理

日志管理是确保数据库健康运行和便于故障排查的重要环节。日志文件记录了数据库的操作历史、系统事件、错误信息以及性能相关的数据。

(9)并行日志回收

并行日志回收(Parallel Log Recovery)允许多个线程同时执行日志回收(也称为 WAL 回收)。日志回收是指将不再需要的预写日志(WAL)文件从系统中删除的过程,这通常是因为这些日志所记录的数据变更已经被提交并且不再需要用于恢复。

(10)增量检查点

增量检查点(Incremental Checkpoint)是一种优化的检查点机制,用于提高数据库的运行效率和性能。与传统的全量检查点相比,增量检查点不需要在每次检查点时将所有脏页写入磁盘,而是只处理自上次检查点以来发生变化的数据页。

在物理架构中,介绍了数据库的文件目录、各个目录的主要作用、数据目录下各个文件的作用,帮助您初步认识数据库的物理结构。

在系统架构中,Vastbase G100通过驱动、工具、管理等,实现高安全、高性能、低成本等特性。

通过对Vastbase G100的部署架构、逻辑架构、物理架构和系统架构的了解,能确保数据库系统高效、可靠和安全运行。

更多海量数据黑科技,敬请锁定《Vast+产品展厅》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/315597.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Python实现心脏病数据可视化DEA+预测【500010103.1】

一、数据说明 该心脏病数据集是通过组合 5 个已经独立可用但以前未合并的流行心脏病数据集来策划的。在这个数据集中,5 个心脏数据集结合了 11 个共同特征,使其成为迄今为止可用于研究目的的最大心脏病数据集。 该数据集由 1190 个实例和 11 个特征组成…

PVE虚拟机隐藏状态栏虚拟设备

虚拟机启动后,状态栏会出现一些虚拟设备,点击弹出会导致虚拟机无法使用。 解决方案: 1、在桌面新建disable_virtio_removale.bat文件,内容如下: ECHO OFF FOR /f %%A IN (reg query "HKLM\SYSTEM\CurrentContro…

低代码+定制物资管理:创新解决方案探析

引言 在当今快速变化的商业环境中,企业面临着不断增长的挑战,如提高效率、降低成本、满足客户需求等。为了应对这些挑战,企业需要不断创新并采用先进的技术解决方案。在这样的背景下,低代码开发和定制化物资管理成为了引领企业变…

Spark-机器学习(7)分类学习之决策树

在之前的文章中,我们学习了分类学习之支持向量机,并带来简单案例,学习用法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。…

selenium在Pycharm中结合python的基本使用、交互、无界面访问

下载 下载与浏览器匹配的浏览器驱动文件,这里一定注意的是,要选择和浏览器版本号相同的驱动程序,否则后面会有很多问题。 (1)浏览器(以google为例)版本号的查询: 我这里的版本号是1…

MySQL数据库安装——zip压缩包形式

安装压缩包zip形式的 MySQL 8数据库 一 、先进入官网下载 https://dev.mysql.com/downloads/mysql/ 二、解压到某个文件夹 我解压到了D:\mysql\mysql8 下面 然后在这个文件夹下手动创建 my.ini 文件和 data 文件夹 my.ini 内容如下: 注意 basedir 和 datadi…

vue做导入导出excel文档

系统中经常会遇到要实现批量导入/导出数据的功能,导入就需要先下载一个模板,然后在模板文件中填写内容,最后导入模板,导出就可能是下载一个excel文件。 1、导出 新建一个export.js文件如下: import {MessageBox,Mes…

文件摆渡:安全、高效的摆渡系统助力提升效率

很多组织和企业都会通过网络隔离的方式来保护内部的数据,网络隔离可以是物理隔离,也可以是逻辑隔离,如使用防火墙、VPN、DMZ等技术手段来实现,隔离之后还会去寻找文件摆渡方式,来保障日常的业务和经营需求。 进行网络隔…

线上社交app的搭建,圈子社交系统,小程序+app+H5三端,源码交付,支持二开!

在科技飞速发展的大背景下,年轻人社交不再局限于面对面,线上社交app已深入各大年轻人的手机中。相比于传统交友方式,线上社交app为用户提供了更加新奇的交友体验。同时,它还可以吸引更多的朋友,提高用户的整体交友体验…

Spring Boot整合Redisson的两种方式

项目场景 Spring Boot整合Redisson的两种方式,方式一直接使用yml配置,方式二创建RedissonConfig配置类。 前言 redisson和redis区别: Redis是一个开源的内存数据库,支持多种数据类型,如字符串、哈希、列表、集合和有序…

python-pytorch 如何使用python库Netron查看模型结构(以pytorch官网模型为例)0.9.2

Netron查看模型结构 参照模型安装Netron写netron代码运行查看结果需要关注的地方 2024年4月27日14:32:30----0.9.2 参照模型 以pytorch官网的tutorial为观察对象,链接是https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html 模型代…

数码摄影色彩构成,数码相机色彩管理

一、资料描述 本套摄影色彩资料,大小58.54M,共有6个文件。 二、资料目录 《抽象彩色摄影集》.阿瑟.pdf 《色彩构成》.pdf 《色彩学》.星云.扫描版.pdf 《摄影色彩构成》.pdf 《数码相机色彩管理》.pdf 数码摄影进阶之4《色彩篇》.pdf 三、资料下…

Qt 把.exe打包成安装文件形式

目录 1.下载工具 Qt Installer Framework2.将bin文件添加到环境变量3.拷贝startmenu示例-备用4.准备Qt Release打包好的程序5.把Release打包好的程序放到packages\org.qtproject.ifw.example\data文件夹下6.生成安装包7.修改安装包图标8.修改主程序程序安装引导-创建快捷键9.添…

FFmpeg下载教程(Windows版)

文章目录 下载地址步骤 下载地址 https://ffmpeg.org/download.html 步骤

win c++使用lua环境配置 5.3.5版本

编译lua 下载lua源码,github仓库 使用vs编译源码,新建一个静态库项目(只会生成lib文件),想要dll的话就新建dll项目(有一个lib文件和dll文件) 把lua源码下面的文件夹都是,复制到vs项目中 lib目录是我手动…

iOS - 多线程-读写安全

文章目录 iOS - 多线程-读写安全1. 多读单写1.1 场景1.2 实现方案1.2.1 pthread_rwlock:读写锁1.2.1.1 示例 1.2.2 dispatch_barrier_async:异步栅栏调用1.2.2.1 示例 iOS - 多线程-读写安全 假设有一个文件,A线程进行读取操作,B…

牛客社区帖子分页显示实现

下图是前端分页的组件: 下面是对应的静态html页面,每一个方块,都是一个a标签,可以点击,执行的链接是/community/index,GET请求,拼接的参数是current,也就是pageNum,只需…

ACE框架学习3

ACE Acceptor-Connector框架 该框架实现 Acceptor-Connector 模式,该模式解除了“网络化应用中的协作对端服务的连接和初始化”与“连接和初始化之后它们所执行的处理”的耦合。Acceptor-Connector 框架允许成用独立于它们所提供的服务来配置其连接布局的关键属性。…

【idea】idea 中 git 分支多个提交合并一个提交到新的分支

一、方法原理讲解 我们在 dev 分支对不同的代码文件做了多次提交。现在我们想要把这些提交都合并到 test 分支。首先我们要明白四个 git 操作, commit:命令用于将你的代码变更保存到本地代码仓库中,它创建了一个新的提交(commit…

ubuntu 复制文件路径

前言 我打算搞一个ubuntu右键复制文件路径的插件,但是找不到,只能平替 这个配置,可以把文件拖拽到cmd窗口,然后就直接cmd输出文件路径 配置 cd ~ vim .bashrc 在文件结尾添加 cdd () { ddirname "$1"; echo …