编者荐语:
来自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的Stream Load那些事儿,你踩过哪些“坑”?
如何排查 Apache Doris 中 "Failed to commit txn" 导入失败问题?
完
●
数据极客圈子介绍
●
圈子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官方社区群
叮咚✨ “数据极客圈” 向你敞开大门,走对圈子跟对人,行业大咖 “唠” 数据,实用锦囊天天有,就缺你咯!快快关注数据极客圈,共同成长!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。