opengauss源码结构

opengauss

源码结构

opengauss内核是源于postgreSQL的。opengauss重点关注内核代码,opengauss的内核代码主要移动到gausskernel目录之下。它的src更为简洁。

openGauss-2.0.1\src

├─bin (gsql等命令的代码)

├─common (公共功能模块代码)

├─gausskernel (高斯内核代码)

├─include (头文件)

├─lib (库文件,包括)

├─makefiles (平台相关的make的设置值)

├─test (测试脚本)

└─tools (开发工具和文档)

opengauss在gausskernel中存放高斯内核核心功能

openGauss-2.0.1\src

├─gausskernel (高斯内核)

│ ├─bootstrap

│ ├─cbb

│ ├─dbmind (AI4DB和DB4AI功能模块)

│ ├─optimizer

│ ├─process (进程和线程管理模块)

│ ├─runtime (执行器模块)

│ ├─security

│ └─storage

在common中存放一些公共功能

openGauss-2.0.1\src

├─common (公共功能模块代码)

│ ├─backend

│ │ ├─catalog

│ │ ├─client\_logic

│ │ ├─lib

│ │ ├─libpq

│ │ ├─nodes

│ │ ├─parser

│ │ ├─pgxc\_single

│ │ ├─po

│ │ ├─port

│ │ ├─regex

│ │ ├─snowball

│ │ ├─tsearch

│ │ └─utils

│ ├─interfaces

│ ├─pgxc

│ ├─pl

│ ├─port

│ ├─template

│ ├─timezone

│ └─tutorial

openGuass在优化器目录中将commands和rewrite都放于优化器optimzier中

openGauss-2.0.1\src

├─gausskernel (高斯内核)

│ ├─optimizer

│ │ ├─commands

│ │ ├─geqo

│ │ ├─path

│ │ ├─plan

│ │ ├─prep

│ │ ├─rewrite

│ │ └─util

opengauss是单进程多线程模型的数据库,它在gausskernel目录下新建了process目录,增加了threadpool、datasource、globalplancache等模块

openGauss-2.0.1\src

├─gausskernel

│ ├─process

│ │ ├─datasource

│ │ ├─globalplancache

│ │ ├─job

│ │ ├─main

│ │ ├─postmaster

│ │ ├─stream

│ │ ├─tcop

│ │ └─threadpool (线程池)

openGauss在gausskernel目录下新建了runtime目录,其中的codegen用于生成更高性能的代码,vecexecutor用于提升sql引擎的计算性能。

openGauss-2.0.1\src

├─gausskernel

│ ├─runtime

│ │ ├─codegen (代码生成)

│ │ │ ├─codegenutil

│ │ │ ├─executor

│ │ │ ├─llvmir (LLVM动态编译)

│ │ │ └─vecexecutor

│ │ ├─executor

│ │ └─vecexecutor (向量化执行引擎)

│ │ ├─vecnode

│ │ ├─vecprimitive

│ │ └─vectorsonic

openGauss在gausskernel目录下还新建了security目录,保障数据安全

openGauss-2.0.1\src

├─gausskernel

│ ├─security

│ │ ├─gs\_policy

│ │ ├─iprange

│ │ └─keymanagement

还增加了dbmind目录,用于与AI结合

openGauss-2.0.1\src

├─gausskernel

│ ├─dbmind (AI4DB和DB4AI模块)

│ │ ├─deepsql (DB4AI: 库内AI算法)

│ │ │ └─madlib\_modules (开源的MADlib机器学习框架)

│ │ └─tools (AI4DB工具集)

│ │ ├─anomaly\_detection (数据库指标采集、预测与异常监控)

│ │ ├─index\_advisor (索引推荐)

│ │ ├─predictor (AI查询时间预测)

│ │ ├─sqldiag (SQL诊断发现)

│ │ └─xtuner (参数调优与诊断)
### OpenGauss 数据库中临时表的源码解析 #### 临时表的概念与作用 临时表是在会话期间创建的一种特殊类型的表,仅对该会话可见。当会话结束时,临时表及其数据会被自动删除。这种特性使得临时表非常适合用于中间计算结果的存储。 #### 源码中的实现细节 在OpenGauss数据库中,临时表的管理主要由`ExecEndRecursiveUnion`函数处理的一部分逻辑来完成[^1]。该函数不仅负责清理递归查询过程中产生的资源,还涉及到了临时表的相关操作。具体来说: - **内存分配与释放**:对于临时表而言,在其生命周期内可能会涉及到大量的内存分配和释放工作。为了提高效率并减少碎片化问题,OpenGauss采用了特定的数据结构来进行管理和优化。 - **哈希表的应用**:特别是在去重场景下,系统利用了高效的哈希表机制来跟踪已经存在的记录,从而确保同一事务内的唯一性约束得到满足。 ```sql CREATE TEMPORARY TABLE temp_table ( id INT PRIMARY KEY, name VARCHAR(50) ); ``` 这段SQL语句展示了如何在一个具体的会话中创建一个名为`temp_table`的临时表,并定义了一个整数类型的主键字段`id`以及一个字符串类型的字段`name`。 #### 日志记录方式 值得注意的是,尽管临时表具有短暂的存在周期,但在某些情况下仍然会产生相应的日志条目。这些日志通常是以行级别的形式被记录下来,而不是像普通持久化对象那样依赖于更底层的物理页变更描述[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xin_L_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值