GaussDB数据库设计规范(主备模式)

数据库设计规范

数据库使用最佳实践

名称最佳实践(建议值)
单节点数据量最大值16TB(需考虑备份恢复规格目标)
表和索引的总数10000个(单个Schema的表数量不建议超过200个)
单表的字段个数小于50个
单表的索引个数小于5个
单表的复合索引个数小于3个
复合索引的列数小于5列
单行的行宽小于2000
单个字段的容量小于10MB
SQL语句的长度小于5000

数据库对象命名规范

  1. 不能使用数据库关键字命名用户创建的数据库对象。

查询数据库保留关键字:

select * from pg_get_keywords();
  1. 常见数据库对象命名长度不能超过63个字节

包括数据库名、表名、临时表(非业务表)、表字段、视图名及其字段名、函数名及其参数名。

  1. 应该尽量避免使用双括号括起来的字符串来命名数据库对象。

GaussDB默认不区分SQL中数据库对象的大小写,除非该名称是用双括号括起来的。

数据库对象命名不建议区分大小写,因为会使得问题定位的难度增加。

数据库设计规范

  1. 通过JDBC连接数据库时需指定数据库名称,并且连接成功后不支持切换到其他数据库。
  2. 目前不支持不区分大小写的排序方式。
  3. 数据库管理员需要为业务创建database、schema和user。
  4. 建议使用SCHEMA进行业务隔离(而不是DATABASE)。
  5. 创建数据库推荐使用UTF8字符集(与MySQL utf8mb4等价)。数据库创建后无法修改字符集。
  6. 创建数据库时建议指定LC_CTYPELC_COLLATE参数(与排序有关)。

权限管理规范

  1. 用户授权应尽量满足最小化授权原则。
  2. 建议通过角色而不是用户来管理权限。
  3. 在删除指定的数据库前,应回收用户对其的CONNECT权限,以避免删除失败。

用户和角色为多对多的关系。删除用户时,不会影响到角色。

修改角色的权限,会同时更新到被授予该角色的所有用户。

字符集规范

  1. 客户端连接参数中的字符集必须与数据库字符集保持一致。建议数据库和客户端均使用统一的UTF8字符集。
  2. 目前仅支持对数据库定义字符集,暂不支持对表、字段等指定字符集。

表和视图设计规范

  1. 对于数据量大的表,选择合理的分区方案。目前支持范围分区、列表分区和哈希分区。
  2. 范围分区的上边界分区值应该定义为MAXVALUE,以防止数据溢出。
  3. 单表的分区数量不建议超过100个。单个分区的数据量不建议超过5千万。单个分区的数据容量不建议超过50GB。
  4. 视图定义中不建议嵌套。
  5. 视图定义中应尽量避免排序操作。

视图嵌套可能会因为无法使用索引而导致查询效率底下,建议尽量使用带有索引的基表。

ORDER BY子句在顶层视图上无效,如果必须对输出数据排序,建议在调用视图中使用ORDER BY。

字段设计规范

  1. 尽量使用高效的数值类数据类型。在满足精度的前提下,选择的优先级为:整数 > 浮点数 > NUMERIC。
  2. 尽量少用NUMERIC和DECIMAL数据类型(对CPU资源消耗高)。
  1. 选用合适的字符串数据类型:定长字符类型CHAR(n)或变长字符类型VARCHAR。
  2. 不建议为变长字符类型指定长度。

不建议为变长字符类型(VARCHAR/TEXT)指定长度的原因如下:

  • 定长字段会为长度不够的输入数据补充空格,然后存入数据库,会导致不必要的存储空间浪费;
  • 变长字段如果指定了长度,后续扩展长度时需要对全表进行扫描重写,性能开销大;
  • 变长字段如果指定了长度,每次插入数据时会检查是否长度越界,会有性能开销。
  1. 字符类型字段不应该存储数字类型的数据。
  2. 字符类型字段不应该存储时间或日期类型的数据。

使用字符类型字段存储数字、时间或日期类型的数据,会有额外的数据类型转换开销、并且可能会导致索引失效等问题。

  1. 对于明确不存在NULL值的字段,建议加上NOT NULL约束。
  2. 进行关联操作的字段,字段类型应保持一致,否则会产生额外的数据类型转换开销。
  3. 用于WHERE条件过滤和关联操作的字段,建议都应设置NOT NULL约束。
  1. 同一张表中,大字段(例如VARCHAR(1000)这种字段)不应超过8个。
  2. 建议为字段添加COMMENT信息,以便于未来维护。
  3. 不建议对表预留字段。大部分场景下支持快速新增、删除字段。

索引设计规范

  1. 索引字段必须为NOT NULL。
  2. 不建议单表上创建多个唯一索引。可以使用一个多列唯一索引替代。

同时维护多个唯一索引的开销远大于维护一个多列唯一索引。

  1. 数值类型字段上创建索引的维护效率高于字符和其他数据类型。对于考虑创建索引的id和时间等字段,建议使用数值类型存储。
  2. 建议在关联操作的字段上创建索引。
  1. 复合索引字段个数不应超过5个。
  2. 禁止总字符串长度超过200的复合索引。

存过和函数

  1. 使用存储过程、触发器等实现业务逻辑,应该将业务逻辑放到业务服务器上处理,避免对数据库产生逻辑依赖。
  2. 仅创建对固定入参有固定返回值的函数,函数必须为IMMUTABLE和SHIPPABLE类型。

关于GaussDB中的函数类型:

  • GaussDB支持IMMUTABLE、STABLE、VOLATILE三种类型的函数。
  • 对于IMMUTABLE和SHIPPABLE类型的函数,允许在DN节点上执行,执行效率很高。
  • 如果函数的结果依赖对数据表的扫描结果(例如某列的最大值)、或依赖时间,函数必须为STABLE或VOLATIBLE,且NOT SHIPPABLE,以保证执行结果的正确性。
### 使用 AutoGPTQ 库量化 Transformer 模型 为了使用 `AutoGPTQ` 对 Transformer 模型进行量化,可以遵循如下方法: 安装所需的依赖包是必要的操作。通过 pip 安装 `auto-gptq` 可以获取最新版本的库。 ```bash pip install auto-gptq ``` 加载预训练模型并应用 GPTQ (General-Purpose Tensor Quantization) 技术来减少模型大小和加速推理过程是一个常见的流程。下面展示了如何利用 `AutoGPTQForCausalLM` 类来进行这一工作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model_name_or_path = "facebook/opt-350m" quantized_model_dir = "./quantized_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 加载已经量化的模型或者创建一个新的量化器对象用于量化未压缩过的模型 gptq_model = AutoGPTQForCausalLM.from_pretrained(quantized_model_dir, model=model, tokenizer=tokenizer) ``` 对于那些希望进一步优化其部署环境中的模型性能的人来说,`AutoGPTQ` 提供了多种配置选项来自定义量化参数,比如位宽(bit-width),这有助于平衡精度损失与运行效率之间的关系。 #### 注意事项 当处理特定硬件平台上的部署时,建议查阅官方文档以获得最佳实践指导和支持信息。此外,在实际应用场景之前应该充分测试经过量化的模型以确保满足预期的质量标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GottdesKrieges

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值