-
一、前言SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。本系列将以《云数据库GaussDB—SQL参考》在线文档为主线进行介绍。二、CASE Expression(CASE表达式)介绍在GaussDB SQL中,CASE表达式(CASE Expression)是一个非常强大且常用的工具,可以用于在SQL中执行基于条件的操作。CASE表达式类似于IF-THEN-ELSE语句,但使用起来更加灵活,易于阅读和编写。CASE表达式包含两种形式,一种是简单形式,一种是搜索形式。下面将分别介绍这两种形式的写法、语法以及使用方法。三、GaussDB数据库中的简单CASE表达式1、基本概念简单CASE表达式是指在给定的表达式上执行基于等式的比较,如果表达式等于某个值,则执行某个操作。即依据input_expression与when_expression的匹配结果跳转到相应的result_expression。2、基本语法CASE input_expressionWHEN when_expression THEN result_expression[...n][ELSE else_result_expression]END;说明:其中,input_expression表示需要比较的表达式,when_expression等表示需要比较的值,result_expression等表示各个值相等时的结果,else_result_expression表示当input_expression不等于任何值时的默认结果Tip:CASE:简单CASE函数中支持子查询,但须注意input_expression与when_expression是可匹配的。 另外,如果没有取值为TRUE的input_expression = when_expression,则当指定ELSE子句时,DLI将返回else_result_expression;当没有指定ELSE子句时,返回NULL值。3、示例假设根据固定的工资定义职员级别,可按如下SQL执行:SELECT name,salary,CASE salaryWHEN 15000 THEN '初级'WHEN 20000 THEN '中级'WHEN 25000 THEN '高级'WHEN 30000 THEN '高级'WHEN 35000 THEN '高级'ELSE NULLEND AS levelFROM companyORDER BY salary;SQL语句解析:测试使用的是在GaussDB数据库中创建的一张company表。这段SQL是从“company”表中选择员工的名字(name)、薪水(salary)以及一个根据薪水等级分类的字段(level)。并使用“ORDER BY salary”语句将结果按照薪水从低到高的顺序进行排序。简单CASE表达式的工作方式:如果“salary”字段的值等于15000,那么“level”字段的值就是“初级”。如果“salary”字段的值等于20000,那么“level”字段的值就是“中级”。如果“salary”字段的值等于25000或30000或35000,那么“level”字段的值都是“高级”。如果“salary”字段的值不等于以上任何值,那么“level”字段的值就是NULL。四、GaussDB数据库中的搜索CASE表达式1、基本概念搜索CASE表达式是指在给定的表达式上执行基于不等式的比较,如果表达式满足给定的条件,则执行相应操作。即按指定顺序为每个WHEN子句的boolean_expression求值。返回第一个取值为TRUE的boolean_expression的result_expression。2、基本语法CASE WHEN boolean_expression THEN result_expression[...n][ELSE else_result_expression]END;说明:其中,boolean_expression等表示需要比较的条件,result_expression等表示满足对应条件时的操作结果,else_result_expression表示当expression不满足任何条件时的默认结果。Tip:boolean_expression:可以包含子查询,但整个boolean_expression表达式返回值只能是布尔类型。如果没有取值为TRUE的Boolean_expression,则当指定ELSE子句时,DLI将返回else_result_expression;当没有指定ELSE子句时,返回NULL值。3、示例假设根据工资的范围定义职员级别,可按如下SQL执行:SELECT name,salary,CASE WHEN salary < 15000 THEN '初级'WHEN salary BETWEEN 15000 AND 25000 THEN '中级'WHEN salary >25000 THEN '高级'ELSE NULLEND AS levelFROM companyORDER BY salary;SQL语句解析:这段SQL同上文,是从"company"表中选择员工的姓名(name)、薪水(salary)以及根据薪水等级进行分类(level)。搜索CASE表达式的工作方式:当薪水(salary)小于15000时,薪水等级被标记为"初级"。当薪水在15000和25000之间(包括15000和25000)时,薪水等级被标记为"中级"。当薪水大于25000时,薪水等级被标记为"高级"。如果以上条件都不满足,薪水等级被标记为NULL。综上,这个SQL语句的主要目的是获取员工信息,根据其薪水水平对其进行分类,并按照薪水的水平进行排序。五、小结GaussDB 中的CASE表达式是一个非常有用的工具,可以用于在SQL中执行基于条件的操作,实现条件判断和分支逻辑,进一步优化数据库查询和操作。在编写SQL代码时,可以根据具体的业务需求灵活选择简单形式或搜索形式来进行编写,这样可以大大提高编码效率和代码可读性。附:常见使用场景,如:二次定义标签、饱和度统计、计算指标、数据格式转换等。——结束
-
一、前言数据库与数据管理有着密切的关系,两者共同构成了一个完整的、可扩展的数据库管理系统。 数据库是用于存储数据的系统,为数据提供了安全、可靠、可扩展和可管理的存储环境。随着信息技术的飞速发展,数据已经成为企业的核心资产之一。在这个数据驱动的时代,数据管理成为了企业追求卓越的关键因素之一。GaussDB数据库作为一款具有高性能、高可用性和高可靠的关系型数据库管理系统,为数据管理提供了强大的支持。二、数据质量规则体系(衡量标准)数据管理最直接的目标是提高数据质量,最终目标是数据价值。主要驱动力是使组织能够从数据资产中获取价值。随着数据类型、数据来源的不断丰富以及数据量的飞速增长,企业面临数据质量问题的概率显著增加。数据质量是一个复杂问题,往往是多种因素综合作用的结果,解决数据质量问题要从机制、制度、流程、工具、管理等多个方面着手发力。数据质量涉及的范围也很广,贯穿业务的整个生命周期,从“数据产生->数据接入->数据存储->数据处理->数据输出->数据展示”,每个阶段都需要质量管理。在数据库系统建设的各个阶段都应该根据标准进行数据质量检测和规范化,及时进行管理,减少事后的治理工作。1. 为什么要进行数据管理举个下面的例子,很多刚入门的数据人,拿到数据后会立刻开始对数据进行各种统计、分析等,企图能立即发现数据背后隐藏的数据价值。然而忙活了一阵发现,并不能立刻提炼出太多有价值的信息。比如和数据打交道,可能会出现以下的场景:场景一:统计近 7 天用户的购买情况,结果从数据库中统计完发现,很多数据存在了重复记录,甚至有些数据统计单位不统一。场景二:查看报表,发现某一天的成交量暴跌,经过排查发现,是当天的数据缺失。场景三:一线坐席人员进行电销业务,拨打客户电话,看到了客户的敏感信息,被客户投诉。场景四:比如未进行数据备份,当数据被误操作、业务系统宕机时造成的数据丢失等。……造成这些情况的一个重要因素就是忽视了对数据的管理,没有制定合理的衡量标准,没有对数据进行审计和安全等管理。导致没有发现数据已出现的问题。所以,进行科学、客观的数据质量规则体系是非常必要且十分重要的。2、数据质量规则体系完整性:指数据在创建、传递过程中无缺失和遗漏,包括实体完整、属性完整、记录完整和字段值完整四个方面。完整性是数据质量最基础的一项,例如员工工号不可为空。唯一性:指同一数据智能有位移的标识符。体现在一个数据集中,一个实体只出现一次,并且每个唯一实体有一个键值且该键值只指向该实体。例如员工有且仅有一个有效工号。有效性:指数据的值、格式和展现形式符合数据定义和业务定义的要求。例如员工的国籍必须是国家基础数据中定义的允许值。一致性:指遵循同一的数据标准记录和传递数据和信息,主要体现在数据记录是否规范、数据是否符合逻辑。例如同一工号对应的不同系统中的员工姓名需一致。准确性:指真实、准确地记录原始数据,无虚假数据集信息。数据要准确反映其所建模的“真是世界”实体。例如员工的身份信息必须与身份证件上的信息一致。及时性:指及时记录和传递相关数据,满足业务对信息获取的时间要求。数据交付要及时,抽取要及时,展现要及时。数据交付时间过长可能导致分析结论失去参考意义。三、GaussDB数据库中如何实现数据管理在GaussDB数据库中,可从如下几方面进行数据管理(包含但不限于)。1、数据质量设计从语法、语义、语用三个方面去定义和衡量数据质量,在数据产生、数据加工以及数据使用的全过程中均需要符合其制定的标准和规范。如下图示:2、数据保护技术GaussDB通过多种数据保护手段和特性,保障存储在GaussDB中的数据安全可靠。传输加密(HTTPS):支持HTTP和HTTPS两种传输协议,为保证数据传输的安全性,推荐您使用更加安全的HTTPS协议。敏感操作保护:控制台支持敏感操作保护,开启后执行删实例等敏感操作时,系统会进行身份验证,进一步保证GaussDB配置和数据的安全性。SSL数据加密:可以使用SSL来加密数据库GaussDB和客户端的连接。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。3、数据存储GaussDB支持行列数据存储模型方式。进行数据库设计时,表设计上的一些关键项将严重影响后续整库的查询性能。表设计对数据存储也有影响:好的表设计能够减少I/O操作及最小化内存使用,进而提升查询性能。表的存储模型选择是表定义的第一步。客户业务属性是表的存储模型的决定性因素,依据下面表格选择适合当前业务的存储模型。存储模型使用场景行存点查询(返回记录少,基于索引的简单查询)。增删改比较多的场景。列存统计分析类查询 (group , join多的场景)。4、数据加密模型全密态数据库使用多级加密模型,不同加密场景中密钥的功能如下:数据:密态数据库对SQL语句中属于加密列的数据进行加密,对数据库服务端返回的属于加密列的查询结果进行解密。列密钥:数据由列密钥进行加密,而列密钥由主密钥加密。列密钥密文存储在数据库服务端。主密钥:由外部密钥管理生成并存储,数据库驱动会自动访问外部密钥管理,以实现对列密钥进行加解密。5、数据备份GaussDB支持多种数据备份和恢复方式,如全量备份、增量备份和差量备份等。这些备份和恢复方式可以保证数据的一致性和可靠性,避免数据丢失和损坏。备份策略:全量备份:第一次的全量备份后,无论数据是否变化,第二次备份和第三次备份都会将所有的数据全部进行备份。增量备份:第一次的全量备份之后,第二次备份只会备份数据变化的数据,第三次备份只会备份第二次备份后数据变化的数据。差量备份:第一次的全量备份之后,第二次备份只会备份数据变化的数据,第三次备份会备份第一次全量备份后数据变化的数据。GaussDB会在数据库实例的备份时段中创建数据库实例的自动备份。系统根据您指定的备份保留期保存数据库实例的自动备份。扩容实例CN或者分片后,系统会进行一次自动备份。 用户还可以创建手动备份对数据库进行备份,手动备份是由用户启动的数据库实例的全量备份,会一直保存,直到用户手动删除。四、小结GaussDB数据库凭借其高性能、高可用性和高可靠的特点,为数据管理提供了强大的支持。企业应充分利用GaussDB数据库对数据管理的更多功能和优势,加强数据管理实践,不断提升数据质量、数据安全,为企业的发展创造更大的价值。另外,对于数据管理而言,数据库是一种其必不可少且功能强大的数据管理工具。数据管理工作除了依赖数据库外,更多的要结合企业的管理机制、制度、流程、第三方工具等。例如,建立数据管理体系、制定数据管理标准、加强数据使用者的培训、定期进行数据质量管理检查等。——结束
-
GaussDB for MySQL 支持哪几种数据库引擎
-
gaussdb 和 openGaussDB 有啥区别
-
GaussDB for mySQL 中InnoDB引擎 里的 undo log 有什么用
-
一、前言随着企业数据量的不断增长和业务需求的复杂性增加,选择一个高效、可靠且智能的数据存储和管理解决方案变得越来越重要。GaussDB是一种先进的关系型数据库管理系统,为企业提供了强大的数据处理能力,其物化视图(Materialized Views)功能在数据查询和管理方面具有重要作用。本文以GaussDB数据库为例,将简单介绍一下物化视图的概念、语法及其示例。二、概述物化视图实际上就是一种特殊的物理表,物化视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性较大,任何对视图的查询实际上都是转换为对SQL语句的查询,性能并没有实际上提高。而物化视图实际上就是存储SQL所执行语句的结果,起到缓存的效果。 物化视图在GaussDB数据库中有两种表现形式,分别是全量物化视图和增量物化视图。三、全量物化视图(GaussDB)GaussDB数据库中全量物化视图的概述:全量物化视图仅支持对创建好的物化视图做全量更新,而不支持做增量更新。创建全量物化视图语法和CREATE TABLE AS语法一致,不支持对全量物化视图指定NodeGroup创建。1、语法格式创建全量物化视图CREATE MATERIALIZED VIEW [ view_name ] AS { query_block };全量刷新物化视图REFRESH MATERIALIZED VIEW [ view_name ];查询物化视图SELECT * FROM [ view_name ];删除物化视图DROP MATERIALIZED VIEW [ view_name ];2、示例1)创建测试表,准备测试数据--创建测试表DROP TABLE IF EXISTS company;CREATE TABLE company (id int4 PRIMARY KEY,name varchar(10) NOT NULL,age int4 NOT NULL,address varchar(20) NOT NULL,salary float4 NOT NULL);--插入测试数据INSERT INTO company VALUES (1, 'Paul', 32, 'California', 20000);INSERT INTO company VALUES (2, 'Allen', 25, 'Texas', 15000);2)创建全量物化视图--创建全量物化视图CREATE MATERIALIZED VIEW v_test AS select count(*) as num from company;--查询物化视图结果SELECT * FROM v_test;3)再次向物化视图中源表插入数据,并刷新全量物化视图--再次向物化视图中源表插入数据INSERT INTO company VALUES (3, 'Teddy', 23, 'Norway', 20000);INSERT INTO company VALUES (4, 'ZhangSan', 30, 'BeiJing', 30000);--对全量物化视图做全量刷新REFRESH MATERIALIZED VIEW v_test;--查询物化视图结果SELECT * FROM v_test;4)删除物化视图--删除物化视图DROP MATERIALIZED VIEW v_test;四、增量物化视图(GaussDB)GaussDB数据库中增量物化视图概述:增量物化视图顾名思义就是可以对物化视图增量刷新,需要用户手动执行语句完成对物化视图在一段时间内的增量数据进行刷新。与全量创建物化视图不同在于目前增量物化视图所支持场景较小,目前物化视图创建语句仅支持基表扫描语句或者UNION ALL语句。1、语法格式创建增量物化视图CREATE INCREMENTAL MATERIALIZED VIEW [ view_name ] AS { query_block };增量刷新物化视图REFRESH INCREMENTAL MATERIALIZED VIEW [ view_name ];查询物化视图SELECT * FROM [ view_name ];删除物化视图DROP MATERIALIZED VIEW [ view_name ];2、示例--创建增量物化视图(复用上面的源表company)CREATE INCREMENTAL MATERIALIZED VIEW v_test2 AS SELECT * FROM company;--查询物化视图结果SELECT * FROM v_test2;--插入数据INSERT INTO company VALUES (5, 'LiSi', 28, 'ShangHai', 35000);--增量刷新物化视图REFRESH INCREMENTAL MATERIALIZED VIEW v_test2;--查询物化视图结果SELECT * FROM v_test2;--删除物化视图DROP MATERIALIZED VIEW v_test2;五、物化视图的不足与注意事项1、物化视图的不足物化视图也存在一些不足之处:物化视图需要占用额外的存储空间来存储查询结果,这可能会增加数据库的维护成本。其次,物化视图可能无法实时更新,对于需要实时响应的业务需求可能不够灵活。此外,物化视图的创建和维护需要一定的计算资源和时间成本,对于大规模数据集和高并发查询场景可能存在一定的性能压力。2、物化视图注意事项在使用GaussDB数据库物化视图时,需要注意以下事项:应根据业务需求合理选择物化视图的创建时机和更新策略,避免不必要的计算和存储开销。应充分考虑物化视图的数据来源和查询范围,确保物化视图的数据准确性和完整性。需要关注物化视图的性能表现,对于可能出现性能瓶颈的场景,应采取相应的优化措施。应定期评估物化视图的效用,根据业务变化及时进行调整和优化。3、问题经验示例1)当删除物化视图中的源表时会报错,报错信息如下截图,可参考。2)增量物化视图目前不支持聚合函数,报错信息如下图,可参考。六、小结GaussDB数据库物化视图是一种重要的数据处理工具,它通过预先计算和存储查询结果,极大地提高了数据查询效率。物化视图的优点在于它们可以显著减少查询时间,提高数据处理速度,并支持复杂的查询和分析操作。另外,物化视图还具有可定制性,用户可以根据业务需求自定义查询结果和更新策略。最后,在实际应用中,应根据具体情况充分考虑其优缺点和使用注意事项,以实现最佳的数据管理效果。——结束
-
gaussDB是否能像mysql一样在windows和linux安装呢,如果可以是在哪里下载相关安装包呢
-
GaussDB架构介绍(二)从数据持久化存取层(DataNode)关键技术方案、全局事务管理层(GTM)关键技术方案、集群管理层(CM)关键技术方案、OM运维管理关键技术方案等方面介绍了GaussDB架构,本篇将从智能关键技术方案、驱动接口关键技术方案继续解读GaussDB架构。9 智能关键技术方案智能关键技术一:自治运维系统GaussDB 自治运维系统“DBMind”的整体系统框图如下图所示,包含四个维度:数据采集层数据采集层主要功能实现指标数据采集,采集频率分为秒级采集和分钟级采集。其中秒级采集包括操作系统资源信息采集和数据库实例信息采集,例如操作系统层面CPU、内存、IO读写、网络资源信息采集,数据库实例状态、数据库内关键指标(内存、连接数、TPS、QPS、读写频率等);分钟级采集包括审计日志采集、数据库日志采集和全量SQL流水采集。DBMind数据平台提供Agent进程用于采集上述指标;若客户系统配置普罗米修斯进行信息采集,DBMind提供openGauss-exporter,内置数据库多维度指标采集以及二次数据计算,实现与用户既有普罗米修斯平台对接。数据库采集端程序需要部署在同数据库物理机节点,数据库多节点集群环境中,每个物理节点部署一个Agent采集端(或者普罗米修斯采集端)。数据库采集端程序通常占用资源很少,通过配置文件可以制定不同指标采集频率,以免占用资源影响数据库业务正常运行。图1 DBMind整体系统框架图数据计算层数据计算层提供数据存储、数据分析及元数据管理能力。其中数据存储用于接收来自数据采集层发生来的数据,存储数据源可以是多种维度或者类型,包括普罗米修斯、时序数据库(OpenTSDB)、MongoDB、SQLite等,DBMind内置对接接口,AI模块与存储数据源的交互,获取数据并进行处理。DBMind默认提供SQLite数据库,方便普通开发者来使用AI自治功能;在企业业务中,存储层设计要复杂的多,可以使用多个开源组件组合使用,例如普罗米修斯+时序数据库,或者kafka+时序数据库等多种方案。若企业业务中,处理少量业务集群节点,可通过下面方案实现:图2 小规模节点管控层方案在图2方案,使用nginx进行业务分流,mgrsrv服务对数据进行初步处理后,将数据写入关系型数据库。基于可靠性考虑,对于三个组件,分别加入备机进行可靠性保护。若企业业务处理上万业务节点的数据,图2方案无法满足客户业务诉求。故在方案设计时,需要引入分布式消息中间件、数据库中间件(DDM),同时因为nginx挂载节点有上限,需要对mgrsvr进行分区管理。图3 大规模节点管控层方案如图3所示,consumer服务可以和mgrsvr部署在同一个节点上,mq集合代表分布式消息中间件,通常可以采用开源软件rocketmq或者rabbitmq,引入消息中间件目的是降低目标数据库的压力。DDM是华为云的数据库中间件,若采用开源软件,也可使用mycat或者dble等,可进行存储大规模被采集的数据。在整体业务角度,纵向通过分层设计,横向通过分区设计,保证全部业务可通过管控层完成数据处理。在数据计算层除了时序存储数据库外,还可以设计其他存储单元,例如算法模型库和故障规则库。其中算法模型库存储自治管理服务生成的AI模型,例如参数推荐训练模型;在算法模型库中,可以存储传统机器学习(例如监督学习)模型、强化学习模型。故障规则库是记录数据库常见故障案例,将这些案例通过拆解和分析,生成规则引擎。自治服务层自治服务层包含三个主要部分:SQL诊断和调优、自治安全、数据库智能运维。其中SQL诊断和调优提供多种SQL治理和调优能力,包括慢SQL发现、SQL表现评估、智能索引推荐、智能查询重写等服务。自治安全通过AI技术实现敏感信息发觉、SQL注入检测和异常行为分析。数据库智能运维功能实现在数据库系统、OS系统和数据库集群层面的运维和调优,其中数据库系统服务包括数据库参数智能推荐、智能巡检、数据库分布键推荐和智能业务调度;在操作系统层面,实现慢盘检测和恢复、网络丢包检测;在数据库集群层面,基于故障或者负载需求,提供自动扩缩容、异常节点修复服务。监控展示层DBMind提供监控展示层,通过WEB形式,方便用户直观感受运维管理带来的遍历。在展示界面方面,集成Grafana实现实施数据或指标的展示,同时AI趋势预测,给出后续时段的数据走向。告警界面展示系统中可能存在的问题或故障,分为致命、严重、一般,界面中只显示致命问题。为方便用户系统观察集群状态,提供健康指数报告和详细综合报告。健康指数报告给出当前系统的健康评分等级,默认80分以上属于运行健康状况,小于60分则存在严重隐患,急需修复。综合报告详细描述系统各维度信息,包括集群状态、负载运行情况、常见数据库指标项信息。智能关键技术二:库内AI引擎GaussDB 库内AI引擎架构如下图:图4 DB4AI架构图用户接口层在用户接口层,实现SQL-like语法,提供Create Model、Predict等关键字,支持AI算法训练和预测。当前支持的AI算法包括:GD(梯度下降法)、KMeans(聚类)、XGBoost、决策树等。查询优化层查询优化层提供AI训练执行计划和AI预测执行计划,该计划依据内部统计信息和AI算子调用关系,生成相应执行计划。可以把AI算子看做执行器中的计算单元,例如Join、AGG等,AI算子执行代价基于执行逻辑、获取的数据行数、算法复杂度共同决定。同时在执行计划生成后,可通过Explain语句查看详细的执行开销,分析路径选型的正确性。AI底座和执行层在AI底座中,提供超参优化能力,即用户不指定超参数或者指定超参数的范围,自动选择适合的参数,该功能极大提升用户使用的效率,同时达到最佳的训练性能。在执行器中,提供多种AI算子,例如GD算子可支持逻辑回归、分类;KMeans算子支持聚类。在每个算子实现过程中,遵循执行器算子实现逻辑,下层对接Scan算子,上次提供AI算子的训练或推理结果。在训练完成后,训练模型将实时保存到系统表中,用户可以查询gs_model_warehouse系统表来获取模型信息。存储层在存储层,DB4AI提供数据集管理功能,即用户可以抽取某个表或多个表中的列信息,组成一个数据集,用于后续模型训练。数据集管理功能类似git模式提供多版本管理,目的是保障训练数据的一致性。同时在这过程中,可通过特征处理和数据清洗保障数据的可用性。同时对已生成的模型进行管理,包括模型评估、定期模型验证、模型导入、模型导出等能力,在验证模型失效后,模型漂移功能可以进行模型刷新,保障模型可用。异构计算层DB4AI框架支持异构计算层,实现CPU和AI算力的统一调度,满足数据库语句执行和AI训练的完美结合。在实现方面,CPU算力,特指ARM及X86芯片,可用于基础机器学习算子调用及并行计算执行;AI算子,例如昇腾及GPU芯片,可用于重度分析算子(Join、AGG)及深度学习算子使用,加速大数据及多层网络场景下计算需求。智能关键技术三:智能优化器贝叶斯网络模型原理贝叶斯网络是一种概率图模型,拓扑结构通常为一个有向无环图。贝叶斯网络的优势在于能够利用条件独立假设对多变量数据进行建模,并且自适应变量之间的相关性,具体是指每个变量的概率分布只和与它直接连接的父亲节点有关。使用这种方法能够比基于简单的独立性假设的模型获得更高的建模准确率,也能够比完整的联合分布建模获得更高的执行效率。在关系数据表中,每一列数据都可以成为一个变量,比如下表中包含A,B,C三列数据:表1ABCA1B1C1A1B1C1A1B1C1A2B1C1A2B2C2A2B2C2分别使用基于独立性假设的单列建模和基于条件独立假设的贝叶斯网络计算查询 SELECT * FROM table WHERE A=A1 AND B=B1 AND C=C1的选择率:单列建模:P(A=A1, B=B1, C=C1)=P(A1)P(B1)P(C1)=0.5 * 0.67 * 0.67=0.22贝叶斯网络:P(A=A1, B=B1, C=C1)= P(A1)P(B1|A1)P(C1|B1)=0.5*1.0*1.0=0.5可以看出贝叶斯网络在列相关性强的场景下能够更加准确地估计出多列查询选择率(和基数)。贝叶斯网络结构搜索贝叶斯网络的拓扑结构决定于变量之间的互相关性,直观上看,将互相关性强的变量进行连接并计算条件概率有助于提高分布建模准确性。假设有两列数据A和B,互相关性定义如下:针对例1中的数据,可以计算出A和B列的互相关性:在本功能中,对于P(a,b),P(a)和P(b)的计算通过使用哈希表统计获得,首先计算单列统计频率,然后计算两列统计频率,最后扫描两列统计表并且通过访问单列统计表获得单列频率,使用公式计算出相关性。最后计算总体相关性。得到的临时表ab_mutual_correlation结构如下所示:表2countacountbcountab343341322遍历上述临时表,对每一行求得互相关性,然后求和之后就是A和B列的整体相关性。贝叶斯网络对于每个节点父亲节点的数量是没有要求的,但是父亲节点越多,条件概率建模的难度也越大,消耗的空间和时间代价也会相应变大。所以在本子系统中,我们只采用树型的网络拓扑结构。这种结构中每个节点只有一个父亲节点,所以只需要保存本节点可以另一个父亲节点的条件概率即可,示例如下:图5在有了树型限制之后,结构搜索空间就少了很多,现在的目标就是找到一颗总互相关性最大的生成树,这里本系统采用chow-liu算法,也是一种加权最大生成树算法,算法流程如下:图6 贝叶斯网络结构搜索流程图根据搜索出的贝叶斯网络结构,构造出包含所有边的字符串,比如”a,b,a,c”或者”a,b,b,c”传入贝叶斯网络算子进行模型创建。贝叶斯网络训练图7 贝叶斯网络训练流程图贝叶斯网络训练过程中,算子首先会遍历一遍样本数据,获得每列数据不同值统计;然后对于每列数据,根据是否是连续数据类型进行数据分桶或者高频值抽取以减小存储和计算代价;对数据分桶采用等高分桶,尽量使每个桶内的频度是相似的,每个桶中范围值下界被存储在数据列表中,NULL值单独作为一个值放在列表最后;连续值高频值抽取会将频度最高的K各元素放置在数据列表中,除此之外的其他元素都被表示为一个通配符号放在列表最后;为了减少查找匹配代价,字符串类型数据会存储一个额外的哈希值;列表中每个元素表示结构如下所示:typedef struct ValueInTuple { Datum data; Oid type; bool isnull; uint32_t hashval;} ValueInTuple;概率建模过程中,针对形如P(离散值|离散值)的条件概率使用概率表记录每种值的概率;针对P(离散值|连续值),将连续值通过范围分桶当做离散值处理;针对P(连续值|离散值),使用高斯分布对连续值分布进行建模;针对P(连续值|连续值),使用高斯分布对条件连续值进行离散化分桶处理,对目标连续值进行高斯分布建模。训练完成之后,将模型序列化成一个二进制字符串。贝叶斯网络模型推理图8 贝叶斯网络推理流程图贝叶斯网络从第一个位置开始获得一个未访问节点,如果该节点存在未访问父亲节点,那么就递归访问父亲节点;如果父亲节点都已经被访问,那么利用条件独立性假设,利用概率表或者是高斯函数局部计算出当前节点的条件概率并且和父亲节点的概率相乘作为联合概率。然后判断当前节点是否是叶子节点,如果是叶子节点则将联合概率和选择率相乘,否则继续寻找下一个未被访问过的节点。最后返回选择率。模型参数缓存策略在基数估计的时候需要获得相应的模型参数,这个过程需要从磁盘读取以及反序列化两种操作,涉及到磁盘访问以及内存申请操作,效率较低,所以在模型数量不多的情况下可以利用全局共享缓存将其存在内存中,下次访问效率就会变高,但是在模型数量变多之后就需要缓存替换策略以保证内存使用是可控的。本子系统采用的是异步批量替换策略,在模型访问亲和性高的场景下,当前一段时间所需要的模型都放置在内存中,不会带来额外的性能损失,访问申请的也都是共享锁支持高并发;当负载偏移之后,新的模型会被访问,从磁盘中被加载到内存,内存中的数量就会超过阈值,这种情况下系统按照每个模型的最近访问时间归一化之后的概率选择1/3的旧模型替换出内存。这种一次性替换多个模型的方法可以避免每次读操作都要申请互斥锁维护链表并且降低替换操作触发的次数。并发analyze场景通过互斥锁进行共享缓存访问控制。10 驱动接口关键技术方案接口驱动兼容开源openGauss, 支持JDBC、ODBC、Python、GO等主流数据库驱动接口,适用于Java/C/C++/python/go 应用程序开发者。对于高级开发者而言,亦可采用libpq动态库接口的方式,对数据库进行接入访问。以上内容为智能关键技术方案、驱动接口关键技术方案的相关内容,下篇图文将接着分享GaussDB云原生架构、关键技术方案的精彩内容,敬请期待!
Gauss松鼠会小助手2
发表于2024-06-13 14:26:54
2024-06-13 14:26:54
最后回复
yd_298094391
2025-06-16 13:01:02
2656 4 -
中奖结果公示感谢各位小伙伴参与本次活动,欢迎关注华为云DTSE Tech Talk 技术直播更多活动~本次活动获奖名单如下:请@Sakura、 于7月8日前在此问卷中反馈您的中奖邮寄信息~直播简介【直播主题】智能优化揭秘 - GaussDB数据库查询重写的自动挖掘与生成【直播时间】2024年6月26日 16:30-18:00【直播专家】王肇国 上海交通大学软件学院副院长Ethan 华为云数据库 DTSE技术布道师【直播简介】在数据库世界里,查询重写是提升性能的关键环节。现有系统依赖人工发现重写规则,过程缓慢且费时。而WeTune的诞生,彻底改变了这一现状!WeTune是一种革命性工具,能自动发现新重写规则,通过枚举和验证等效查询计划,大幅优化查询性能。加入我们的直播,共同探索数据库查询优化的前沿技术,见证性能提升的神奇瞬间!活动介绍【互动方式】直播前您可以在本帖留下您疑惑的问题,专家会在直播时为您解答。直播后您可以继续在本帖留言,与专家互动交流。我们会在全部活动结束后对参与互动的用户进行评选。【活动时间】即日起—2024年6月27日【奖励说明】评奖规则:活动1:直播期间在直播间提出与直播内容相关的问题,对专家评选为优质问题的开发者进行奖励。奖品:华为云定制T恤活动2:在本帖提出与直播内容相关的问题,由专家在所有互动贴中选出最优问题贴的开发者进行奖励。奖品:华为云定制Polo衫更多直播活动直播互动有礼:官网直播间发口令“华为云 DTSE”抽华为云定制雨伞等好礼。【注意事项】1、所有参与活动的问题,如发现为复用他人内容或直播间中重复内容,则取消获奖资格。2、为保证您顺利领取活动奖品,请您在活动公示奖项后2个工作日内私信提前填写奖品收货信息,如您没有填写,视为自动放弃奖励。3、活动奖项公示时间截止2024年6月29日,如未反馈邮寄信息视为弃奖。本次活动奖品将于奖项公示后30个工作日内统一发出,请您耐心等待。4、活动期间同类子活动每个ID(同一姓名/电话/收货地址)只能获奖一次,若重复则中奖资格顺延至下一位合格开发者,仅一次顺延。5、如活动奖品出现没有库存的情况,华为云工作人员将会替换等价值的奖品,获奖者不同意此规则视为放弃奖品。6、其他事宜请参考【华为云社区常规活动规则】。
-
GaussDB架构介绍(一)从GaussDB关键架构目标、GaussDB分布式架构、数据计算路由层(Coordinator)关键技术方案等三方面对GaussDB架构进行了介绍。本篇将从数据持久化存取层(DataNode)关键技术方案、全局事务管理层(GTM)关键技术方案、集群管理层(CM)关键技术方案、OM运维管理关键技术方案等方面继续解读GaussDB架构。4 数据持久化存取层(DataNode)关键技术方案Datanode节点主要负责数据的持久化和快速写入、读取。数据持久化采用物理日志wal,事务提交wal刷盘, 对外提供逻辑日志功能,反解析物理日志为SQL逻辑日志。图1 datanode数据持久化Astore:存储格式为追加写优化设计,其多版本元组采用新、老版本混合存储方式。当一个更新操作将老版本元组更新为新版本元组之后,如果老版本元组所在页面仍然有空闲空间,则直接在该页面内插入更新后的新版本元组,并在老版本元组中记录指向新版本元组地址的指针。在这个过程中,新版本元组以追加写的方式和被更新的老版本元组混合存放,这样可以减少更新操作的IO开销。然而,需要指出的是,由于新、老版本元组是混合存放的,因此在清理老版本元组时需要从混杂的数据中挑出垃圾数据,清理开销会比较大。同时,由于新版本元组位置相对老版本元组位置发生了变化,而索引中只记录了老版本元组的位置,因此容易导致索引膨胀。为了缓解索引膨胀这个问题,对于同一个页面内的更新,采用了HOT技术,将同一个记录的多个版本按从老至新的更新顺序给串连起来,但是这种从老至新的更新链顺序,对于并发的OLTP类短查询是效率是比较低,需要遍历的版本个数较多。Ustore:与astore相比,ustore的最大特点在于新、老版本记录的分离存储。当一个更新操作将老版本元组更新为新版本元组之后,直接在老版本元组的位置覆写新版本元组内容,同时,将老版本元组移到统一管理历史版本的undo区域。在这个过程中,既需要修改数据页面,也需要修改undo页面,更新操作开销较astore的追加更新稍大。但是,就如同垃圾分类回收一样,这样带来的好处也是显而易见的,在清理老版本元组时,不再需要遍历扫描主表数据,直接按需回收undo区域即可,垃圾清理开销较astore不仅大幅降低,而且稳定可控。同时,由于新版本元组复用老版本元组的物理位置,因此索引无需更新,索引膨胀得到有效控制。另外,在ustore中,多个版本的更新链按从新至老的顺序串连,对于并发查询更友好。总而言之,ustore更适合更新频繁的业务场景。5 全局事务管理层(GTM)关键技术方案GTM 仅处理全局时间戳请求, 64位CSN递增,几乎都是CPU ++和消息收发操作。不是每次都写ETCD, 而是采用定期持久化到ETCD 里, 每次写ETCD的CSN要加上一个backup_step (100w), 一旦GTM故障,CSN从ETCD读取出来的值保证单调递增。当前GTM 只完成CSN++, 预估可以支持200M/s 请求。GTM处理获取csn消息和csn++的消息, TCP 协议栈消耗CPU会非常严重,采用用户态协议栈提高GTM单节点的处理能力。未来架构演进完全去中心化,采用高精度时钟解决扩展性问题。5.1 单节点的事务图2 单节点事务处理流程关键设计:GTM 只维护一个CSN++, snapshot 只包含CSNDN 本地维护事务id, 维护id到CSN的映射(CSN_LOG)DN 本地GC的过程中回填CSN单shared读事务使用local snapshot:get local latest CSN + get prepared_xidwait csn commit in process(same as before)如果row.csn < localsnapshot.csn || xid in prepared_xid list 可见, 否则不可见5.2 跨节点事务图3 跨节点事务处理流程关键设计:第二阶段Commit 改为异步方式,只同步做prepare xact。(1.5 PC)DN 上行级别可见性判断:DN处于prepared状态的事务依赖对应CN上的事务是否提交,如果已经提交,且CSN比snapshot.CSN小,就可见对DN上处于prepared的事务,CN上的事务不处于提交状态,则必须判断是否残留状态,回滚。6 集群管理层(CM)关键技术方案GaussDB Kernel V5 集群管理层关键模块如下。图4 集群管理层组件设计图CM 组件提供了四种服务 CM Agent, CM Server, OM Monitor, cm_ctl,与各类实例服务组件(CN, DN, GTM 等)一起构成了整个数据库集群系统。cm_ctl通过命令行执行集群的启动、停止、状态查询、主备倒换、备机重建等功能除启动和停止外,主要通过与 CM Server 的消息传递执行命令可在任意节点执行并获取到相同的结果OM Monitor由系统定时任务拉起负责 CM Agent 的运行状态监控CM Agent由 OM Monitor 拉起负责拉起和停止所在节点的 CN, DN, GTM, CM Server(如果存在);监控实例状态并上报至 CM Server;执行 CM Server 下发的命令等对应 cm_agent 二进制文件,所有节点常驻服务CM Server由 CM Agent 拉起,是整个集群管理组件的大脑负责接收 cm_ctl 发送的命令并下发至 CM Agent;接收并处理 CM Agent 上报的实例状态,下发仲裁指令保证各类故障和异常场景下集群的可用性对应 cm_server 二进制文件,常驻服务CM与各类组件的主备数据同步、倒换、重建等机制高度融合,提供告警、重启、倒换、隔离等手段,赋予数据库实例故障恢复及自愈的高可用(HA)能力,保证数据的可靠性和完整性,最终实现集群对外的业务连续性。集群管理仲裁关键技术单节点故障在生产过程中,不可避免。CM 组件可根据探测到的状态进行仲裁,从而尽可能恢复集群可用性的过程。以某个主 DN 故障为例,一次典型的仲裁流程包括:① CM Agent 1探测DN主实例并发现故障② CM Agent 1持续上报实例故障信息至CM Server③ CM Server执行仲裁流程,选择DN备机升主④ CM Server下发升主命令至CM Agent 2⑤ CM Agent 2对实例执行升主操作图5 集群管理仲裁过程常见的故障类型包含磁盘故障、网络故障、下电故障、操作系统故障、其它故障(CPU故障)等。CM在选举过程中,遵从DN多数派。即,对于某一个DN分片来说,故障后的选主,需要得到大多数DN的投票,候选DN副本才可以被选中升主。仲裁规则主要依据两个原则:1) 任期(Term)大,且日志长的DN副本优先被选主 2) 同等条件下,静态主优先。CM辅助不同组件故障情况下恢复过程1. CN 故障 (集中式部署时,无CM节点)DDL 语句无法执行,DML 语句不受影响通过将故障 CN 剔除,可保障 DDL 语句不受影响仅支持集群内 CN 个数大于 3,且 1 个 CN 发生故障时剔除2. DN 故障单点故障可自动恢复主 DN 故障时,仲裁备 DN 升主继续提供服务备 DN 故障时,主 DN 将日志和数据同步至从备,业务不受影响3. 主 GTM 故障备 GTM 升主后继续提供服务4. 主 CM Server 故障备 CM Server 接受多数派 CM Agent链接,升主后继续提供服务异常检测从业界经验来看,数据库实例可能处于故障、僵死、亚健康等状态。这些状态的出现概率逐级降低,但检测难度逐级增高。尤其是如何区分亚健康状态和系统繁忙状态,具有较大的挑战性。CM 组件包含异常检测流程,可用于识别和处理网络不稳定、磁盘 IO 挂死、进程/线程僵死、进程频繁退出、实例状态时好时坏等场景,提高集群的稳定性和可用性。以 DN 短链接检测为例,CM Agent 按照固定时间间隔与 DN 实例新建链接。如果与某个主 DN 链接失败或通过新链接无法执行 SQL 语句,则认为该 DN 发生 1 次 Hang 异常。如果多次出现异常,则会触发 Hang 检测机制,将该 DN 实例杀死并执行主备切换。目前常见的异常检测项有:短链接建立通过短链接执行 SQL 语句IO 挂死内存占用异常基于Paxos协议复制实现DN副本自仲裁GaussDB Kernel V5 采用基于Paxos协议主备副本复制协议,实现DN副本的自仲裁功能。关键技术方案如下图所示,其中DCF为GaussDB Kernel V5 基于Paxos协议的一致性复制组件。需包含日志复制、自仲裁选主等功能。图6 DN自仲裁设计关键技术方案要点:1)DN 副本自仲裁,缩短仲裁链路,减小RTO 2)采用Paxos一致性协议,保证DN副本间的一致性,避免备机由于日志分叉产生增量重建。未来技术方案演进:1) DCF组件日志与数据库内核日志合一,减少对IO的占用。2) 采用Parallel Paxos协议或者多主的Paxos协议提升日志复制的吞吐量 3)通过RDMA/UB 网络优化主、备节点日志传输,提升日志复制性能。7 OM运维管理关键技术方案GaussDB Kernel V5 OM运维管理关键模块如下。OM 运维主要功能有:安装升级节点替换扩容、缩容自动告警巡检备份恢复、容灾日志分析系统在华为云的部署模式下,OM相关组件部署示意图如下:图7 华为云OM运维管理用户登录华为云Console,访问GaussDB Kernel V5的管控页面,输入想要的运维操作(购买实例)。华为云Console调用云管控服务,云管控服务根据用户输入的运维操作,如购买实例,进行相应的操作,如购买实例,云管控服务会创建虚拟机。云管控服务调用Mgr Agent,Mgr Agent会调用内置插件Adapter。Adapter会调用OM Agent。OM Agent会调用OM来完成具体的运维操作。通过OM Adaptor和OM Agent 采用适配器模式设计,对管控面提供了统一的北向接口。降低了管控面平台变更后重新对接的难度,更适用于云平台下的开发模式。8 安全关键技术方案安全关键技术一:密态等值查询密态等值查询属于密态数据库第一阶段方案,但是遵从密态数据库总体架构。密态数据库的总体架构示意图如下图所示。密态数据库的完整形态包括密码学方案和软硬结合方案。图8 密态数据库总体架构由于密态等值查询仅涉及到软件部分,仅需集成密态数据库总体架构的软件部分,其总体实现方案如下图所示。图9 密态等值查询总体方案从总体流程上来看,数据在客户端完成加密,以密文形式发送到GaussDB Kernel数据库服务侧,即需要在客户端构建加解密模块。加解密模块依赖密钥管理模块,密钥管理模块生成根密钥(RK, Root Key)和客户端主密钥(CMK,Client Master Key),有了CMK,可以通过SQL语法定义列加密密钥(CEK,Column Encryption Key)。其中,CMK由RK加密后保存在密钥存储文件(KSF,Key Store File)中,与RK一起由KeyTool统一管理;CEK则由CMK加密后存储在服务端,加密算法使用AES128和AES256。按照原有明文格式发送至服务端。当查询任务发起后,客户端需要对当前的Query进行解析,如果查询语句中涉及加密列,则对对应的列参数(加密列关联参数)也要进行加密(这里说的加密均需要为确定性加密,否则无法支持对应的查询);如果查询语句中不涉及加密列,则直接发送至服务端,无需额外的操作。在数据库服务侧,加密列的数据始终以密文形态存在,整个查询也在密文形态下实现。对于第一阶段密态等值查询解决方案,需要采用确定性加密,使得相同的明文数据获得相同的密文,从而支持等值计算。按照用户使用的流程,整体设计思路将围绕用户的使用步骤展开,即整个Use Case被切分成三部分。具体如下:生成客户端主密钥:用户需要在本地部署密钥管理工具(KeyTool),通过密钥管理工具相关指令来管理密钥,如创建或删除密钥;当前该工具底层集成华为公司KMC组件,生成的主密钥通过KMC进行保存和管理,并返回密钥信息给用户,方便后续调用和管理;记录CMK与CEK信息,在系统创建加密表:有了阶段1中生成的密钥信息后,为数据库设计专门的密钥创建语法,包括设计新的主密钥(CMK, Client Master Key)和列加密密钥(CEK, Column Encryption Key)语法;通过内核接口访问KeyTool中存储的主密钥并记录在系统中,列加密密钥则由主密钥在客户端完成加密后存储在数据库服务端;数据通过列加密密钥完成在客户端的加密,然后传输到服务端。为了做到查询对用户的透明,需要基于当前已有的创建表语法进行改造,主要进一步增强列的option信息;完成密态等值查询:为了完成密态等值查询需要在客户端和服务端完成配合设计。其中在客户端需要设计轻量级的解析模块,完成对查询语句的解析,定义密态等值查询所支持的规格。在客户端解析模块,需要识别所有涉及的属性是否包含加密列信息,如果不涉及则直接返回并将查询发送到服务端,如果涉及加密列,则需要按照对应的列加密密钥和加密算法加密参数信息,然后发送查询任务到服务端。在服务端,需要在优化器和执行器的各个执行逻辑过程中完成功能适配,特别的,数据在经过加密后,存储的数据类型发生变更,在服务端需要根据新的存储类型进行查询任务执行。安全关键技术二:账本数据库防篡改数据库的整体方案如图10所示,其最终形态是多个数据库之间的多方共识系统。我们基于GaussDB Kernel数据库,从存储层、应用层和传输层进行改造和增强。存储层为防篡改用户表增加校验信息,作为篡改校验的基础能力;应用层提供高效篡改校验接口,使用高性能校验算法,能够快速识别出用户表、用户历史表以及全局区块表的一致性,有效识别篡改行为;传输层增加多方共识执行接口,并内置CFG、BFT等共识算法,使得系统中,每一次对防篡改用户表的修改都需要取得大多数参与方的认可和记录,保证核心数据的防篡改、可追溯。图10 防篡改数据库总体方案账本数据库属于防篡改数据库第一阶段方案,是防篡改数据库的单集群形态,主要是实现了存储层、执行层的功能,提供了用于防篡改校验数据以及高效篡改校验算法。账本数据库作为防篡改数据库整体方案的基础功能和核心能力,需要紧密结合内核并利用分布式数据库的执行框架和通信流程。我们采用schema对防篡改用户表和普通表进行隔离。用户在防篡改schema中创建的表会成为防篡改用户表,防篡改用户表与普通表最大的差别是防篡改用户表会在创建时自动添加名为hash的系统列。hash列在用户插入数据时,自动通过单向加密哈希算法生成。同时在创建防篡改用户表时,会在blockchain系统schema中创建与之一一对应的用户历史表。用户对防篡改表进行DML操作,造成的行级数据更改记录会记录在对应的用户历史表中,同时会将sql语句记录在全局区块表中,作为操作的记录。防篡改用户表、用户历史表、全局区块表中的hash摘要信息可以相互校验,如果校验通过,则视为用户表未被篡改。需要特别说明的是,我们通过判断数据的一致性来识别篡改行为,不能防止恶意用户从文件层一致的修改多个文件以及越权用户通过sql语句对用户表进行修改。账本数据库的功能主要分为三个部分:防篡改用户表的DDL和DML操作、防篡改用户表的一致性校验以及校验数据的归档和修复功能。首先我们介绍防篡改特性的隔离级别,我们使用schema来隔离普通用户表和防篡改用户表。通过增加创建防篡改schema的语法: CREATE SCHEMA schema_name WITH BLOCKCHAIN,在防篡改schema中创建的表,均为防篡改用户表。其次是用户表的DDL和DML操作,在创建防篡改用户表的过程中,主要有两点修改:1. 对该表增加一个名为hash的伪列,该列类型为uuid16,该列记录和每一行数据的校验信息。2. 生成防篡改用户表对应的用户历史表,用户表中记录了行级数据的修改记录。以上内容为数据持久化存取层(DataNode)关键技术方案、全局事务管理层(GTM)关键技术方案、集群管理层(CM)关键技术方案、OM运维管理关键技术方案和安全关键技术方案的相关内容,下篇图文将接着分享智能关键技术方案、驱动接口关键技术方案的精彩内容,敬请期待!
-
GaussDB是华为自主创新研发的关系型数据库,基于华为在数据库领域20多年的战略投入,通过多维度的技术创新,在行业实践中构筑了高可用、高安全、高性能、高弹性、高智能的技术优势,在数据库替换场景中,具备易部署、易迁移的特性。作为国内当前唯一能够做到软硬协同、全栈自主的数据库,GaussDB已经在金融、政务、能源、交通等关键信息基础设施行业积累了丰富的实践经验,是企业数字化转型、核心数据上云、分布式改造的信赖之选。从本期开始,Gauss松鼠会将陆续推出GaussDB技术解读系列文章,带您了解GaussDB的架构及关键技术原理。本篇将从GaussDB 关键架构目标、GaussDB分布式架构、数据计算路由层(Coordinator)关键技术方案等三方面对GaussDB架构进行介绍。1 GaussDB 关键架构目标GaussDB在架构设计上,采用组件化原则,分为GaussDB Kernel内核和GaussDB Kernel OM两部分。在产品形态上,提供面向云数据库服务GaussDB的分布式安装包和集中式安装包,提供面向本地化安装的小型化安装包。根据华为云提供的调查报告,当前全球数据库市场增长超预期,云是数据库增长最重要驱动力。得益于云数据库的迅猛发展,AWS市场份额超越IBM,成为数据库市场空间第三位,聚焦公有云、混合云构筑具备竞争力的可商用分布式数据库版本,数据库已成为公有云Top收入来源,同时通过数据库服务能够更大地提升公有云服务粘性。GaussDB Kernel面向云服务提供GaussDB产品,主要客户包含金融(银行、证券、保险)行业、政府(政务云、财政等)和大企业客户。结合产品可信要求定义及可信实施策略分析的内容,以及业界数据库厂商前沿动态,GaussDB Kernel在云服务场景中的架构目标按照一下几个维度来展开:高性能:建立基于x86平台与鲲鹏平台的绝对性能领先,鲲鹏平台相对x86平台保证50%性能优势,达到单机170万tpmC,分布式全局强一致32节点1500万tpmC,承载用户关键业务负载;具备性能韧性能力,5倍压力下性能不抖动、十倍压力下系统不崩溃,同时具备抗过载逃生能力;具备大并发、低时延能力,单节点支持1万并发、单集群支持10万级并发访问请求,ms至秒级事务处理时延,支撑政企客户核心业务负载。云原生:通过GTM-Lite技术轻量化处理全局读一致性点与写一致性点,集群扩展性达到256节点,未来通过全球时钟技术演进,在跨Region全局一致性下去除单点瓶颈;面向业务陡增等业务场景,构建基于哈希聚簇的存储结构和弹性扩容方案,实现秒级存储节点扩缩容和业务无感的计算节点弹性伸缩;构建分布式备机只读技术,只读性能提升100%以上。高可用:AZ内主备高可用,1主多备,RPO=0、RTO<10s;同城跨AZ高可用,RPO=0、RTO<60s;跨Region容灾,RPO<10s、RTO<5min;提供备份恢复、PITR、闪回、ALT等企业级高可用特性;构建基于Paxos协议的多副本高可用和并行逻辑复制技术,实现RPO=0的同城双集群高可用容灾和基于流式复制的多地多中心容灾,保证机房级、区域级、城市级故障下的数据库高可用。高安全:继承可信实施策略中安全可信需求,从安全,韧性,隐私等维度构筑安全可信能力,结合业界安全技术前沿发展,设计全密态数据库和防篡改数据库,保证用户敏感数据免于泄露和篡改;构建数据库安全自治管控方法,识别和拦截攻击者的异常行为;构建从接入、访问控制、加密到审计全方位纵深防御的安全防护体系。高智能:面向云化场景故障运维诉求,基于AI技术,提供端到端自治运维管理能力,全面提升数据库产品服务可靠性和可用性;构筑自学习数据库内核,尤其是智能优化器,解决数据库内优化执行过程中计划不准、无法自适应等难题;结合业界前沿技术,构建库内AI引擎,基于SQL-like简易语法,提供数据库内置的机器学习训练和推理能力,为用户提供普惠AI;提供向量数据库能力,支撑盘古大模型、NAIE-NetGPT和GTS领域知识库等场景,提高大模型的预测效率。GaussDB Kernel提供的本地化版本的架构目标包括:高性能:支撑业务1千并发能力,性能达1000+ TPS;高可用:提供多种部署形态的能力:一主一备、一主多备等;高安全:支持数据库备份加密、网络连接安全管理及传输加密;支持三权分立,即数据库管理员、安全管理员、审计管理员权限职责分离;支持访问控制;高智能:提供丰富高效的DFx运维监测手段,后续朝向基于AI的自治运维调优方向发展,降低BCM相关产品或解决方案的运维成本,提升易用性;小型化:数据库安装包大小<25MB,且数据库刚启动后的底噪内存<250MB。2 GaussDB分布式架构2.1 GaussDB 分布式关键技术架构Coordinator: 负责接收SQL请求,路由分发请求到对应的数据节点。同时维护系统元数据(路由分片信息,表定义)。图1 Coordinator逻辑模型Datanode: 数据节点存储分片数据。副本复制采用Quorum/Paxos协议。图2 DN逻辑模型SECURITY: 安全子系统,主要包含了Kerberos认证,登录认证,安全审计,角色管理与访问控制,安全通信,透明数据加密,防篡改账本,全密态数据,数据脱敏等功能。图3 安全逻辑模型GTM: 全局事务管理器, 负责产生CSN号,提供全局统一快照。图4 GTM逻辑模型CM: 集群管理系统, 主要包括 CM Agent, CM Server和分布式配置中心。图5 CM逻辑模型OM运维子系统,主要包括了安装,卸载,启动,停止数据库,备份恢复,升级,扩容数据库,打补丁,节点替换, 巡检功能,故障定位定界,参数管理,初始化工具及本地客户端工具。图6 OM逻辑模型AI子系统,主要自治运维管理系统,如索引推荐、慢SQL诊断、分布键推荐;库内AI引擎;智能优化器,如智能基数估计和计划自适应选择。图7 AI逻辑模型驱动子系统,包括支持JDBC、ODBC、Python、GO等主流数据库驱动接口,适用于Java/C/C++/python/go 应用程序开发者。对于高级开发者而言,亦可采用libpq动态库接口和ecpg接口的方式,对数据库进行接入访问。图8 驱动逻辑模型关键模块2层逻辑模型:存储引擎模块:图9SQL引擎:图10兼容性和接口模块:图11基础组件:图12分布式管理:3 数据计算路由层(Coordinator)关键技术方案GaussDB Kernel V5版本的Catalog还是本地存储, 所以还需要考虑catalog的持久化问题.未来演进元数据解耦,Coordinator 无状态, 就不需要考虑Catalog持久化问题了。但是跨节点场景下的事务提交在Coordinator上还是要持久化的。路由信息:每个表数据共分16384个hash bucket来存储,每个DN对应存储若干个hash bucket的数据。SQL优化器模块会根据Query的条件自动剪枝DN。Pooler连接池:维护和每个DN连接的socket信息,缓存建立的连接。3.1 分布式优化器优化器的查询重写基础依赖于关系代数的等价变换。等价变换关系如下图所示:基于规则的查询重写,基本规则如下。常量化简:如 SELECT * FROM t1 WHERE c1=1+1; 等价于SELECT * FROM t1 WHERE c1=2;消除DISTINCT:CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT); SELECT DISTINCT(c1) FROM t1; SELECT c1 FROM t1;IN谓词展开:SELECT * FROM t1 WHERE c1 IN (10,20,30); 等价于SELECT * FROM t1 WHERE c1=10 or c1=20 OR c1=30;视图展开:CREATE VIEW v1 AS (SELECT * FROM t1,t2 WHERE t1.c1=t2.c2); SELECT * FROM v1; 等价于 SELECT * FROM t1,t2 WHERE t1.c1=t2.c2;条件下移:t1 join t2 on … and t1.b=5 等价于 (t1 where t1.b=5) join t2条件传递闭包:a=b and a=3 -> b=3消除子链接:如 select * from t1 where exists(select 1 from t2 where t1.a=t2.a); 等级于 select * from t1 (semi join) (select a from t2) t2 where t1.a=t2.a;…查询重写规则较多,在此不一一列举。在基于代价的查询优化技术上,主要关注三个关键问题。分别是:结果集行数估算、执行代价估算以及路径搜索。其核心目标是,为多个物理执行的代价进行评分,最后选择出一个最优的计划,输出到执行器。行数估算方面,通过analyze手段,收集基表的统计信息,统计信息包括:各个数据表的规模、行数以及页面数等。在表中,也会统计各个列的信息,包括distinct值(该列不相同的值的个数),空值的比例,MCV(most common value,用于记录数据倾斜情况)以及直方图(用于记录数据分布情况),根据基表统计信息,估算过滤、join的中间结果统计信息。未来将基于AI进行多维度统计信息收集,收集更准确的行数信息,以辅助更优的计划选择。执行代价估算方面,根据数据量估算不同算子的执行代价,各个执行算子的代价之和即为执行计划的总代价。算子的代价,主要包含几个方面:CPU代价、IO代价、网络代价(分布式多分片场景)等。未来需要根据物理环境的不同,调整不同算子的执行代价比例,同时通过AI技术构建更精准的代价模型。路径搜索方面,GaussDB Kernel V5采用自底向上的路径搜索算法,对于单表访问路径,一般有两种:全表扫描:对表中的数据逐个访问。索引扫描:借助索引来访问表中的数据,通常需要结合谓词一起使用。优化器首先根据表的数据量、过滤条件、和可用的索引结合代价模型来估算各种不同扫描路径的代价。例如:给定表定义CREATE TABLE t1(c1 int); 如果表中数据为1,2,3…100000000连续的整型值并且在c1列上有B+树索引,那么对于SELECT * FROM t1 WHERE c1=1; 来说,只要读取1个索引页面和1个表页面就可以获取到数据。然而对于全表扫描,需要读取1亿条数据才能获取同样的结果。在这种情况下索引扫描的路径胜出。索引扫描并不是在所有情况下都优于全表扫描,它们的优劣取决于过滤条件能够过滤掉多少数据,通常数据库管理系统会采用B+树来建立索引,如果在选择率比较高的情况下,B+树索引会带来大量的随机I/O,这会降低索引扫描算子的访问效率。比如SELECT * FROM t1 WHERE c1>0;这条语句,索引扫描需要访问索引中的全部数据和表中的全部数据,并且带来巨量的随机I/O,而全表扫描只需要顺序的访问表中的全部数据,因此在这种情况下,全表扫描的代价更低。多表路径生成的难点主要在于如何枚举所有的表连接顺序(Join Reorder)和连接算法(Join Algorithm)。假设有两个表t1和t2做JOIN操作,根据关系代数中的交换律原则,可以枚举的连接顺序有t1 × t2和t2 × t1两种,JOIN的物理连接算子有Hash Join、Nested Loop Join、Merge Join三种类型。这样一来,可供选择的路径有6种之多。这个数量随着表的增多会呈指数级增长,因此高效的搜索算法显得至关重要。GaussDB Kernel 通常采用自底向上的路径搜索方法,首先生成了每个表的扫描路径,这些扫描路径在执行计划的最底层(第一层),在第二层开始考虑两表连接的最优路径,即枚举计算出每两表连接的可能性,在第三层考虑三表连接的最优路径,即枚举计算出三表连接的可能性,直到最顶层为止生成全局最优的执行计划。假设有4个表做JOIN操作,它们的连接路径生成过程如下:单表最优路径:依次生成{1},{2},{3},{4}单表的最优路径。二表最优路径:依次生成{1 2},{1 3},{1 4},{2 3},{2 4},{3 4}的最优路径。三表最优路径:依次生成{1 2 3},{1 2 4},{2 3 4},{1 3 4}的最优路径。四表最优路径:生成{1 2 3 4}的最优路径即为最终路径。多表路径问题核心为Join Order,这是NP(Nondeterministic Polynomially,非确定性多项式)类问题,在多个关系连接中找出最优路径,比较常用的算法是基于代价的动态规划算法,随着关联表个数的增多,会发生表搜索空间膨胀的问题,进而影响优化器路径选择的效率,可以采用基于代价的遗传算法等随机搜索算法来解决。另外为了防止搜索空间过大,可以采用下列三种剪枝策略:尽可能先考虑有连接条件的路径,尽量推迟笛卡尔积。在搜索的过程中基于代价估算对执行路径采用LowBound剪枝,放弃一些代价较高的执行路径。保留具有特殊物理属性的执行路径,例如有些执行路径的结果具有有序性的特点,这些执行路径可能在后序的优化过程中避免再次排序。分布式执行计划生成方面,相关关键技术流程如图所示:图16 分布式执行计划生成3.2 分布式执行框架GaussDB Kernel V5 执行框架位于SQL优化器与存储引擎之间,负责根据优化器输出的执行计划,执行数据存取以及相关的计算操作,将相关结果返回到客户端。其目标是,更好地利用各个节点的计算资源,更快地完成执行任务,并返回结果。单节点执行引擎:GaussDB Kernel V5 支持行存表的行执行引擎,以及列存表向量化执行引擎,提供Adaptor算子(RowAdapter,VectorAdapter)支持行列存储的自适应切换。对于行执行引擎来说,经过逐层的算子处理,一次处理一个元组,直到再无元组为止,详细过程不在此处赘述。对于列执行引擎来说,一次处理一个batch,尽量读取更多的数据,减少IO的次数,提供高CPU的利用效率,流水线执行过程中,调用次数尽量少。执行算子主要功能详细列表如下。扫描算子(Scan Plan Node):扫描节点负责从底层数据来源抽取数据,数据来源可能是来自文件系统,也可能来自网络(分布式查询)。一般而言扫描节点都位于执行树的叶子节点,作为执行数的数据输入来源,典型代表SeqScan、IndexScan、SubQueryScan。控制算子(Control Plan Node):控制算子一般不映射代数运算符,是为了执行器完成一些特殊的流程引入的算子,例如Limit、RecursiveUnion、Union表3 控制算子物化算子(Materialize Plan Node):物化算子一般指算法要求,在做算子逻辑处理的时候,要求把下层的数据进行缓存处理,因为对于下层算子返回的数据量不可提前预知,因此需要在算法上考虑数据无法全部放置到内存的情况,例如Agg、Sort连接算子(Join Plan Node):这类算子是为了应对数据库中最常见的关联操作,Join表关联。线程池模型每个组件 CN, DN, GTM, CMS 都是独立进程模型, 每个进程内部采用线程池模型。ThreadPoolControler:线程池总控,负责线程池的初始化和资源管理ThreadSessionControler :会话生命周期管理ThreadPoolGroup:线程组,可以定义灵活的线程数量和帮核策略ThreadPoolListener: 监听线程,负责事件的分发和管理ThreadPoolWorker: 工作线程设计关键要点:线程池根据CPU的core分成多个thread group每个thread group里有一个listen thread和多个worker threadlistern thread负责监听一批活动连接,同时分配任务给worker threadworker thread以事务维度接受任务派发来执行本篇中,GaussDB架构从GaussDB 关键架构目标、GaussDB分布式架构、数据计算路由层(Coordinator)关键技术方案等三方面展开了介绍,下篇文章将从数据持久化存取层(DataNode)关键技术方案、全局事务管理层(GTM)关键技术方案、集群管理层(CM)关键技术方案等方面介绍GaussDB架构,敬请期待!
-
GaussDB是不是集OLAP+OLTP一体的数据库?
-
1. 介绍GaussDB 是一款由华为开发的企业级分布式数据库,具有高性能、高可用、高可靠性等特点,广泛应用于各种业务场景。本指南将介绍如何在 GaussDB 中创建数据库和数据表,修改表结构,并添加约束。2. 创建数据库和数据表2.1 创建数据库在 GaussDB 中创建数据库可以使用 `CREATE DATABASE` 语句。以下是一个创建名为 `example_db` 的数据库的示例:CREATE DATABASE example_db;2.2 创建数据表在创建数据库之后,可以使用 `CREATE TABLE` 语句来创建数据表。以下是一个创建名为 `employee` 的数据表的示例,该表包含员工的基本信息:CREATE TABLE employee (emp_id SERIAL PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),birth_date DATE,hire_date DATE,salary NUMERIC(10, 2));3. 修改表结构在实际使用中,可能需要对现有的数据表进行结构上的修改。可以使用 `ALTER TABLE` 语句来添加、修改或删除表中的列。3.1 添加列以下是一个向 `employee` 表中添加 `department_id` 列的示例:ALTER TABLE employeeADD COLUMN department_id INT;3.2 修改列以下是一个修改 `salary` 列的数据类型的示例:ALTER TABLE employeeALTER COLUMN salary TYPE DECIMAL(12, 2);3.3 删除列以下是一个删除 `birth_date` 列的示例:ALTER TABLE employeeDROP COLUMN birth_date;4. 添加约束为了确保数据的完整性和一致性,可以在表上添加各种约束,包括主键、外键、唯一性约束等。4.1 添加主键约束创建表时已经添加了主键约束。下面是一个单独添加主键约束的示例:ALTER TABLE employeeADD CONSTRAINT pk_emp_id PRIMARY KEY (emp_id);4.2 添加外键约束以下是一个为 `employee` 表中的 `department_id` 列添加外键约束的示例,该列引用 `department` 表中的 `dept_id` 列:ALTER TABLE employeeADD CONSTRAINT fk_departmentFOREIGN KEY (department_id) REFERENCES department(dept_id);4.3 添加唯一性约束以下是一个为 `employee` 表中的 `first_name` 和 `last_name` 列添加唯一性约束的示例:ALTER TABLE employeeADD CONSTRAINT unique_nameUNIQUE (first_name, last_name);5. 示例代码综合以上内容,以下是一个完整的示例代码,包括创建数据库、创建表、修改表结构和添加约束:-- 创建数据库CREATE DATABASE example_db;-- 使用新创建的数据库Use example_db-- 创建 department 表CREATE TABLE department (dept_id SERIAL PRIMARY KEY,dept_name VARCHAR(100) NOT NULL);-- 创建 employee 表CREATE TABLE employee (emp_id SERIAL PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),hire_date DATE,salary DECIMAL(12, 2),department_id INT,CONSTRAINT unique_nameUNIQUE (first_name, last_name));-- 修改表结构:添加列ALTER TABLE employeeADD COLUMN birth_date DATE;-- 修改表结构:修改列类型ALTER TABLE employeeALTER COLUMN salary DECIMAL(14, 2);-- 删除列ALTER TABLE employeeDROP COLUMN birth_date;6. 总结本文档介绍了如何在 GaussDB 中创建数据库和数据表,修改表结构,并添加各种约束。通过这些操作,可以有效地管理和维护数据库,确保数据的完整性和一致性。希望本文档对您的数据库管理工作有所帮助。本文作者:崔文
-
研发有些工作需要本地调试,但是GaussDB没有安装包,研发想用opengauss,想问一下这两种数据库是否兼容云上用的GaussDB版本是3.222.0,opengauss对应的版本应该选择哪个呢
-
华为云GaussDB是否支持多云环境下的部署和数据迁移?
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中 -
华为云开发者AI素养直播课·第四期2026/08/28 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;吴松明-华为云AI开发者案例开发专家
EduSwarm 是一个基于多智能体框架构建的 AI 教师团队协作平台:把备课、上课、作业、批改、学情等教学环节,交给多位专职 AI Agent(课件师、出题官、批改师、学情分析师等)协作完成。教师从「亲力亲为」变成「做决策」,学生只需凭课堂码加入即可实时跟课。
回顾中
热门标签