更新时间:2024-12-23 GMT+08:00
分享

GaussDB(DWS)总体开发设计规范

目的

本规范定义了在进行基于GaussDB(DWS)数据库自主开发过程中应遵守的设计、开发准则,以提升开发效率,保证业务的连续性、稳定性。

适用范围

该规范适用于所有基于GaussDDB(DWS)数据库自主开发的场景,包含应用层面的设计与开发、数据库服务层面的设计与开发。

术语定义

规则:数据库设计与开发时必须遵守的约定。

建议:数据库设计与开发时建议考虑的约定。

说明:对规则/建议进行的详细说明和解释。

总体开发设计规范

下表是GaussDB(DWS)开发过程中需遵循的开发设计规范全集列表,可以单击链接跳转到对应的规则下了解详细说明。

表1 GaussDB(DWS)开发设计规范全集列表

编号

类别

规则/建议

1

连接管理规范

-

规则1.1 GaussDB(DWS)集群必须配置负载均衡

2

规则1.2 连接数据库完成所需操作后,必须关闭数据库连接(连接池场景除外)

3

规则1.3 开启的事务最后必须提交或回滚

4

规则1.4 应用侧使用连接池场景,其空闲超时配置必须小于服务侧的SESSION_TIMEOUT配置

5

规则1.5 应用侧使用连接池场景,如使用连接SET设置过参数,当将连接归还连接池前,必须进行参数重置

6

规则1.6 应用侧使用连接池场景,如使用连接创建过临时表,当将连接归还连接池前,必须手动清理所创建的临时表

7

对象设计规范

DATABASE对象设计

规则2.1 避免直接使用内置的DATABASE(如postgres、gaussdb等)

8

规则2.2 创建DATABASE时必须选择正确的数据库编码

9

规则2.3 创建DATABASE时必须选择正确的数据库兼容模式

10

建议2.4 存在关联计算的对象放在同一个DATABASE中

11

USER对象设计

规则2.5 禁止使用特殊权限用户运行业务,需遵循权限最小分配原则

12

规则2.6 禁止使用一个数据库用户运行所有业务

13

SCHEMA对象设计

建议2.7 不在其他USER的私有SCHEMA下创建对象

14

TABLESPACE对象设计

规则2.8 禁止自定义TABLESPACE表空间

15

TABLE对象设计(重点)

规则2.9 创建表时必须选择正确的分布方式和分布列

16

规则2.10 创建表时必须选择正确的存储方式

17

规则2.11 创建表时必须选择正确的分区策略

18

建议2.12 表字段的设计要遵循高效、准确原则

19

建议2.13 避免使用自增列或自增数据类型

20

INDEX对象设计(重点)

规则2.14 只创建必要的索引,创建索引必须选择合适的列和顺序

21

建议2.15 列存表通常可不建索引,极致性能场景需正确选择索引类型

22

VIEW对象设计

建议2.16 视图的嵌套需避免超过三层

23

SQL开发规范

DDL操作规范

建议3.1 DDL操作(CREATE除外)避免在业务高峰期和长事务中执行

24

规则3.2 DROP删除对象操作必须明确删除对象范围

25

INSERT操作规范

规则3.3 INSERT多VALUES批插场景使用COPY替代

26

建议3.4 禁止针对普通列存表进行实时INSERT操作

27

UPDATE/DELETE操作规范

建议3.5 避免并发UPDATE/DELETE行存表的同一行

28

建议3.6 避免对列存表频繁或并发执行UPDATE/DELETE

29

SELECT操作规范

规则3.7 禁止执行不下推的SQL

30

规则3.8 禁止多表关联时缺少关联条件

31

规则3.9 多表关联字段数据类型要保持一致

32

建议3.10 尽量避免对关联条件字段和过滤条件字段进行函数运算

33

建议3.11 资源高消耗型SQL需做好压测和并发管控

34

规则3.12 禁止针对行存大表的频繁COUNT

35

建议3.13 避免查询返回超大结果集(数据导出场景除外)

36

建议3.14 查询时避免使用“SELECT *”写法

37

建议3.15 谨慎使用递归语句(WITH RECURSIVE),明确终止条件,确保递归可终止

38

建议3.16 访问对象(表,函数等)时带上SCHEMA名称

39

建议3.17 针对SQL标记注释,唯一标识SQL的归属

40

外表功能开发规范

GDS外表

规则4.1 GDS服务须单独使用服务器部署在DWS集群外

41

协同分析外表

规则4.2 避免同时对多个协同分析外表进行跨集群并发访问

42

存储过程开发规范

-

建议5.1 避免使用复杂的存储过程,避免存储过程嵌套

43

规则5.2 存储过程内避免执行非CREATE类的DDL操作

相关文档