• [问题求助] GaussDB对于存储不同类型的数据,如string、int、double、datetime等类型的数据压缩率分别是多少
    GaussDB对于存储不同类型的数据,如string、int、double、datetime等类型的数据压缩率分别是多少
  • [问题求助] GaussDB最多能存储多少行多少列的数据
    GaussDB最多能存储多少行多少列的数据
  • [技术干货] 再识华为云数据库——GaussDB
    一、前言华为云数据库 GaussDB是一款拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。同时具有PB级海量数据存储、实时高效访问、自动化运维等特点,广泛应用于金融、电信、物流、电商、政体等行业,成为行业最受欢迎的企业级数据库之一。GaussDB在经过多年的优化和升级,目前已经发展成为华为云的核心产品之一。其先进的技术架构和优秀的性能表现,在国际和国内市场上都赢得了良好的口碑和市场占有率。未来随着云计算技术和大数据应用不断发展,GaussDB将在市场竞争中不断突破创新,提升性能表现和可靠性,满足更多用户的需求。同时,GaussDB还将继续加强与其他华为云的产品的协同,进一步推进数字化转型和智能化建设。二、GaussDB: 立足创新与自研,助力企业核心数据安全高效上云云数据库GaussDB,一方面拥抱并兼容MySQL等生态,另一方面打造自己的openGauss生态,主要面向政企客户,强调高性能、高可靠、高安全等方面诉求。同时,打造数据库结构+ 应用+数据一站式迁移工具方案,让客户选型安心、迁移放心、管理省心,目前已经规模应用在金融、电 信、泛政府、能源、交通、互联网等各行业。1、选型:全业务场景、全开放生态、安全可信2、迁移:数据库结构+应用+数据一站式迁移3、管理:无缝协同上层应用,三、GaussDB: 基于华为openGauss开放生态打造的 金融级分布式数据库1、定位为企业级云分布式数据库,架构上着重构筑传统数据库的企业级能力和互联网分布式数据库的高扩展和高可用能力2、方案优势:高可用:同城AZ内节点故障,RPO=0,RTO<60s;保证数据0丢失。两地三中心异地容灾方案,跨Region数据实时灾备混合负载高性能:支持高吞吐强一致性事务能力,鲲鹏2路服务器,32节点1500万tpmC高扩展性:1000+计算节点在线扩展,卓越线性比高安全:业界首个纯软全密态数据库技术,实现数据从传输、计算到存储的全程加密全栈软硬自研可控,生态可控:业界领先的存储+网络+计算+openGauss自研开放生态3、案例:G行A、B类核心业务商用GaussDB1)此业务通过三个阶段完成切换:第一阶段,商密公文系统投产;第二阶段,贵金属业务投产;第三阶段,个人网上银行业务投产。AS Is(切换前的现状):To Be(切换后的状态):2)方案优势:高可用:同城单Region多AZ互联支持同城双活,金融级支持三层组网的管控高可用部署方案性能线性扩展:支持集群水平扩展,基本联机性能与Oracle持平弹性部署:部署实例及应用要快速响应业务需求,数据库支持容器化部署四、GaussDB(for MySQL): 基于开源生态打造的企业级自研云原生数据库1、存算分离,业界领先架构,释放华为软硬结合技术积累。2、方案优势:巅峰性能:多层级并行计算+NDP近数据计算下推,TPCH场景性能可达友商34倍海量存储高可靠:DB-inside分布式存储,由开源2T扩展至128T,存储三副本,秒级备份Serverless极致弹性:首创分布式行锁及remote log cache技术,支持16个主节点扩展,线性比达0.7。独创OCC&PCC混合并发控制技术,支持高并发下事务冲突无失败回滚极致安全:计划内停机RTO=0,计划外停机RTO< 10秒。两地三中心架构,跨Region数据实时灾备生态友好:100%兼容MySQL 8.0五、DRS+UGO:数据库结构+应用+数据一站式迁移1、DRS:数据同步黑科技加持,全场景安心迁移2、UGO:一键迁移数据库对象,消除异构数据库迁移忧虑3、案例:永安保险商用GaussDB(for MySQL)+DRS1)核心诉求: 搬迁某主流商业数据库2)解决方案:全栈工具链切换商业数据库+专家服务。 超预期4倍+满足客户诉求六、GaussDB NoSQL:国内首家,业内领先多模非关系型数据库服务1、独创的ALL-PRIMARY技术:多写,RPO=0,分钟级节点扩容2、方案优势极致弹性:存算分离架构,分钟级快速扩展,扩容过程中性能无抖动;自动负载均衡读 写,业务无感访问。极致高可靠:多活多写,容忍最大N-1节点故障;容灾集群实时复制。极致高可用:存储层节点故障,TB级数据分钟级副本重建;极速备份,时间点还原相比原生NoSQL:故障切换时间: 快20倍、数据备份时间: 快10倍、节点扩容时间: 快20倍、性能:优1.5倍3、案例:GaussDB NoSQL助力天地图提供最佳用户体验1)解决方案:GaussDB(for Mongo)提供在线地图的瓦片数据处理服务2)客户价值保障业务稳定连续:客户业务无需任何改造,17TB海量数据迁移仅需2天、故障秒级转移,客户业务无感知、支持96TB的海量数据处理能力助力降本增效:性能相比社区版提升3倍以上、新业务上线速度提高2倍、数据更新效率提高5倍、成本为友商同规格的一半七、补充说明如何选择符合业务发展的数据库?——华为云数据库为用户提供灵活、方便、低成本的上云解决方案,全场景业务,全开放生态,让核心数据安全上云、稳定高效处理与分析。1、关系型数据库云数据库 GaussDB(自主创新):应用于金融、电信、政府等行业关键核心系统,高性能场景云数据库 GaussDB(for MySQL)(自主创新):中大型企业生产系统(高性能,大数据容量),例如金融、互联网等云数据库 RDS for MySQL:开源MySQL业务上云,享受云数据库的安全、弹性、高可用,降低企业TCO云数据库RDS for PostgreSQL:开源PostgreSQL业务上云,享受云数据库的安全、弹性、高可用,降低企业TCO云数据库RDS for SQL Server:企业用户微软生态上云,支持高可靠数据业务需求2、非关系型数据库云数据库 GaussDB(for Mongo)(自主创新):应用于游戏(装备、道具)、泛互联场景云数据库 GaussDB(for Cassandra)自主创新:泛互联网日志数据存储(并发写入量大,存储容量高)、工业互联网数据存储(写入规模大、存储容量大)云数据库 GaussDB(for Influx)自主创新:工业互联网时序数据、用户银行流水数据、物联网数据存储(时序)云数据库 GaussDB(for Redis)自主创新:Key-Value存储模式,可用于互联网场景文档数据库服务 DDS:兼容MongoDB协议,应用于游戏(装备、道具)、泛互联网场景3、数据库生态工具&中间件数据复制服务 DRS:用于数据库在线迁移和数据库实时同步数据管理服务 DAS:数据库一站式开发,DBA智能运维,企业流程审批,享受便捷、智能、安全、高效的数据库管理手段数据库和应用迁移 UGO:异构数据库迁移,数据库对象DDL的SQL转化和应用SQL转化分布式数据库中间件 DDM:配套RDS for MySQL的分库分表场景更多精彩内容参见官网资料:cid:link_1前期 《企业级分布式数据库 - GaussDB介绍》 参见:cid:link_0
  • [技术解读] GaussDB数据库事务介绍
    一、前言随着大数据和互联网技术的不断发展,数据库管理系统的作用越来越重要,实现数据的快速读写以及保证数据的安全性和完整性成为企业在选择数据库技术时最为关注的问题之一。事务是保证数据一致性和完整性的关键机制之一,因此事务管理在数据库技术中占据了极为重要的位置。在这里我们将着重介绍华为云数据库GaussDB对事务的支持及管理,包括事务应用场景、事务管理、事务语句、事务隔离、事务监控等内容。二、GaussDB事务的定义及应用场景事务是数据库系统中的一个重要概念,通俗来讲,事务就是一组数据库操作看成一个整体,这个整体要么全部执行成功,要么全部撤销。事务可以应用在并发访问数据库时,保持数据的一致性。一些常见的应用场景包括转账操作、订单修改、银行交易等。在这些场景中,事务的功能是保证操作的原子性,即要么全部执行成功,数据库的值正确地更新,即处于一个“一致状态”,要么出现异常或系统故障,全部回滚至操作前的状态,以保证数据的准确性和完整性。GaussDB支持ACID事务,即原子性、一致性、隔离性和持久性。在GaussDB中,事务是指一组数据库操作,这些操作要么全部成功,要么全部失败。当一个事务提交时,所有的修改都会被永久保存。如果事务失败,则所有的修改都会被回滚,数据库状态会被还原到事务开始前的状态。GaussDB还支持分布式事务(集群事务),可以涉及到多个节点的事务(本次不做重点介绍)。原子性(Atomicity):事务是数据库的逻辑工作单位,事务中的操作,要么都做, 要么都不做。一致性(Consistency):事务的执行结果必须是使数据库从一个一致性状态转到另一 个一致性状态。隔离性(Isolation):数据库中一个事务的执行不能被其他事务干扰。即一个事务 的内部操作及使用的数据对其他事务是隔离的,并发执行的 各个事务不能相互干扰。持久性(Durability):事务一旦提交,对数据库中数据的改变是永久的。提交后的 操作或者故障不会对事务的操作结果产生任何影响。三、GaussDB事务的管理事务管理是指在使用数据库系统时,对事务的开启、提交、回滚、保存点、分布式事务等进行管理:启动事务:GaussDB通过START TRANSACTION和BEGIN语法启动事务设置事务:GaussDB通过SET TRANSACTION或者SET LOCAL TRANSACTION语法设置事务提交事务:GaussDB通过COMMIT或者END可完成提交事务的功能,即提交事务的所有操作回滚事务:回滚是在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销存储过程本身就处于一个事务中,开始调用最外围存储过程时会自动开启一个事务,在调用结束时自动提交或者发生异常时回滚。除了系统自动的事务控制外,也可以使用COMMIT/ROLLBACK来控制存储过程中的事务。在存储过程中调用COMMIT/ROLLBACK命令,将提交/回滚当前事务并自动开启一个新的事务,后续的所有操作都会在此新事务中运行。示例1:启动一个事务--以默认方式启动事务。START TRANSACTION;SELECT * FROM tpcds.reason;END;--以默认方式启动事务。BEGIN;SELECT * FROM tpcds.reason;END;--以隔离级别为READ COMMITTED,读/写方式启动事务。START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE;SELECT * FROM tpcds.reason;COMMIT;示例2:设置事务--开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ ONLY。START TRANSACTION;SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;COMMIT;示例3:支持在PLSQL的存储过程内使用COMMIT/ROLLBACK。CREATE TABLE EXAMPLE1(COL1 INT);CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE()ASBEGINFOR i IN 0..20 LOOPINSERT INTO EXAMPLE1(COL1) VALUES (i);IF i % 2 = 0 THENCOMMIT;ELSEROLLBACK;END IF;END LOOP;END;/运行结果:在GaussDB中,控制管理事务可以采用两个方法:原子性和隔离性。原子性指一组操作要么全部执行,要么全部不执行。隔离性指一个事务的操作不受其他事务干扰,保证并发执行时数据的一致性。更多事务管理过程中的使用场景(支持/不支持调用的上下文环境),请参见官网示例:cid:link_0四、GaussDB事务语句事务语句可以看作是在事务中执行的一组语句,常见的事务语句有insert、update、delete等。GaussDB支持事务语句,事务语句组合成一组原子性、隔离性和一致性的操作。例如,下面的所有查询都包含在同一个事务小片中。如果有任何一个查询失败,整个事务将回滚。以下是事务语句的例子:BEGIN;SELECT balance FROM account WHERE id = 1 FOR UPDATE;UPDATE account SET balance = balance - 100 WHERE id = 1;COMMIT;五、GaussDB事务隔离GaussDB支持的事务隔离级别包括:Read Uncommitted(读未提交)、Read Committed(读提交)、Repeatable Read(重复读)、Serializable(序列化,Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不建议使用)。语法:{ SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS TRANSACTION }{ ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ }| { READ WRITE | READ ONLY } } [, ...]1. Read Uncommitted 隔离级别:最低的隔离级别,它允许提交了但尚未被写入磁盘的事务修改的数据被其他事务所读取。SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;2. Read Committed 隔离级别:这个级别保证一个事务所见到的数据,要么是提交事务所修改的(已经将数据更新至磁盘),要么就是其他提交事务所修改的。SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED;3. Repeatable Read 隔离级别:保证在一个事务内重复执行的查询返回的结果集是一样的。特别地,在这个级别的情况下,在事务中第一次读表时就会自动获取到所有被查询记录的共享锁,直到关闭连接为止。SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ;4. Serializable 隔离级别:这个级别最高,实现方法是对数据进行锁定,以保证在写操作(INSERT、DELETE 和 UPDATE 等)期间数据不会被访问。SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;六、GaussDB事务监控事务监控是指对事务进行实时的监控,包括事务的状态、执行时间、执行语句、执行结果等。事务监控可以对数据库操作进行记录和追踪,包括事务开始和结束的时间、事务中执行的语句、事务提交或回滚的状态等。可以通过这些信息来监控事务的执行情况,优化性能和调整配置。华为云数据库GaussDB支持ACID事务,事务隔离级别支持读已提交、可重复读、序列化三种,并具有分布式事务支持功能。在实际应用中,GaussDB的事务机制可适用于金融账务、电商订单、物流管理等多种场景。例如,在电商订单场景中,可以在一个事务中包含插入订单、更新库存、生成支付信息等相关操作,确保这些操作全部成功或全部失败,而不会出现其中某个操作提交,其他操作失败的情况。而在日常开发中,要注意对事务的合理使用,避免在一个事务中执行过多的操作,尽可能缩小事务的范围,减少事务的执行时间,从而提高系统的并发性能。事务监控可以对数据库操作进行记录和追踪,包括事务开始和结束的时间、事务中执行的语句、事务提交或回滚的状态等。可以通过这些信息来监控事务的执行情况,优化性能和调整配置。以下是事务监控的示例:1. 查看活动事务信息(PG_PREPARED_XACTS视图显示当前准备好进行两阶段提交的事务的信息)select * from pg_prepared_xacts;2. 查看事务状态(PG_STAT_ACTIVITY视图显示和当前用户查询相关的信息。)select pid, datname, usename, query, query_start, state from pg_stat_activity where state != 'idle' and state != 'idle in transaction';七、总结事务是保证数据一致性和完整性的核心机制之一,对于一个数据库来说,事务的支持和管理是必须的。GaussDB通过支持手动和自动管理事务、事务隔离级别以及事务监控等功能,满足了企业对数据一致性和完整性的需求。在日常开发中,需要特别注意事务的控制和隔离,以保证事务的正确执行,从而提高数据的可靠性和安全性。本文介绍到此结束,更多操作可在实际应用中参考官方文档。
  • [技术解读] GaussDB数据库存储过程介绍
    一、前言华为云数据库GaussDB是一款高性能、高安全性的云原生数据库,在数据库领域处于领先地位。而在GaussDB中,存储过程是一个不容忽视的重要功能。本文将深入介绍GaussDB存储过程的使用场景、使用优缺点、示例及示例解析、调用方法等方面,为读者提供全方位的指导与帮助。存储过程是一个可重用的、批处理的SQL语句代码块,可以包含多条SQL语句,通常用于执行复杂的数据操作、提高数据库的性能和安全性,以及简化数据库应用程序的开发和维护。在GaussDB中,存储过程的使用可以使数据库应用程序更具灵活性、数据完整性更高、执行速度更快。二、GaussDB中的定义商业规则和业务逻辑可以通过程序存储在GaussDB中,这个程序就是存储过程。 存储过程是SQL、PL/SQL、Java语句的组合。存储过程使执行商业规则的代码可以从应用程序中移动到数据库。从而,代码存储一次能够被多个程序使用。三、存储过程的使用场景存储过程是一种储存在数据库中的预编译的程序,它被定义为一系列的SQL语句,并且被用来执行一系列的数据库操作。在实际运用中,存储过程可以提高性能、提高开发效率,同时也具备良好的安全性能。下面列举几个存储过程的适用场景复杂任务处理:存储过程可以用于一些需要处理复杂任务的场景,例如一个较为复杂的SQL语句,需要处理多个条件和大量的数据,使用存储过程可以提高效率。数据持久化:存储过程可以在服务器端创建和存储处理逻辑,而客户端通过调用存储过程即可处理需要的数据。数据访问权限管理:存储过程可以通过设置不同的访问权限来提高数据访问的安全性。2、存储过程特点:频繁的、重复性、可封装、易管理。复杂的数据事务处理,可以使用存储过程实现事务的一致性和数据完整性,同时提高执行效率。对于常用的查询,可以把它们封装成存储过程,并将其缓存到内存中,在每次执行时,不需要从磁盘中读取数据,提高查询速度。四、存储过程的使用优缺点在使用存储过程时,我们需要充分了解其使用优缺点,从而在实际开发过程中进行有针对性的选择,下面罗列了一些常见的存储过程的使用优缺点。1、优点:高效率、可复用、可维护在执行大量的操作时,存储过程可以减少数据库客户端与数据库的通信次数,从而提高了执行效率。在多次使用同一函数时,存储过程所需要的内存资源和CPU时间较少,因此,存储过程可以被看作一种可复用的数据库对象。在维护和升级方面,存储过程具有良好的维护性,可以被视为一种良好的API,简化系统的维护过程。存储过程的安全性和可维护性更高,减少了数据库维护的工作量。2、缺点:难度较高、对数据库依赖性强存储过程需要使用专门的SQL软件进行开发,所以对开发人员的技能水平要求比较高,并且使用错误可能会抛出不可预知的异常。存储过程涉及到多个数据库对象,使用不当有可能产生不可预知的结果。当数据库结构发生变化时,存储过程也需要进行相应调整,因此,存储过程对数据库的依赖性比较强。开发和维护存储过程需要一定的技术水平,对于小型数据库来说,使用存储过程的必要性较小。存储过程的执行需要对存储过程进行编译,对于频繁修改的存储过程,可能会影响数据库的性能。五、存储过程的示例及示例解析1、GaussDB存储过程语法格式CREATE [ OR REPLACE ] PROCEDURE procedure_name[ ( {[ argname ] [ argmode ] argtype [ { DEFAULT | := | = } expression ]}[,...]) ][{ IMMUTABLE | STABLE | VOLATILE }| { SHIPPABLE | NOT SHIPPABLE }| {PACKAGE}| [ NOT ] LEAKPROOF| { CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }| {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER}| COST execution_cost| SET configuration_parameter { [ TO | = ] value | FROM CURRENT }][ ... ]{ IS | AS }plsql_body/--说明:定义存储过程,在SQL语句末,需要输入“/” (执行)。参数说明•OR REPLACE当存在同名的存储过程时,替换原来的定义。•procedure_name创建的存储过程名称,可以带有模式名。 取值范围:字符串,要符合标识符的命名规范。•argmode参数的模式。 须知:VARIADIC用于声明数组类型的参数。 取值范围: IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的过程定义中。•argname参数的名称。 取值范围:字符串,要符合标识符的命名规范。•argtype参数的数据类型。可以使用%ROWTYPE间接引用表的类型,或者使用%TYPE间接引用表或复合类型中某一列的类型。 取值范围:可用的数据类型。•IMMUTABLE、STABLE等行为约束可选项。各参数的功能与CREATE FUNCTION类似,详细说明见CREATE FUNCTION•plsql_bodyPL/SQL存储过程体。 须知:当在存储过程体中进行创建用户等涉及用户密码相关操作时,系统表及csv日志中会记录密码的明文。因此不建议用户在存储过程体中进行涉及用户密码的相关操作。说明:argname和argmode的顺序没有严格要求,推荐按照argname、argmode、argtype的顺序使用。2、GaussDB存储过程语法示例我们来看几个具有代表性的GaussDB数据库存储过程示例,以进一步了解其编写和使用方式。示例一:下面是一个简单的GaussDB存储过程示例:--创建一个存储过程。CREATE OR REPLACE PROCEDURE prc_add ( param1 IN INTEGER, param2 IN OUT INTEGER)ASBEGINparam2:= param1 + param2;dbe_output.print_line('result is: '||to_char(param2));END;/--调用此存储过程。SELECT prc_add(2,3);--删除存储过程DROP PROCEDURE prc_add;解析:上面的代码是创建了一个名为prc_add的存储过程,该存储过程有两个参数,一个输入参数param1和一个输入/输出参数param2,数据类型均为整型(INTEGER)。 在存储过程的主体中,对输入/输出参数param2进行了修改,将其值赋为param1 + param2。在调用存储过程时,输入2作为输入参数param1的值,3作为输入/输出参数param2的值。最后,存储过程的结果输出到dbe_output控制台,显示“result is: 5”。总的来说,这个存储过程的功能是将输入参数param1与输入/输出参数param2的值相加,并将相加后的结果输出。它可以在程序中多次使用,以简化代码。示例二--创建一个存储过程,将带着调用它的用户的权限执行。CREATE TABLE tb1(a integer);CREATE OR REPLACE PROCEDURE insert_data(v integer)SECURITY INVOKERASBEGININSERT INTO tb1 VALUES(v);END;/--调用此存储过程。CALL insert_data(123);--查看结果select * from tb1;--删除存储过程DROP PROCEDURE insert_data;解析:上述代码实际上创建了一个带有一个输入参数的存储过程insert_data,并将其定义为以调用者的权限来运行。当调用该存储过程时,将传递一个整数参数作为输入,该参数将插入一个新行到tb1表中,该新行的值为该整数。然后通过执行select语句查看tb1表中的所有数据行。执行完整段代码后,将看到只有一行数据,该行的值为123,这是由insert_data存储过程插入的。3、存储过程的调用方法存储过程的调用方法主要有两种:通过客户端请求调用和通过触发器自动调用。通过客户端请求调用通常是手动调用,通常使用以下两种方法调用存储过程:1)CALL语句CALL stored_procedure_name(…)2)SELECT语句SELECT stored_procedure_name(…)通过触发器自动调用通常是在特定操作的情况下自动执行存储过程。例如,当插入一条记录时,可以设置触发器来自动执行存储过程。七、总结本文详细介绍了GaussDB存储过程的使用场景、使用优缺点、示例及示例解析、调用方法等内容。使用存储过程可以提高效率、可维护性,同时具备良好的安全性能。在使用存储过程之前,我们需要充分了解其使用优缺点,从而在实际开发过程中进行有针对性的选择。只有深入了解GaussDB的存储过程的使用方法和技巧,才能在开发过程中得心应手,更好地配合GaussDB实现高效的数据管理和业务处理。对于需要频繁重复执行的SQL语句,我们可以将其封装成一个存储过程,方便管理和提高效率。当存储过程执行达到一定规模时,我们需要注意存储过程的维护和优化,以确保存储过程的执行性能。作为一个高可靠性的全球化分布式关系型数据库,华为云数据库GaussDB提供了丰富的存储过程支持,为存储过程的开发、管理和执行提供了更多的优化策略和高可用性保障。本次介绍就到此,欢迎大家测试、交流!
  • [技术解读] GaussDB数据类型转换介绍
    一、数据类型转换场景数据类型转换在实际应用中非常常见。GaussDB作为一款企业级分布式关系型数据库,在实际业务场景使用中,也会避免不了数据类型的转换。以下是一些数据类型转换的应用场景:数据清洗与转换:在数据分析和处理中,经常需要对数据进行清洗和转换,例如将文本数据转换为数字格式,将日期格式转换为文本格式等。数据格式化:在输出数据时,需要将数据格式化为合适的格式,例如将数字格式化为货币格式、百分比格式等。数据计算:在进行数据计算时,需要对数据类型进行转换,例如将整数类型的数据转换为浮点数类型的数据,以便进行精确的计算或处理。数据存储:在将数据存储到数据库中时,需要将不同类型的数据转换为数据库支持的数据类型,以便正确地存储和查询数据。数据传输:在数据传输过程中,需要将不同类型的数据转换为相同的数据类型,以便正确地传输数据。总之,数据类型转换在数据处理、数据分析、数据存储和数据传输等领域都有广泛的应用。二、数据类型转换及示例在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。GaussDB提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因而,GaussDB中大多数类型转换是由通用规则来管理的。数据库中允许有些数据类型进行隐式类型转换(赋值、函数调用的参数等),有些数据类型间不允许进行隐式数据类型转换,可尝试使用GaussDB提供的类型转换函数。1、cast(value AS type) 描述:CAST进行数据类型强转。如果有必要,可以将值显式转换为指定类型。1)整型转浮点型SELECT CAST(1 AS FLOAT8); -- 将整数 1 转换为浮点数2)浮点型转整型SELECT CAST(3.14 AS INT4); -- 将浮点数 3.14 转换为整数 33)布尔型转整型使用 CAST 函数将布尔型数据转换为整型数据,其中 TRUE 转换为 1,FALSE 转换为 0,例如:SELECT CAST(TRUE AS INT4),CAST(FALSE AS INT4); -- 将布尔型数据 TRUE 转换为整数 1;将布尔型数据 FALSE 转换为整数 02、to_date(text)描述:将文本类型的值转换为指定格式的时间戳。格式一:无分隔符日期,如20230314,需要包括完整的年月日。格式二:带分隔符日期,如2023-03-14,分隔符可以是单个任意非数字字符。SELECT TO_DATE('20230314'),TO_DATE('2023-03-14');3、to_date(text,format)描述:将字符串类型的值转换为指定格式的日期。SELECT TO_DATE('14 MAR 2023', 'DD MON YYYY'),TO_DATE('20230314','YYYYMMDD'); 4、to_char(datetime, format)描述:日期时间型转字符型。SELECT TO_CHAR(NOW(), 'YYYY-MM-DD HH24:MI:SS'); -- 将当前日期时间型数据转换为字符型数据,格式为 'YYYY-MM-DD HH24:MI:SS'5、to_char(string)描述:将CHAR、VARCHAR、VARCHAR2、CLOB类型转换为VARCHAR类型。SELECT TO_CHAR(1110)6、CASE 表达式布尔型转字符型,使用 CASE 表达式将布尔型数据转换为字符型数据,例如:1)SELECT CASE WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END; -- 将布尔型数据 TRUE 转换为字符型数据 'TRUE'2)SELECT CASE WHEN FALSE THEN 'TRUE' ELSE 'FALSE' END; -- 将布尔型数据 FALSE 转换为字符型数据 'FALSE'三、 小结数据类型转换是将一种数据类型转换为另一种数据类型的过程。在中,我们经常需要对数据类型进行转换以满足代码的需求。 在很多编程语言中,数据类型转换可以分为隐式转换和显式转换两种类型。 隐式转换是指在代码中进行赋值、运算或比较等操作时,编程语言会自动对数据类型进行转换,以保证操作的正确性和合法性。GaussDB支持多种数据类型转换,以下是GaussDB中常用的数据类型转换方式:隐式转换:GaussDB支持隐式转换,即在表达式中,如果不同数据类型的操作数参与运算,GaussDB会自动将其中一个数据类型转换为另一个数据类型,以满足运算要求。例如,如果一个整型数值与一个浮点型数值进行运算,GaussDB会将整数转换为浮点数再进行运算。显式转换:GaussDB中支持使用CAST函数进行显式转换。CAST函数可将一个数据类型的值转换为另一个数据类型的值。例如,使用CAST函数将一个字符串类型转换为整型类型。数字转换:GaussDB支持将数字类型转换为其他数字类型,例如将整型转换为小数型、将小数型转换为整型等。字符串转换:GaussDB支持将字符串类型转换为其他数据类型,例如将字符串转换为整型、将字符串转换为日期类型等。日期转换:GaussDB支持将日期类型转换为其他日期类型,例如将日期转换为时间类型、将时间类型转换为日期类型等。布尔型转换:GaussDB支持将布尔型数据转换为其他数据类型,例如将布尔型转换为整型、将布尔型转换为字符串类型等。……需要注意的是,在进行数据类型转换时,应该考虑出现的数据精度、数据溢出、数据失真等问题,同时也要避免数据类型不兼容造成的错误。当然了,数据类型转换也会影响查询效率和性能,需要根据实际业务需求和数据量大小进行优化和调整。以上示例到此结束,更多类型转换可参考官网文档,欢迎大家测试、交流。
  • [技术解读] GaussDB数据类型介绍
    目录:一、GaussDB 数据库二、数据类型概念及特点三、常用数据类型1、常用字符串类型介绍2、布尔类型3、数值类型4、日期/时间类型四、数据类型选择建议附:GaussDB数据库涉及的数据类型一、GaussDB 数据库GaussDB是华为基于openGauss自研生态推出的云化企业级分布式关系型数据库,它支持多种数据类型,包括数值、字符、日期等。在使用GaussDB时,可能需要进行数据类型转换,以满足不同的需求。本文将以示例的形式罗列并介绍一些常见的数据类型转换方法等。二、数据类型概念及特点数据类型是一组值的集合以及定义在这个值集上的一组操作。GaussDB数据库是由表的集合组成的,而各表中的列定义了该表,每一列都属于一种数据类型,GaussDB根据数据类型有相应函数对其内容进行操作,例如GaussDB可对数值型数据进行加、减、乘、除操作等。数据类型是用来定义数据存储格式和数据范围的规范。每种数据类型都有自己的特点和适用范围,它们在数据库中的作用主要有以下几点:存储数据:数据库中的每个字段都必须指定数据类型,这样才能确定它们在数据库中的存储格式。不同的数据类型使用不同的存储方式,例如整型会以二进制形式存储,而字符型则以ASCII码或Unicode编码形式存储。约束数据范围:数据类型可以限制某个字段存储的数据范围,例如整型只能存储整数值,小数型只能存储浮点数等。这样可以确保数据的准确性和完整性,防止非法值进入数据库。提高查询效率:数据库在查询数据时会根据字段的数据类型进行优化,例如对整型字段的查询会比对字符型字段的查询更快,因为整型字段的数据存储格式更简单,计算也更快。降低存储空间:不同的数据类型使用不同的存储方式,一些数据类型可以在存储时减少存储空间的占用。例如使用整型可以减少存储空间的占用,因为整型在存储时只需要占用4个字节,而字符型则需要占用更多的存储空间。提高数据安全性:数据类型可以帮助数据库对数据进行有效的过滤和验证,限制不合法的数据输入,增强数据的安全性和可靠性。综上所述,数据类型在数据库中扮演着极为重要的角色,它们不仅仅用于存储数据,还可以提高查询效率、降低存储空间、提高数据安全性等。数据库开发人员在设计数据库时必须充分了解各种数据类型的特点和使用场景,合理选用数据类型,才能保证数据库的高效性和稳定性。三、常用数据类型1、常用字符串类型介绍在进行字段设计时,需要根据数据特征选择相应的数据类型。字符串类型在使用时比较容易混淆,下表罗列了GaussDB中常见的字符串类型。1)常用字符串类型2)示例--创建表。CREATE TABLE t_char_type(column1 VARCHAR(5))DISTRIBUTE BY HASH (column1);--插入数据。INSERT INTO t_char_type VALUES ('ok');--插入的数据长度超过类型规定的长度报错。INSERT INTO t_char_type VALUES ('too long');ERROR: value too long for type character varying(5)CONTEXT: referenced column: column1--明确类型的长度,超过数据类型长度后会自动截断。INSERT INTO t_char_type VALUES ('too long'::varchar(5));--查询数据。SELECT column1, char_length(column1) FROM t_char_type;column1 | char_length---------+-------------ok | 2too l | 5(2 rows)2、布尔类型1)说明“真”值的有效文本值是:TRUE、't'、'true'、'y'、'yes'、'1'以及所有非0整数。“假”值的有效文本值是:FALSE、'f'、'false'、'n'、'no'、'0'、0。使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)。2)示例--创建表。CREATE TABLE t_bool_type(column1 BOOLEAN,column2 TEXT)DISTRIBUTE BY HASH(column2);--插入数据。INSERT INTO t_bool_type VALUES (TRUE, 'one');INSERT INTO t_bool_type VALUES (FALSE, 'two');--查看数据。SELECT * FROM t_bool_type;column1 | column2---------+---------t | onef | two(2 rows)SELECT * FROM t_bool_type WHERE column1 = 't';column1 | column2---------+---------t | one(1 row)3、数值类型1) 整数类型TINYINT、SMALLINT、INTEGER和BIGINT类型存储各种范围的数字,也就是整数。试图存储超出范围以外的数值将会导致错误。常用的类型是INTEGER,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为前者相对快得多。2)示例--创建具有TINYINT,INTEGER,BIGINT类型数据的表。openGauss=# CREATE TABLE t_int_type(column1 TINYINT,column2 TINYINT,column3 INTEGER,column4 BIGINT);--插入数据。openGauss=# INSERT INTO int_type_t2 VALUES(100, 10, 1000, 10000);--查看数据。openGauss=# SELECT * FROM int_type_t2;column1 | column2 | column3 | column4-----------+----------+------------+-------100 | 10 | 1000 | 10000(1 row)4、日期/时间类型1)日期输入说明:日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、传统POSTGRES格式或者其它的形式。系统支持按照日、月、年的顺序自定义日期输入。如果把DateStyle参数设置为MDY就按照“月-日-年”解析,设置为DMY就按照“日-月-年”解析,设置为YMD就按照“年-月-日”解析。日期的文本输入需要加单引号包围,语法:type [ ( p ) ] 'value',可选的精度声明中的p是一个整数,表示在秒域中小数部分的位数。2)时间段输入说明:reltime的输入方式可以采用任何合法的时间段文本格式,包括数字形式(含负数和小数)及时间形式,其中时间形式的输入支持SQL标准格式、ISO-8601格式、POSTGRES格式等。另外,文本输入需要加单引号。四、数据类型选择建议选择数据类型,在字段设计时,基于查询效率的考虑,一般遵循以下原则:选择数值类型时,在满足业务精度的情况下,选择数据类型的优先级从高到低依次为整数、浮点数、NUMERIC。使用一致的数据类型,当多个表存在逻辑关系时,表示同一含义的字段应该使用相同的数据类型。对于字符串数据,建议使用变长字符串数据类型,并指定最大长度。请务必确保指定的最大长度大于需要存储的最大字符数,避免超出最大长度时出现字符截断现象。除非明确知道数据类型为固定长度字符串,否则,不建议使用CHAR(n)、BPCHAR(n)、NCHAR(n)、CHARACTER(n)。索引字段的总长度不超过50字节。否则,索引大小会膨胀比较严重,带来较大的存储开销,同时索引性能也会下降。尽量使用执行效率比较高的数据类型,一般来说整型数据运算(包括=、>、<、≧、≦、≠等常规的比较运算,以及group by)的效率比字符串、浮点数要高。比如某客户场景中对列存表进行点查询,filter条件在一个numeric列上,执行时间为10+s;修改numeric为int类型之后,执行时间缩短为1.8s左右。尽量使用短字段的数据类型:长度较短的数据类型不仅可以减小数据文件的大小,提升IO性能;同时也可以减小相关计算时的内存消耗,提升计算性能。比如对于整型数据,如果可以用smallint就尽量不用int,如果可以用int就尽量不用bigint。表关联列尽量使用相同的数据类型。如果表关联列数据类型不同,数据库必须动态地转化为相同的数据类型进行比较,这种转换会带来一定的性能开销。附:GaussDB数据库涉及的数据类型“数值类型、货币类型、布尔类型、字符类型、二进制类型、日期/时间类型、几何类型、网络地址类型、位串类型、文本搜索类型、UUID类型、JSON/JSONB类型、HLL数据类型、范围类型、对象标识符类型、伪类型、列存表支持的数据类型、账本数据库使用的数据类型”。详见官方文档:cid:link_0以上就是本期的内容,欢迎大家测试、交流!
  • [问题求助] GaussDB有没有内置的MD5函数,能在INSERT语句中,自动将某个字段的值(比如密码)进行MD5处理
    GaussDB有没有内置的MD5函数,能在INSERT语句中,自动将某个字段的值(比如密码)进行MD5处理
  • [问题求助] GaussDB能否实现对某个字段(比如密码)加密存储,然后在读取的时候自动解密
    GaussDB能否实现对某个字段(比如密码)加密存储,然后在读取的时候自动解密
  • [问题求助] GaussDB 内部是按行存储的,还是按列存储的
    GaussDB 内部是按行存储的,还是按列存储的
  • [问题求助] GaussDB Join的时候,大表在前速度快,还是大表在后速度快?
    GaussDB Join的时候,大表在前速度快,还是大表在后速度快?
  • [问题求助] GaussDB怎么通过代码查看执行计划
    GaussDB怎么通过代码查看执行计划
  • [公告] 【热门活动】云数据库学练赛训练营一期
    活动背景:本活动致力于通过云数据库的实操训练、比赛和理论学习路径,帮助开发者轻松掌握云数据库的使用!活动时间:即日起-2024年12月31日二、活动流程:Step1.训练营准备1.点击领取华为云资源代金券>>>链接:https://account.huaweicloud.com/usercenter/#/getCoupons?activityID=P2411180130043721FX3BM51ENWISN&contentID=PCP24111801271351516L2WZM06LNC6KStep2.实操训练(一)基础实操训练2.点击前往产品页购买云数据库 TaurusDB实例>>>链接:cid:link_8购买规格如下: 计费模式:按需付费 区域:华北-北京四 管理员密码:自行设置其余各项默认,点击“立即购买”,确认后“提交”3.按照指导完成实操>>>链接:cid:link_54.删除TaurusDB实例>>>链接:https://console.huaweicloud.com/gaussdbformysql/?region=cn-north-4&engine=taurus#/gaussdbformysql/management/list5.论坛上传正确的截图获取抽奖链接>>>链接:cid:link_5(二)gsql远程连接云数据库GaussDB6.获取指导手册,前往实操>>>链接:cid:link_3Step3.开发者入门赛7.前往参赛,赢取奖品>>>链接:cid:link_4Step4.征文活动8.前往参加,获取开发者礼包>>>链接:cid:link_12Step5.数据库成长路径数据库学习路径>>>cid:link_10数据库原理及应用学习路径>>>cid:link_11华为TaurusDB数据库高级工程师学习路径>>>cid:link_6数据库工程师学习路径>>>cid:link_7GaussDB数据库通识课学习路径>>>cid:link_9注意事项:1、本次活动参与用户需真实有效,如有虚假、黑产等行为,一律通报、剔除活动参与资格。
  • [问题求助] 求助!openGauss执行安装后报错[GAUSS-51615]
    ## OS:       Kylin-Server-V10-SP3-2403-Release-20240426-arm64.iso (虚拟机)## Database:openGauss-3.0.5-openEuler-64bit-all.tar.gzLast login: Wed Oct 23 12:01:00 CST 2024 from 192.168.137.1 on pts/0 Checking items:     A1. [ OS version status ]                                   : Normal              [immortal]         kylin_10_64bit                       A2. [ Kernel version status ]                               : Normal              The names about all kernel versions are same. The value is "4.19.90-89.11.v2401.ky10.aarch64".     A3. [ Unicode status ]                                      : Normal              The values of all unicode are same. The value is "LANG=en_US.UTF-8".     A4. [ Time zone status ]                                    : Normal              The informations about all timezones are same. The value is "+0800".     A5. [ Swap memory status ]                                  : Normal              The value about swap memory is correct.                 A6. [ System control parameters status ]                    : Normal              All values about system control  parameters are correct.     A7. [ File system configuration status ]                    : Normal              Both soft nofile and hard nofile are correct.           A8. [ Disk configuration status ]                           : Normal              The value about XFS mount parameters is correct.        A9. [ Pre-read block size status ]                          : Normal              The value about Logical block size is correct.          A10.[ IO scheduler status ]                                 : Normal              The value of IO scheduler is correct.               BondMode Null     A11.[ Network card configuration status ]                   : Warning             [immortal] BondMode Null         Warning reason: Failed to obtain the network card speed value. Maybe the network card "enp0s1" is not working.      A12.[ Time consistency status ]                             : Warning             [immortal]         The NTPD not detected on machine and local time is "2024-10-23 12:09:10".      A13.[ Firewall service status ]                             : Normal              The firewall service is stopped.                        A14.[ THP service status ]                                  : Normal              The THP service is stopped.                         Total numbers:14. Abnormal numbers:0. Warning numbers:2. Parsing the configuration file. Check preinstall on every node. Successfully checked preinstall on every node. Creating the backup directory. Successfully created the backup directory. begin deploy.. Installing the cluster. begin prepare Install Cluster.. Checking the installation environment on all nodes. begin install Cluster.. Installing applications on all nodes. Successfully installed APP. begin init Instance.. encrypt cipher and rand files for database. Please enter password for database: Please repeat for database: begin to create CA cert files The sslcert will be generated in /home/huawei/install/app/share/sslcert/om NO cm_server instance, no need to create CA for CM. Cluster installation is completed. Configuring. Deleting instances from all nodes. Successfully deleted instances from all nodes. Checking node configuration on all nodes. Initializing instances on all nodes. Initializing instance. [GAUSS-51615] : Failed to initialize instance. Command:/home/huawei/install/app/bin/gs_initdb --locale=C -D /home/huawei/install/data/dn --nodename=dn_6001 --encoding=UTF8 -C /home/huawei/install/app/bin. Error: The files belonging to this database system will be owned by user "omm". This user must also own the server process.  The database cluster will be initialized with locale "C". The default text search configuration will be set to "english".  fixing permissions on existing directory /home/huawei/install/data/dn ... ok creating subdirectories ... ok selecting default max_connections ... 10 selecting default shared_buffers ... 400kB creating configuration files ... ok Begin init undo subsystem meta. [INIT UNDO] Init undo subsystem meta successfully. creating template1 database in /home/huawei/install/data/dn/base/1 ... gs_initdb: removing contents of data directory "/home/huawei/install/data/dn" 
  • [SQL] 用户权限管理
    给GaussDB(DWS)指定用户赋予某个SCHEMA的权限包括三个场景SCHEMA下当前某张表权限。SCHEMA下当前所有表的权限。SCHEMA下未来创建的表的权限。假设有两个用户jim和mike,对应的同名SCHEMA是jim和mike,用户mike需要访问SCHEMA jim的表。创建用户jim和mike(系统默认会创建jim和mike的同名SCHEMA)。 CREATE USER jim PASSWORD '{password}'; CREATE USER mike PASSWORD '{password}';在SCHEMA jim下创建表jim.name和jim.address。 CREATE TABLE jim.name (c1 int, c2 int); CREATE TABLE jim.address (c1 int, c2 int);给用户mike赋予SCHEMA jim的访问权限。 GRANT USAGE ON SCHEMA jim TO mike;(某张表权限)给用户mike赋予SCHEMA jim下某张表jim.name的查询权限。 GRANT SELECT ON jim.name TO mike;使用用户mike连接DWS数据库,验证mike可以查询jim.name表,但是不能查询jim.address表。 SELECT * FROM jim.name;查询成功 SELECT * FROM jim.address;查询失败(所有表权限)使用dbadmin给用户mike赋予SCHEMA jim下所有表的查询权限。 GRANT SELECT ON ALL TABLES IN SCHEMA jim TO mike;验证mike可以查询所有表。 SELECT * FROM jim.name; 查询成功 SELECT * FROM jim.address;查询成功创建一张新的表jim.employ。 CREATE TABLE jim.employ (c1 int, c2 int);验证发现用户mike没有jim.employ的查询权限,说明mike虽然有SCHEMA jim下所有表的访问权限,但是对于赋权后新创建的表还是没有访问权限(即mike对SCHEMA jim未来的表权限是没有的)。 SELECT * FROM jim.employ; 会提示没权限(未来表权限)给用户mike赋予SCHAMA jim未来创建的表的访问权限,并创建一张新的表jim.hobby。ALTER DEFAULT PRIVILEGES 用来授予将来要创建的对象的权限。ALTER DEFAULT PRIVILEGES FOR ROLE jim IN SCHEMA jim GRANT SELECT ON TABLES TO mike; CREATE TABLE jim.hobby (c1 int, c2 int);验证发现用户mike可以访问jim.hobby。但是对于之前的jim.employ还是没有访问权限(以上ALTER DEFAULT PRIVILEGES语句的授权范围只是未来创建的表,对于已经创建的表,还是要使用GRANT单张表重新授权),此时需要参考4重新授权jim.employ即可。 SELECT * FROM jim.hobby; 查询成功赋予用户schema的all权限后建表仍然报错ERROR: current user does not have privilege to role tom两个用户tom和jerry,jerry需要在tom的同名schema下创建表,于是tom把该schema的all权限赋予jerry,但是创建表时仍然报错:dbtest=# GRANT all on schema tom to jerry;GRANTdbtest=# \c - jerryPassword for user jerry:Non-SSL connection (SSL connection is recommended when requiring high-security)You are now connected to database "dbtest" as user "jerry".dbtest=> CREATE TABLE tom.t(a int);ERROR:  current user does not have privilege to role tom把角色tom的权限赋予jerry后,建表执行成功。GRANT tom to jerry;和角色名同名的schema需要赋权。三权分立:https://support.huaweicloud.com/devg-dws/dws_04_0056.html权限管理:https://support.huaweicloud.com/bestpractice-dws/dws_05_0081.html用户赋权:https://support.huaweicloud.com/dws_faq/dws_03_0196.html赋权后仍报错:https://support.huaweicloud.com/trouble-dws/dws_09_0094.html创建只读用户:https://support.huaweicloud.com/dws_faq/dws_03_0198.htmlgrant用法:https://support.huaweicloud.com/sqlreference-dws/dws_06_0250.html
总条数:1666 到第
上滑加载中