全网首发|阿里资深技术专家数仓调优经验分享(上)

本文是阿里资深技术专家分享的AnalyticDB数仓调优经验,涵盖表设计最佳实践,包括选择合适的表类型、分布键、分区键和主键,以及数据写入的最佳实践,如批量写入和更新数据的策略,旨在提高数据仓库的性能和效率。
摘要由CSDN通过智能技术生成

随着云原生数据仓库AnalyticDB for MySQL(下文统一简称:AnalyticDB)在阿里集团各个业务线、社会上各行各业的推广应用,我们沉淀了一些最佳实践,现在笔者整理在这里,供大家参考,希望对大家有帮助。本篇文章总结了AnalyticDB表的设计的最佳经验、数据写入的最佳经验、高效查询的最佳实践,以及一些常见的问题。

说明:

1.在读这篇文章之前,请先了解AnalyticDB的产品官方文档,以提前适当了解AnalyticDB;

2.本文写的最佳实践主要针对AnalyticDB 3.0,AnalyticDB 2.0在原理上也同样适用。

01 表设计的最佳实践

AnalyticDB,作为一个分布式数据仓库,能够为海量数据的实时分析带来卓越的性能体验。为了充分发挥AnalyticDB在数据分析方面的性能优势,设计表时,需要注意以下几点规则。

(一)选择合适的表类型(维度表or普通表)

· 维度表:又称广播表,是数据仓库中的一个概念,一般存储维度数据。在AnalyticDB中建表语句中有DISTRIBUTED BY BROADCAST的关键字,这些表会在集群的每个节点存储一份数据,因此维度表的数据量不宜太大,建议每张维度表存储的数据不超过2万行。

注意:维度表太大,会导致数据存储空间的膨胀,节点越多膨胀越大,同时也会导致实时写入时性能下降,IOPS会比较高。

· 普通表:也叫作分区表、事实表,一般存储业务的主题数据。普通表可存储的数据量通常比较大,可以存储千万条甚至万亿条数据,可以通过一级分区对数据做分片以及二级分区对数据进行生命周期管理。

(二)选择合适的分布键(一级分区键)

AnalyticDB中创建普通表时,默认需要通过DISTRIBUTED BY HASH(column_name,...)指定分布键,按照column_name的HASH值进行分区。

AnalyticDB支持将多个字段作为分布键。

分布键的选择依据:

  • 尽可能选择值分布均匀的字段作为分布键,例如交易ID、设备ID、用户ID或者自增列作为分布键;
  • 尽可能选择参与JOIN的字段作为分布键,例如进行用户画像分析时,可以选择user_id作为分布键。

注意:分布键不均匀容易导致数据分布不均,严重影响写入和查询的效率,此外也容易使单节点磁盘写满从而导致整个集群锁定不可用。除特殊的业务场景外,建表优先考虑数据是否均匀,然后再考虑JOIN KEY对齐的问题。

(三)选择合适的分区键(二级分区键)

对于表的数据量非常大的表,需要考虑创建二级分区表来对数据做进一步的切分,设置了二级分区后,也能带来两个好处:

1)对数据进行生命周期管理,比如设置了一定数量的二级分区数量后,过期的二级分区会自动被淘汰掉;

2)当查询条件带上了二级分区字段时,是可以对二级分区进行裁剪的,从而提升查询的性能。

  • 直接用ds的值来做分区 PARTITION BY VALUE(ds)
  • ds转换后的天做分区 PARTITION BY VALUE(DATE_FORMAT(ds, '%Y%m%d'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值