​GaussDB(DWS)之数据库对象设计

举报
dual 发表于 2020/08/28 16:34:34 2020/08/28
【摘要】 GaussDB(DWS)分布式数据库业务设计优化1、根据应用逻辑设计数据库根据业务逻辑,抽象出表定义,表其实就是描述了实体的各个属性;根据业务逻辑,判断表在数据库中的存储方式;优化表定义和查询语句;2、行存储和列存储的特点能够根据数据特征自适应的选择压缩算法,平均压缩比7:1;根据预置的时间策略对数据自动压缩;压缩数据可通过数据库接口继续访问,压缩过程对应用透明;压缩数据可直接访问,对业务透...

GaussDB(DWS)之数据库对象设计

1、根据应用逻辑设计数据库

根据业务逻辑,抽象出表定义,表其实就是描述了实体的各个属性;根据业务逻辑,判断表在数据库中的存储方式;优化表定义和查询语句;

2、行存储和列存储的特点

能够根据数据特征自适应的选择压缩算法,平均压缩比7:1;根据预置的时间策略对数据自动压缩;

压缩数据可通过数据库接口继续访问,压缩过程对应用透明;压缩数据可直接访问,对业务透明,无需导入导出,极大缩短历史数据访问的准备时间;

    - 优点:数据库性能瓶颈经常集中在磁盘I/O,数据压缩后,读取数据时,相对于压缩解压,减少I/O能够更好地提高性能;

3、选择行存还是列存

    - 列存适合的场景:统计分析类查询(group,join多的场景);即兴查询(查询条件列不确定,行存无法确定索引);

    - 行存适合的场景:点查询(返回记录少,基于索引的简单查询);增删改比较多的场景;

4、数据分布方式

      复制Replication方式;散列Hash方式

    - 复制(Replication)方式 - 将表中的所有数据复制到集群中每一个DN实例上,主要适用于记录集较小的表(10W行记录以下);

    - 散列(Hash)方式 - 将表中指定字段进行hash运算后,生成对应的hash值,根据DN实例与哈希值的映射关系获得该元组的目标存储位置,适用于数据量较大的表;

5、数据分布策略

分布存储和并发查询是MPP架构数据库的主要优势所在,将一个大数据量表中的数据,按合适分布策略分散存储在多个DN实例内,可极大提升数据库性能;

6、分布列的选择

    - 尽量选择distinct值比较多的列,保证数据均匀分布,分布均匀是为了避免木桶效应,让各个主机对等执行; 

    - 尽量选择Join列或group 列做分布列,尽量选择Join列或group列是为了避免DN之间数据流动, 提高性能;

    - 尽量不要选择filter列作为分布列;

    - 不同DataNode的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列;

7、分布表和复制表的关联查询

    T1为hash表,T2为复制表:T1表的每一部分在各DN上分别与T2表进行连接 -> 各DN上的连接结果集在Coordinator上进行汇聚,产生最终输出的结果集;

8、分布表与分布表关联查询

   T1表和T3表都为分布表:在DN1实例上,T1表的part1部分与T3表的T1部分进行关联 -> T3表的part2、part3、part4复制到DN1上,与T1的part1部分进行关联 -> DN2、DN3、DN4实例操作与DN1类似 -> Coordinator节点对各DN生成的结果集进行汇聚,生成最终数据结果集;

9、分区剪枝

     分区表是将大表的数据分成称为分区的许多小的子集; 

    - 好处:基于时间的查询分区枝剪可以大大提高查询性能;数据容易管理;

    - 建议:业务表一般按照时间或地区做Range分区

10、索引介绍

    索引是对数据库表中一列或多列的值进行排序的一种结构;使用索引可快速访问数据库表中的特定信息;

     分类:行存表索引/列存表索引

   - 行存表索引 - B-Tree索引:适合数据重复度低的数据字段, 例如 身份证号码 等字段;

*B-Tree索引 - 优点:有B-tree索引,就像翻书目录一样,可以通过索引直接定位到要查询的数据(减少了I/O操作);另外查询性能与表中数据量无关;

*注意:不适合键值重复率较高的字段上创建B-Tree索引;

   - 列存表索引 - PCK索引(Partial Cluster Key 局部聚集):一种针对列存的约束条件;一般在建表时创建,在数据导入时,根据约束,在列存存储单元(CU)内对数据做聚集;

*Psort索引:一种列存局部索引,对列存存储单元(CU)内的数据,创建局部索引(MIN/MAX index稀疏索引),提高查询效率;

*PCK索引 - 注意:先创建后使用,之前入库的数据不会自动根据索引聚集;

11、如何选择索引

行存选择索引注意事项:

    - 查询条件列上创建B-tree index, 也可以创建组合索引, distinct值比较少的列不适合建立index;

    - 行存不适合建立太多B-tree index, 然后做数据导入,这样的导入性能非常差; 一般这种情况需要禁用该表的索引,待数据导入后重建index;

列存选择索引注意事项 

    - 查询条件出现最多的列,例如filter条件或者join列上建立partial cluster key(约束);

    - 条件列上可以建立psort index, 也可以创建组合索引;


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。