openGauss体系结构_openGauss体系架构

一、内存结构介绍
1.shared_buffers:
数据库服务器的共享内存缓冲区。在数据库系统中的读写操作,都是针对内存中的数据,磁盘中的数据必须在处理前加载到内存,也就是数据库缓存中。
利用内存充当慢速磁盘与快速CPU之间的桥梁,从而加速IO的访问速度。

2.cstore_buffers:
列存所使用的共享缓冲区。在列存表为主的场景中,几乎不用shared_buffers。在此场景中,应减少shared_buffers,增加csstore_buffers。

3.MOT:
MOT 是内存引擎默认使用的缓冲区,openGauss的MOT内存引擎的索引结构以及整体的数据组织都是基于Masstree模型实现的,
其乐观并发控制和高效的缓存块利用率使得openGauss可以充分发挥内存的性能,
同时,在确保高性能的前提下,内存引擎有着与openGauss原有机制相兼容的并行持久化和检查点能力(CALC逻辑一致性异步检查点),确保数据的永久存储,
适合于高吞吐低时延的业务处理场景。

4.wal_buffers:
用于还未写入磁盘的WAL日志的共享内存。
SQL执行器在共享缓冲区中对数据页的操作会被记录到 WAL buffer 中,当客户端发起事务的commit请求时,
WAL buffer的内容将被WalWriter线程刷新到磁盘并保存在WAL日志文件中,确保那些已提交的事务都被永久记录,不会丢失。 
但需要注意的是,当walwriter的写操作跟不上时数据库实际的需求时,常规后端线程仍然有权进行WAL日志的刷盘动作。

5.maintain_work_mem:
maintenance_work_mem 一般是在openGauss执行维护性操作时使用,如:VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY等

### OPENGAUSS体系结构 OPENGauss 是一款高性能的关系型数据库管理系统,其架构设计借鉴了许多现代数据库的最佳实践。它的核心组件包括连接管理器、查询处理器、存储引擎和日志系统等部分[^5]。 - **Connect Manager**: 负责处理来自客户端的连接请求,并分配线程资源。 - **Query Processor**: 接收 SQL 查询后,经过解析 (Parser) 和优化 (Optimizer),最终生成高效的执行计划。 - **Storage Engine**: 提供底层数据持久化支持,负责实际的数据读写操作以及索引维护。 ### 数据类型 OPENGauss 支持多种标准 SQL 数据类型,同时也扩展了一些特有的复杂类型以适应更广泛的应用场景: - 常见数值类型如 `INTEGER`, `BIGINT` 等用于整数表示; - 浮点数类型有 `REAL`, `DOUBLE PRECISION`; - 字符串类型涵盖了固定长度 (`CHAR`) 和变长字符串 (`VARCHAR`); - 时间日期类型例如 `DATE`, `TIMESTAMP WITH TIME ZONE` 则提供了精确的时间戳记录能力[^3]. 对于大数据量或特殊需求场合下, OPENGauss 还引入了 JSONB 类型来高效存储半结构化文档数据. ### SQL 语法基础 SQL(Structured Query Language)作为关系型数据库的标准语言,在 OPENGauss 中同样适用。基本语法规则如下: #### DDL(Data Definition Language) 定义数据库对象的语言,比如创建表(Create Table), 修改表(alter table) 或删除(drop table)[^1]: ```sql CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(100), hire_date DATE DEFAULT CURRENT_DATE ); ``` #### DML(Data Manipulation Language) 用来操纵已存在的数据实例,主要涉及 insert/select/update/delete 操作: ```sql INSERT INTO employees(name,hire_date) VALUES('John Doe','2023-09-01'); SELECT * FROM employees WHERE hire_date >= '2023-08-01'; UPDATE employees SET name='Jane Smith' WHERE id=1; DELETE FROM employees WHERE id=2; ``` ### 表创建与维护 在 OPENGauss 中创建一张新表时需考虑字段名及其对应的约束条件(主键/外键),同时还可以设置默认值或者自动增长序列等功能特性。另外需要注意分区表的设计原则以便于大规模数据分析任务中的性能提升: ```sql -- 创建带分区的大规模交易流水表 CREATE TABLE sales_orders( order_id BIGSERIAL NOT NULL, product_name TEXT NOT NULL, quantity INT CHECK(quantity>0), sale_time TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(), CONSTRAINT pk_order PRIMARY KEY(order_id,sale_time)) PARTITION BY RANGE(sale_time); -- 添加子分区 CREATE TABLE sales_orders_2023 PARTITION OF sales_orders FOR VALUES FROM ('2023-01-01') TO ('2024-01-01'); ``` ### 索引优化 合理利用索引能够显著提高查询效率。除了常规 B-tree 结构外,OPENGauss 还实现了 hash,gist,gin 等不同类型满足多样化的检索需求[^2]. 此外针对全文本搜索应用也开发出了专门的支持机制[^4]: ```sql -- 创建普通 btree 索引 CREATE INDEX idx_employee_name ON employees USING BTREE(lower(name)); -- 对 jsonb 字段建立 gin 索引加速路径匹配 CREATE INDEX idx_product_details ON products USING GIN((details->>'specifications')); ``` ### 视图(Views) 视图是一种虚拟表,它并不真实存在而是基于一条或多条 SELECT 语句的结果动态计算得出。通过这种方式可以让用户专注于关心的部分而不必了解背后完整的实体模型细节: ```sql CREATE VIEW top_performing_products AS SELECT p.product_id,p.name,SUM(o.quantity)*p.price as revenue FROM products p JOIN orders o ON p.product_id=o.item_id GROUP BY p.product_id ORDER BY revenue DESC LIMIT 10; -- 使用视图简化业务逻辑表达 SELECT * FROM top_performing_products; ``` ### 存储过程 & 函数 存储过程是一系列预编译好的 sql 指令集合体,调用起来方便快捷而且减少了网络通信成本。函数则是返回单一结果值得代码片段,两者均增强了程序模块性和重用率[^1]: ```plpgsql -- 定义一个简单加法函数 CREATE OR REPLACE FUNCTION add_numbers(a INTEGER,b INTEGER RETURNS INTEGER LANGUAGE plpgsql IMMUTABLE STRICT COST 1 ROWS 1 AS $$ BEGIN RETURN a+b; END $$; DO $$ DECLARE total INTEGER :=add_numbers(7,8); BEGIN RAISE NOTICE '%',total;END$$; ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值