openGauss 数据库系统初识

阅读openGauss的源代码,首先从通信管理,SQL引擎,存储引擎三个子系统入手进行系统初识,代码略读,关键技术解读,后期逐步进行从全局功能到局部功能的细化解析。
openGauss 数据库系统初识_第1张图片
一、 通信管理
openGauss查询响应是使用“单一用户对应一个服务器线程”的客户端/服务器模型实现的,其处理客户端连接请求的模块叫做postmaster。客户端发来请求信息后,postmaster会启动新会话对该请求进行验证,验证成功后为其匹配后端工作线程。

postmaster源码目录
源码位置:openGauss-server/src/gausskernel/process/postmaster
openGauss 数据库系统初识_第2张图片
postmaster主程序
openGauss 数据库系统初识_第3张图片
二、 SQL引擎
SQL查询响应流程如图-2所示:
openGauss 数据库系统初识_第4张图片
查询解析parser
1) parser源码目录
源码位置:openGauss-server/src /common/backend/parser

2) parser主程序
openGauss 数据库系统初识_第5张图片
查询分流traffic cop
1) traffic cop源码目录
源码位置:openGauss-server/src/guesskernel/process/tcop
openGauss 数据库系统初识_第6张图片
2) traffic cop主程序
openGauss 数据库系统初识_第7张图片
3. 查询优化optimizer
4. 查询执行executor

三、存储引擎
openGauss支持行存储引擎、列存储引擎和内存引擎。

storage源码目录
源码位置:openGauss-server/src/gausskernel/storage
openGauss 数据库系统初识_第8张图片
storage主程序
openGauss 数据库系统初识_第9张图片
四、本篇特色总结
openGuass的查询响应在高并发下由于线程过多,切换和轻量级锁区域的冲突过大导致性能急剧下降,因此通过线程资源池化复用的技术解决了该问题,整体的设计思想是线程资源池化,并且在不同的连接直接复用。
traffic cop模块负责查询的分流,区分简单和复杂的指令进行不同处理。这种区分通过对简单命令执行最少的优化,将更多的时间投入到复杂的命令上,从而减少了处理时间。
openGuass设计支持多种存储引擎(行存储引擎、列存储引擎和内存引擎),可以根据不同场景来选择不同的存储模型,满足各种情境下的业务诉求。

你可能感兴趣的:(数据库,1024程序员节,openGauss)