GaussDB:面向未来的企业级数据库解决方案 五

举报
jesse521902 发表于 2025/10/15 17:21:42 2025/10/15
【摘要】 GaussDB:面向未来的企业级数据库解决方案在数字化转型的浪潮中,企业对数据存储、管理和分析的需求不断增长。作为华为推出的高性能分布式数据库,GaussDB以卓越的技术优势和广泛的适用性,正在成为企业数字化转型的核心工具。本文将为您深入解析GaussDB的核心优势以及它为何能够胜任现代企业的多样化需求。 1. 高性能与高可用性GaussDB专为大规模事务处理和复杂数据分析而设计,支持百万...

GaussDB:面向未来的企业级数据库解决方案

在数字化转型的浪潮中,企业对数据存储、管理和分析的需求不断增长。作为华为推出的高性能分布式数据库,GaussDB以卓越的技术优势和广泛的适用性,正在成为企业数字化转型的核心工具。本文将为您深入解析GaussDB的核心优势以及它为何能够胜任现代企业的多样化需求。


1. 高性能与高可用性

GaussDB专为大规模事务处理和复杂数据分析而设计,支持百万级别的并发连接。无论是金融交易还是实时大数据分析,GaussDB都能保证毫秒级响应时间,同时提供99.999%的高可用性。这种强大的性能表现得益于以下技术特点:

  • 分布式架构:GaussDB采用分布式架构,能够轻松扩展计算和存储资源,满足企业不断增长的数据处理需求。
  • 多活部署:支持跨区域多活部署,即使在极端情况下也能保障业务连续性,避免单点故障。
  • 智能优化器:内置AI驱动的SQL优化器,可根据工作负载动态调整查询计划,显著提升查询效率。

2. 企业级安全与合规

在当今数据隐私和安全备受重视的时代,GaussDB为企业提供了全方位的安全保障:

  • 全链路加密:从数据传输到存储,GaussDB均采用先进的加密技术,确保数据在任何环节都不会泄露。
  • 细粒度权限管理:支持基于角色和用户的精细权限控制,帮助企业实现数据访问的最小化授权原则。
  • 合规认证:GaussDB符合GDPR、ISO 27001等国际标准,帮助企业轻松满足行业监管要求。

3. 多样化的场景支持

作为一种通用型数据库,GaussDB不仅能胜任传统的关系型事务处理(OLTP),还擅长大规模数据仓库和分析场景(OLAP)。以下是它在不同场景中的应用亮点:

  • OLTP场景:适用于高频交易系统(如银行核心系统、电商平台订单管理)以及ERP/CRM系统。
  • OLAP场景:通过列式存储和MPP(大规模并行处理)技术,GaussDB能够快速处理TB甚至PB级别的数据分析任务。
  • 混合负载:支持HTAP(混合事务与分析处理),在单一平台上同时满足事务处理和实时分析需求,降低系统复杂性和成本。

4. 生态兼容与平滑迁移

GaussDB秉承“开放兼容”的理念,支持多种主流数据库协议和工具,如Oracle、MySQL等。这使得企业能够以最低成本实现从传统数据库到GaussDB的无缝迁移。此外,华为还提供了一系列自动化迁移工具和服务,帮助企业大幅缩短迁移周期。

  • 兼容性:高度兼容SQL标准及第三方工具,开发者无需额外学习即可上手使用。
  • 迁移工具:包括数据迁移、结构转换、性能调优等功能,极大地简化了迁移过程。
  • 持续支持:华为提供全面的技术支持,帮助企业解决迁移过程中遇到的问题。

5. 智能化运维与低成本维护

传统的数据库管理往往依赖于人工操作,而GaussDB通过引入AI技术和自动化运维能力,大幅降低了运维难度和成本:

  • 自诊断与修复:GaussDB具备智能监控功能,可以实时检测潜在问题,并自动执行修复操作。
  • 弹性扩展:根据实际需求动态分配资源,避免资源浪费,从而优化总拥有成本(TCO)。
  • 可视化管理:提供直观的管理界面,让运维人员能够轻松掌控整个系统的运行状态。

1.	数据库对象管理及SQL语法1
由于疫情管控,某小区进行封锁,收集了RESIDENTS居民表,包含姓名、年龄、性别、楼栋信息。
--创建表
create table RESIDENTS(name varchar(20),age int,sex char(1),building int);--导入数据
insert into RESIDENTS VALUES('a',1,'m',02);
insert into RESIDENTS VALUES('b',3,'m',03);
insert into RESIDENTS VALUES('c',6,'f',05);
1、为了方便按楼栋给婴儿送纸尿裤,查出每栋age<1的数量,最后显示楼栋信息和对应数量
select building, count(*) cnt from residents r where r.age < 1 group by building;
2、由于每栋楼各个年龄段的人都有,故按age年龄段分组[0-18,[18-35),[35-55),[55-maxvalues)形成age_group,每个组命名group1,group2,group3,group4
	select age , case when age<18 then 'group1' 
	when age>=18 and age<35 then 'group2' 
	when age>=35 and age<55 then 'group3' 
	 else 'group4' end as age_group from residents;
select
	* ,
	case
		when age < 18 then 'group1'
		when age < 35 then 'group2'
		when age < 55 then 'group3'
		else 'group4'
	end as age_group
from
	residents r ;
3、age_group按每组人数多少排序,查询出age_group、人数、最大年龄、最小年龄、平均年龄(平均年龄向下取整)
	select  case when  age<18 then 'group1' 
	when  age>=18 and age<35 then 'group2' 
	when age>=35 and age<55 then 'group3' 
	 else 'group4' end as age_group,count(age) as "人数",
	max(age) as "最大年龄",min(age) as  "最小年龄",floor(avg(age)) as  "平均年龄"
	from residents group by age_group order by "人数" desc;
select
	case
		when age < 18 then 'group1'
		when age < 35 then 'group2'
		when age < 55 then 'group3'
		else 'group4'
	end as age_group,
	max(age),
	min(age),
	floor(avg(age))
from
	residents r 
group by age_group;

4、	由于需要每天要送食物,增加如下每个年龄段所需食物营养价值表,需要统计出该小区每天总营养值
 
select sum(case when age<18 then 5 when age>=18 and age<35 then 7 
	when age>=35 and age<55 then 6
	else 5 end) as "每天总营养值" from residents;
select
	sum(age_group)
from
	(
	select
		case
			when age < 18 then '5'
			when age < 35 then '7'
			when age < 55 then '6'
			else '5'
		end as age_group
	from
		residents r );

--如果需要计算每个人需要的总营养值如下:
select age,case when age<18 then 'group1'
				when age>=18 and age<35 then 'group2'
				when age>=35 and age<55 then 'group3'
				else 'group4' end as age_group,
			case when age_group='group1' then 5
				when age_group='group2' then 7
				when age_group='group3' then 6
				when age_group='group5' then 5
				end as nutrition_value from residents;
5、	按楼栋求出每栋楼所需营养值
select building,sum(case when age<18 then 5
					when age>=18 and age<35 then 7
					when age>=35 and age<55 then 6
					else 5 end) as "每栋楼所需营养价值"
					from residents group by building;
	select
	sum(
		case
			when age < 18 then '5'
			when age < 35 then '7'
			when age < 55 then '6'
			else '5'
		end ) as age_group, building
	from
		residents r 
	group by building ;

2.	数据库对象管理及SQL语法2
当前有一张订单表lineitem,具体字段如下
L_ORDERKEY BIGINT NOT NULL --订单key
L_PARTKEY BIGINT NOT NULL --配件key 
L_SUPPKEY BIGINT NOT NULL --供应商key
L_LINENUMBER BIGINT NOT NULL --流水号
L_QUANTITY float8 null --数量
L_EXTENDEPPRICE float8 NOT NULL --出厂价
L_DISCOUNT float8 NOT NULL --折扣
L_TAX float8 NOT NULL --税点
L_RETURNFLAG CHAR(1) NOT NULL --原返标志
L_LINESTATUS CHAR(1) NOT NULL --明细
L_SHIPDATE DATE NOT NULL --发货日期
L_COMMITDATE DATE NOT NULL --预计到达日期
L_ARRIVALDATE DATE NOT NULL --达到时间
L_ORDERSTRATEGY CHAR(32) NOT NULL --订单处理策略
L_TRANSPORTROUTE CHAR(32) NOT NULL --运输路径
L_COMMENT VARCHAR(64) NOT NULL --备注
--数据导入
 
1、创建分区表,根据上述字段信息创建分区表,按L_SHIPDATE分区,按年分1993,1994,1995,1996,1997,1998,1999,分区名称分别为L_SHIPDATE_1,第二个分区名称为L_SHIPDATE_2以此类推,使用L_ORDERKEY进行哈希分布,建表完成后执行上方数据导入代码,进行数据导入
create table lineitem(
L_ORDERKEY BIGINT NOT NULL ,
L_PARTKEY BIGINT NOT NULL , 
L_SUPPKEY BIGINT NOT NULL ,
L_LINENUMBER BIGINT NOT NULL,
L_QUANTITY float8 null,
L_EXTENDEPPRICE float8 NOT NULL,
L_DISCOUNT float8 NOT NULL ,
L_TAX float8 NOT NULL,
L_RETURNFLAG CHAR(1) NOT NULL ,
L_LINESTATUS CHAR(1) NOT NULL ,
L_SHIPDATE DATE NOT NULL ,
L_COMMITDATE DATE NOT NULL ,
L_ARRIVALDATE DATE NOT NULL ,
L_ORDERSTRATEGY CHAR(32) NOT NULL ,
L_TRANSPORTROUTE CHAR(32) NOT NULL ,
L_COMMENT VARCHAR(64) NOT NULL)
	distribute by hash(L_ORDERKEY)
	partition by range(L_SHIPDATE)
	(partition L_SHIPDATE_1 values less than ('1993-01-01 00:00:00'),
	partition L_SHIPDATE_2 values less than ('1994-01-01 00:00:00'),
	partition L_SHIPDATE_3 values less than ('1995-01-01 00:00:00'),
	partition L_SHIPDATE_4 values less than ('1996-01-01 00:00:00'),
	partition L_SHIPDATE_5 values less than ('1997-01-01 00:00:00'),
	partition L_SHIPDATE_6 values less than ('1998-01-01 00:00:00'),
	partition L_SHIPDATE_7 values less than ('1999-01-01 00:00:00'),
	partition L_SHIPDATE_8 values less than ('2000-01-01 00:00:00')
	);
2、查询表的schema名称,展示表名,schema名称
	select tablename,schemaname from pg_tables where tablename='lineitem';
或
	select c.relname,n.nspname from pg_class c ,pg_namespace n where c.relnamespace=n.oid and c.relname='lineitem';

select tablename,schemaname from pg_tables where tablename='lineitem';
3、产看表分布节点的oid,展示表名,nodeoids
	select relname,nodeoids from pg_class,pgxc_class where oid=pcrelid where relname='lineitem';
select relname,nodeoids from pg_class,pgxc_class where oid=pcrelid and relname='lineitem';
4、	查看表所在实例的信息
select relname,pgxc_node.* from pg_class,pgxc_class,pgxc_node where pg_class.oid=pgxc_class.pcrelid and cast(pgxc_class.nodeoids as varchar(20))=cast(pgxc_node.oid as varchar(20)) and relname='p_table';

select
	relname,
	pgxc_node.*
from
	pg_class,
	pgxc_class,
	pgxc_node
where
	pg_class.oid = pgxc_class.pcrelid
	and cast(pgxc_class.nodeoids as varchar(20))= cast(pgxc_node.oid as varchar(20))
	and relname = 'p_table';
3.	数据库连接
1、	创建user2用户,user2用户需要具备创建数据库的权限
create user user2 createdb password 'Huawei@123';
2、	查看用户的连接数上限
select rolname,rolconnlimit from pg_roles where rolname='user2';
3、	设置user2用连接数为100
alter user user2 connection limit 100;
4、	查询postgres用户连接数上限,显示库,上限数量
select datname,datconnlimit from pg_database where datname='postgres';
5、	查询postgres用户已使用的会话连接数
select count(datname) from pg_stat_activity where datname='postgres';
--如果查询已结束的会话数量,筛选state
select count(datname) from pg_stat_activity where datname='postgres' and state='idle';
6、	查看所有用户已使用的会话连接数
select
	count(datname)
from
	pg_stat_activity;
7、	查询库最大连接数
show max_connections;
8、查询会话状态,显示datid、pid、state
select datid,pid,state from pg_stat_activity;
4.	安全审计
1、	创建user3用户,密码’test@123’
create user user3 password 'test@123';
2、	给用户授予查看审计权限
alter user user3 with auditadmin;
3、	登录postgres,创建统一审计策略adt1,对所有数据库执行create审计操作
--切换到实例管理界面的参数管理模块,修改enable_security_policy为on;
--创建统一审计策略
create audit policy adt1 privileges create;
4、	登录postgres,创建审计策略adt2,对所有数据库执行select审计操作
create audit policy adt2 access select;
5、	登录postgres,创建表tb1,创建审计策略adt3,仅审计记录用户root,在执行针对表tb1资源进行的select、insert、delete操作数据库创建审计策略
--创建表
create table tb1(c1 int);
--创建资源标签标记tb1表
create resource label tb1_label add table(tb1);
--创建统一审计
create audit policy adt3 access select on label(tb1_label),insert on label(tb1_label),delete on label(tb1_label) filter on roles(root);

create audit policy adt3 access select on label(tb1_label),insert on label(tb1_label),delete on label(tb1_label) filter on roles(user3);
6、	为统一审计对象策略adt1,添加描述’audit policy for tb1’
alter audit policy adt1 comments 'audit policy for tb1';
7、	修改adt1,使之对IP地址为’10.20.30.40’的场景生效
alter audit policy adt1 modify(filter on ip('10.20.30.40'));
8、	禁用统一审计策略adt1
alter audit policy adt1 disable;
9、	删除策略adt1、adt2、adt3和相应的资源标签,级联删除用户user1
--删除审计策略
drop audit policy adt1,adt2,adt3;
--删除资源标签
drop resource label tb1_label;
--级联删除用户
drop user user1 cascade;
5.	存储过程
基于以下信息表,完成以下实验要求。
--创建表
CREATE TABLE APS_STUDENTS(LOGID SERIAL,STARTIME TIMESTAMP(0) NOT NULL,PRIMARY KEY(LOGID));
1、	编写存储过程,生成记录,传入学生个数,学生LOGID1000000开始,starttime为当前时间
create or replace procedure pro_s(num int)
as
begin
for id in 100000 .. (100000 + num-1) loop
insert into aps_students values(id,now());
dbe_output.print_line('id='||id); --|| 用于做字符拼接
end loop;
end;
/
create or replace procedure gen_stu(stunum int) is 
$$
declare
begin
for i in 1000000 .. 1000000+stunum :
  loop
      insert into APS_STUDENTS(LOGID, STARTIME) values(stunum, now());
  end loop;
end;
$$ pgplsql
2、	用上一操作初始化90000学生
call pro_s(9000);
3、	查出aps_students表中初始化学生个数
select count(*) from aps_students;
6.	触发器
本题根据教授详情表和部门表完成相应触发器创建使用
--创建表
create table teacher(id integer primary key,name varchar(50) not null,deptnd integer not null,tetle varchar(50) not null);
create table department(id integer primary key,name varchar(50) not null,number_of_senior integer default 0);

--导入数据
insert into department values(1,'physics',0),(2,'mathmetics',0),(3,'chemistry',0);
insert into teacher values(1,'tom',1,'associate professor'),(2,'bill',1,'professor'),(11,'eiston','3','associate professor');
1、	创建Tri_update_D触发器,如果修改Number_of_senior字段时提示“不能随便修改部门教授职称人数”,如果已经有了Tri_update_D触发器,则删除后再重建
--创建触发器函数
create or replace function print_info() returns trigger 
as 
$$
begin
	dbe_output.print_line('不能随便修改不能教授职称人数');
	return null;--返回null表示不允许修改,返回old表示可以修改
end;
$$ language plpgsql;

--当触发器存在时将触发器删除,然后创建触发器
drop trigger if exists Tri_update_D on department;
create trigger Tri_update_D before update of number_of_senior on department for each row execute procedure print_info();
2、	禁止触发器,修改DEPARTMENT表中D=1NUMBER_OF_SENIOR=10,并查出表中数据
--禁用触发器
alter table department disable trigger Tri_update_D;
--执行更新操作
update department set number_of_senior=10 where id=1;
--查询部门表,查看更新结果
select * from department;
3、	启动触发器,修改DEPARTMENT表中ID=1NUMBER_OF_SENIOR=20
--启动触发器
alter table  department enable trigger Tri_update_D;
--执行更新操作
update department set number_of_senior=20 where id=1;
--查询部门表,查看更新结果
select * from department;
7.	性能调优
通常的SQL优化会通过参数调优的方式进行调整,例如如下参数
set enable_fast_query_shipping = off;
set enable_stream_operator = on;
请根据以下表完成数据库优化
--建表
create table tb_user(stu_no int,stu_name varchar(32),age int,hobby_type int) distribute by hash(age);
--插入数据
insert into tb_user select id,'xiaoming'||(random()*50+10)::int,
(random()*50+10)::int,
(random()*5+1)::int
from (select generate_series(1,100000)id)tb_user;
1、	收集tb_user的统计信息
analyze tb_user;
2、	为下面两个查询语句创建索引,让执行计划和索引最合理
sql1:explain analyze select * from tb_user where age=29 and stu_name='xiaoming';
sql2:explain analyze select * from tb_user where  stu_no=100 and age=29;
--SQL1
select gs_index_advise('select * from tb_user where age=29 and stu_name=’'xiaoming'’');
create index age_name on tb_user(stu_name,age);
--SQL2
select gs_index_advise('select * from tb_user where stu_no=100 and age=29');
create index age_no on tb_user(stu_no,age);
3、	在上题的基础上,三种不同的方式使如下SQL不走索引
explain analyze select * from tb_user where stu_no=100 and age=29;
--1.通过hint干预优化不走索引
	explain analyze select /* + tablescn(tb_user)  */ * from tb_user where stu_no=100 and age=29;
--2.调大index开销
	set cpu_index_tuple_cost = 100000;
--3.直接禁用索引
	alter index age_no,age_name unusable;
--4.禁止优化器使用indexscan:
	set enable_indexscan=off

6. 可持续发展的技术支持

作为华为云的重要组成部分,GaussDB不仅继承了华为多年来在ICT领域的技术积累,还得到了全球生态伙伴的支持。随着云计算、边缘计算和物联网的快速发展,GaussDB也在不断创新,推出更多适应新场景的功能模块。

例如,针对AI训练与推理场景,GaussDB结合华为的昇腾系列芯片,实现了极致的性能加速;而在混合云架构下,GaussDB也展现了出色的灵活性,可助力企业构建统一的数据平台。


总结

作为一款现代化的企业级数据库,GaussDB凭借其高性能、高安全性、广泛场景适配以及智能化运维等优势,已成为众多行业头部企业的首选。它不仅能够应对当前复杂的业务挑战,还能伴随企业发展持续演进。

如果您正寻找一种能够支撑企业数字化转型的数据库解决方案,那么不妨深入了解GaussDB。相信它会成为您企业数据战略中的得力助手!

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。