PowerData

编者荐语:

来自PowerData徐振超同学的精彩文章!

以下文章来源于数据极客圈 ,作者徐振超

[

数据极客圈 .

一入大数据深似海?别怕!“数据极客圈” 就是你的救生圈,走对圈子跟对人,趣析数据、畅聊趋势,快进圈子!

](#)

在 Doris 的分布式架构里,数据划分策略是实现高效存储和查询的关键所在。它主要依靠分区(Partition)和分桶(Bucket)这两层逻辑划分,对数据的分布进行精细化管理。本文将深入探讨这两种策略的设计思路、实际应用场景以及常见问题的解决办法。

一、分区策略:数据管理的逻辑基石

1. 分区的类型

Range 分区:按照指定列的数值范围对数据进行划分,比较适合时间序列数据或者连续数值型数据的场景。例如,我们可以按月对数据进行分区,像 202501、202502 这样的分区设置。

List 分区:依据列的具体值来分配数据,这种方式更适用于离散值的场景,比如根据省份或者城市来进行分区。

2. 分区的模式

手动分区:用户可以通过ALTER语句来灵活地创建或者调整分区,这种模式在数据管理方面具有很强的可控性。

动态分区:系统会根据预先设定的时间规则自动生成新的分区,不过需要用户提前定义好分区的范围。

自动分区:当数据写入时,系统会自动创建对应的分区,但这种模式需要用户对分区的数量进行严格监控,以防止出现脏数据的问题。

3. 分区的优势

提升查询性能:在查询过程中,系统可以通过分区裁剪快速过滤掉无关的数据,从而减少 I/O 的开销。

简化数据管理:用户能够针对不同的分区进行独立操作,比如删除旧数据或者进行冷热分层存储等。

二、分桶策略:数据分布的物理优化

1. 分桶的方式

Hash 分桶:系统会对分桶列的值计算哈希值,然后根据分桶数量取模,将数据均匀地分布到各个分片中。这种方式适用于 JOIN 或者聚合查询的场景。

推荐在以下场景中使用 Hash 分桶:

  • 业务需求频繁基于某个字段进行过滤时,可将该字段作为分桶键,利用 Hash 分桶提高查询效率。
  • 当表中的数据分布较为均匀时,Hash 分桶同样是一种有效的选择。

Random 分桶:数据会被随机分配到不同的分片中,当处理小规模数据时,可以使用load_to_single_tablet参数来优化写入速度。

在以下场景中,建议使用 Random 分桶:

  • 在任意维度分析的场景中,业务没有特别针对某一列频繁进行过滤或关联查询时,可以选择 Random 分桶;
  • 当经常查询的列或组合列数据分布极其不均匀时,使用 Random 分桶可以避免数据倾斜。
  • Random 分桶无法根据分桶键进行剪裁,会扫描命中分区的所有数据,不建议在点查场景下使用;
  • 只有 DUPLICATE 表可以使用 Random 分区,UNIQUE 与 AGGREGATE 表无法使用 Random 分桶;

2. 分桶的作用

避免数据倾斜:Hash 分桶能够让数据在物理存储上更加均匀,从而减少热点问题的出现。

增强查询并行度:合理设置分桶数量可以充分利用计算资源,提升查询的并发处理能力。

优化 Colocate Join:如果多个表采用相同的分桶键和分桶数量,那么在进行 JOIN 操作时,可以减少跨节点的数据传输。

三、常见问题及应对策略

1. 数据倾斜问题

当数据分布不均匀时,会导致某些分片的负载过高。可以通过以下方法来解决:

  • 优先选择高基数的列作为分桶键。
  • 适当增加分桶的数量,例如将分桶数设置为 128 个(单个tablet的数据量推荐1-10GB)。
  • 对倾斜的字段进行预处理,比如添加随机前缀。

2. 分片数量过多问题

分片数量过多会增加元数据的管理负担。可以采取以下措施:

  • 控制每个 BE 节点承载的分片数量不超过 2 万个。
  • 对于冷数据,合并小分片。
  • 避免使用过度细化的分区策略。

3. 冷热数据管理问题

可以将热数据存储在 SSD 上,冷数据存储在 HDD 上。

定期删除或者归档历史分区,例如按天删除 30 天前的数据。

利用 TTL(生存时间)策略来自动清理过期的数据。

4. JOIN 性能优化问题

启用 Colocate Join 功能,确保关联表的分桶键和分桶数量一致。

对于小表,可以采用广播 JOIN 的方式。

避免在倾斜的键上进行 JOIN 操作。

四、最佳实践建议

分区策略选择:如果查询条件中包含时间或者地域等范围条件,优先选择 Range 分区;如果需要对离散值进行管理,则优先选择 List 分区。

分桶数量设置:分桶数量建议设置在 32 到 128 之间,并且要根据集群的规模进行动态调整。

数据分布验证:可以通过SHOW REPLICA DISTRIBUTION命令来检查数据的分布是否均匀。

写入优化:在写入数据时,尽量控制单次写入的分区数量,避免同时写入过多的分区。

通过合理地设计分区和分桶策略,Doris 能够充分发挥分布式架构的性能优势,满足大规模数据分析的需求。在实际应用中,需要根据业务场景的特点,平衡好查询效率、存储成本和管理复杂度之间的关系。

往期推荐

[

](http://mp.weixin.qq.com/s?__b...

Doris BE节点下线卡住?快速排障技巧全攻略!

Doris查询报错-230?别慌,教你几招秒解!

Doris Tablet 损坏如何应对?能恢复数据吗?

Doris的Stream Load那些事儿,你踩过哪些“坑”?

如何排查 Apache Doris 中 "Failed to commit txn" 导入失败问题?

Doris的Routine Load导入指南 

Doris 导入慢该如何排查和优化

Doris 建表与分区问题全解析

Doris Schema Change 常见问题分析

Doris 查询优化秘籍(上篇):关键优化策略剖析

数据极客圈子介绍

圈子1

Apache Doris社区是目前国内最活跃的开源社区(之一)。Apache Doris(Apache 顶级项目) 聚集了世界全国各地的用户与开发人员,致力于打造一个内容完整、持续成长的互联网开发者学习生态圈! 

如果您对Apache Doris感兴趣,可以通过以下入口访问官方网站、社区论坛、GitHub和dev邮件组:

💡官网文档:https://doris.apache.org 

💡社区论坛:https://ask.selectdb.com 

💡GitHub:https://github.com/apache/doris 

💡dev邮件组:mailto:dev@doris.apache.org

      可以加作者微信(Faith\_xzc)直接进Doris官方社区群

圈子2

PowerData是由一群数据从业人员,因为热爱凝聚在一起,以开源精神为基础,组成的数据开源社区。

社区整理了一份每日一题汇总及社区分享PPT,内容涵盖大数据组件、编程语言、数据结构与算法、企业真实面试题等各个领域,帮助您提升自我,成功上岸。

可以加作者微信(Faith\_xzc)直接进PowrData官方社区群

叮咚✨ “数据极客圈” 向你敞开大门,走对圈子跟对人,行业大咖 “唠” 数据,实用锦囊天天有,就缺你咯!快快关注数据极客圈,共同成长!

图片


PowerData
1 声望6 粉丝

PowerData社区官方思否账号