openGauss整个系统设计支持多个存储引擎来满足不同场景的业务诉求。当前openGauss存储引擎有以下3种:
(1) 行存储引擎。主要面向OLTP(online transaction processing,在线交易处理)场景设计,例如订货发货,银行交易系统。
(2) 列存储引擎。主要面向OLAP场景设计,例如数据统计报表分析。
(3) 内存引擎。主要面向极致性能场景设计,例如银行风控场景。
创建表的时候可以指定行存储引擎表、列存储引擎表、内存引擎表,支持一个事务里包含对3种引擎表的DML(Data Manipulation Language,数据操作语言)操作,可以保证事务ACID。
1) storage源码组织
storage源码目录为:/src/gausskernel/storage。storage源码文件如表1-9所示。
表1-9 storage源码文件
2) storage主流程
storage主流程代码如下:
/* smgr/smgr.cpp, 存储管理 */
...
/* 存储管理函数列表,包含磁盘初始化、开关、同步等操作函数 */
static const f_smgr g_smgrsw[] = {
/* 磁盘*/
{mdinit,
NULL,
mdclose,
mdcreate,
mdexists,
mdunlink,
mdextend,
mdprefetch,
mdread,
mdwrite,
mdwriteback,
mdnblocks,
mdtruncate,
mdimmedsync,
mdpreckpt,
mdsync,
mdpostckpt,
mdasyncread,
mdasyncwrite}};
/*
* 存储管理初始化
* 当服务器后端启动时调用
*/
void smgrinit(void)
{
int i;
/* 初始化所有存储相关管理器 */
for (i = 0; i < SMGRSW_LENGTH; i++) {
if (g_smgrsw[i].smgr_init) {
(*(g_smgrsw[i].smgr_init))();
}
}
/* 登记存储管理终止程序 */
if (!IS_THREAD_POOL_SESSION) {
on_proc_exit(smgrshutdown, 0);
}
}
/*
* 当后端服务关闭时,执行存储管理关闭代码
*/
static void smgrshutdown(int code, Datum arg)
{
int i;
/* 关闭所有存储关联服务 */
for (i = 0; i < SMGRSW_LENGTH; i++) {
if (g_smgrsw[i].smgr_shutdown) {
(*(g_smgrsw[i].smgr_shutdown))();
}
}
}
(1) 行存储引擎。主要面向OLTP(online transaction processing,在线交易处理)场景设计,例如订货发货,银行交易系统。
(2) 列存储引擎。主要面向OLAP场景设计,例如数据统计报表分析。
(3) 内存引擎。主要面向极致性能场景设计,例如银行风控场景。
创建表的时候可以指定行存储引擎表、列存储引擎表、内存引擎表,支持一个事务里包含对3种引擎表的DML(Data Manipulation Language,数据操作语言)操作,可以保证事务ACID。
1) storage源码组织
storage源码目录为:/src/gausskernel/storage。storage源码文件如表1-9所示。
表1-9 storage源码文件
模块 | 源码文件 | 功能 |
storage | access | 基础行存储引擎方法 |
cbtree | ||
hash | ||
heap | ||
index | ||
... | ||
buffer | 缓冲区 | |
freespace | 空闲空间管理 | |
ipc | 进程内交互 | |
large_object | 大对象处理 | |
remote | 远程读 | |
replication | 复制备份 | |
smgr | 存储管理 | |
cmgr | 公共缓存方法 | |
cstore | 列存储引擎 | |
dfs | 分布式文件系统 | |
file | 文件类 | |
lmgr | 锁管理 | |
mot | 内存引擎 | |
page | 数据页 |
2) storage主流程
storage主流程代码如下:
/* smgr/smgr.cpp, 存储管理 */
...
/* 存储管理函数列表,包含磁盘初始化、开关、同步等操作函数 */
static const f_smgr g_smgrsw[] = {
/* 磁盘*/
{mdinit,
NULL,
mdclose,
mdcreate,
mdexists,
mdunlink,
mdextend,
mdprefetch,
mdread,
mdwrite,
mdwriteback,
mdnblocks,
mdtruncate,
mdimmedsync,
mdpreckpt,
mdsync,
mdpostckpt,
mdasyncread,
mdasyncwrite}};
/*
* 存储管理初始化
* 当服务器后端启动时调用
*/
void smgrinit(void)
{
int i;
/* 初始化所有存储相关管理器 */
for (i = 0; i < SMGRSW_LENGTH; i++) {
if (g_smgrsw[i].smgr_init) {
(*(g_smgrsw[i].smgr_init))();
}
}
/* 登记存储管理终止程序 */
if (!IS_THREAD_POOL_SESSION) {
on_proc_exit(smgrshutdown, 0);
}
}
/*
* 当后端服务关闭时,执行存储管理关闭代码
*/
static void smgrshutdown(int code, Datum arg)
{
int i;
/* 关闭所有存储关联服务 */
for (i = 0; i < SMGRSW_LENGTH; i++) {
if (g_smgrsw[i].smgr_shutdown) {
(*(g_smgrsw[i].smgr_shutdown))();
}
}
}
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。