检测到您已登录华为云国际站账号,为了您更好的体验,建议您访问国际站服务网站 https://www.huaweicloud.com/intl/zh-cn
不再显示此消息
自定义GaussDB(DWS)外部函数(pgSQL/Java)使用规则 GaussDB(DWS) PL/pgSQL使用规则 父主题: GaussDB(DWS)开发设计规范
建议:数据库设计与开发时建议考虑的约定。 说明:对规则/建议进行的详细说明和解释。 总体开发设计规范 下表是GaussDB(DWS)开发过程中需遵循的开发设计规范全集列表,可以单击链接跳转到对应的规则下了解详细说明。 表1 GaussDB(DWS)开发设计规范全集列表 编号 类别 规则/建议 1 连接管理规范 - 规则1
存储过程中不使用非CREATE类的DDL操作,如必须使用,严格评估存储过程耗时和DDL的影响耗时,与外部访问业务错峰执行。 父主题: GaussDB(DWS)开发设计规范
报错问题。 方案建议: 在将连接归还连接池之前,使用DROP清理当前SESSION创建的临时表。 父主题: GaussDB(DWS)开发设计规范
DDL操作规范 建议3.1 DDL操作(CREATE除外)避免在业务高峰期和长事务中执行 违反规范的影响: DDL操作普遍持锁级别高,如ALTER、DROP、TRUNCATE、REINDEX、VACUUM FULL等,执行时会造成业务等锁阻塞。 高峰期执行持锁级别高的DDL操作,造成业务等锁阻塞。
SELECT操作规范 规则3.7 禁止执行不下推的SQL GaussDB(DWS)为分布式架构,SQL语句必须下推才能分利用分布式的计算资源,达到性能最优。 违反规范的影响: 不下推的SQL执行性能差,严重情况会导致CN资源瓶颈,影响整体业务。 方案建议: 不使用不下推的语法和不下推的函数,具体参考语句下推调优。
INSERT多VALUES批插场景使用COPY替代 违反规范的影响: 多VALUES解析耗时、耗资源,入库效率低。 方案建议: 前端使用COPY类接口(如JDBC的CopyManger等)代替INSERT VALUES。 建议3.4 禁止针对普通列存表进行实时INSERT操作 违反规范的影响:
和限制,并适当调大max_active_statements和max_connections值。 父主题: GaussDB(DWS)开发设计规范
UPDATE&DELETE操作规范 建议3.5 避免并发UPDATE/DELETE行存表的同一行 违反规范的影响: 并发UPDATE/DELETE行存表可能导致行锁阻塞和分布式死锁风险,导致业务报错和性能下降。 方案建议: 按主键或分布列进行分组UPDATE/DELETE,组间并行,组内串行。
【建议】在不使用ETL工具、数据入库实时性要求又比较高的情况下,建议在开发应用程序时,使用GaussDB(DWS)JDBC驱动的CopyManager接口进行微批量导入。 CopyManager的使用方法请参见CopyManager。 父主题: GaussDB(DWS)各对象设计详细规则
GaussDB(DWS)约束设计规则 DEFAULT和NULL约束 【建议】如果能够从业务层面补全字段值,则不建议使用DEFAULT约束,避免数据加载时产生不符合预期的结果。 【建议】给明确不存在NULL值的字段加上NOT NULL约束,优化器会在特定场景下对其进行自动优化。 【
GaussDB(DWS)表设计规则 GaussDB(DWS)是分布式架构。数据分布在各个DN上。总体上讲,良好的表设计需要遵循以下原则: 【关注】将表数据均匀分布在各个DN上。数据均匀分布,可以防止数据在部分DN上集中分布,从而导致因存储倾斜造成集群有效容量下降。通过选择合适的分布列,可以避免数据倾斜。
GaussDB(DWS) SQL编写规则 DDL 【建议】在GaussDB(DWS)中,建议DDL(建表、comments等)操作统一执行,在批处理作业中尽量避免DDL操作。避免大量并发事务对性能的影响。 【建议】在非日志表(unlogged table)使用完后,立即执行数据清
GaussDB(DWS)字段设计规则 选择数据类型 在字段设计时,基于查询效率的考虑,一般遵循以下原则: 【建议】尽量使用高效数据类型。 选择数值类型时,在满足业务精度的情况下,选择数据类型的优先级从高到低依次为整数、浮点数、NUMERIC。 【建议】当多个表存在逻辑关系时,表示同一含义的字段应该使用相同的数据类型。
GaussDB(DWS) PL/pgSQL使用规则 总体开发原则 应完全按照设计文档进行开发。 程序模块应做到高内聚低耦合。 应有正确、全面的故障对策。 程序编写应做到结构合理,条理清晰。 程序名称命名应按照统一的命名规则进行命名。 应充分考虑程序的运行效率,包括程序的执行效率和
GaussDB(DWS) Database和Schema设计规则 GaussDB(DWS)中可以使用Database和Schema实现业务的隔离,两者区别在于Database的隔离更加彻底,各个Database之间共享资源极少,可实现连接隔离、权限隔离等,Database之间无法
GaussDB(DWS)视图和关联表设计规则 视图设计 【建议】除非视图之间存在强依赖关系,否则不建议视图嵌套。 【建议】视图定义中尽量避免排序操作。 关联表设计 【建议】表之间的关联字段应该尽量少。 【建议】关联字段的数据类型应该保持一致。 【建议】关联字段在命名上,尽可能体现
GaussDB(DWS)数据库对象命名规则 数据库对象命名需要满足约束:长度不超过63个字符,以字母或下划线开头,中间字符可以是字母、数字、下划线、$。 【建议】避免使用保留或者非保留关键字命名数据库对象。 可以使用SELECT * FROM pg_get_keywords()查
自定义GaussDB(DWS)外部函数(pgSQL/Java)使用规则 【关注】Java UDF可以实现一些java逻辑计算,禁止在Java UDF中封装业务。 【关注】禁止在Java函数中使用任何方式连接数据库,包括但不限于JDBC。 【关注】只能选择下表中的数据类型,不支持自定义类型、复杂数据类型(Java
数据。 UPSERT语法仅8.1.1及以上版本支持。 注意事项 避免UPDATE/UPSERT并发更新同一张列存表。 更多开发设计规范参见总体开发设计规范。 当在列存表上执行UPSERT时,建议开启DELTA表。开启DELTA表能够有效防止执行UPSERT时产生小CU(大量的小CU会导致空间膨胀和查询性能差)。