当数据工程师遇上“Doris魔法视图“,性能飞升的背后藏着什么?

数据工程师小红正对着一堆复杂的查询语句发愁。屏幕上的JOIN语句像盘根错节的树根,聚合计算仿佛无休无止的循环,大数据查询的性能就是提升不上去…
"要是有什么魔法可以提前把这些计算都准备好就好了。“小红揉着发酸的眼睛,嘟囔着。
突然,他想起了最近在技术分享会上听到的"Doris异步物化视图”。这不就是传说中的"查询加速魔法"吗?
JOIN预计算、自动刷新、透明改写…一个个关键词在脑海中闪现。
"等等,这不就是我需要的解决方案吗?"小红瞬间来了精神…

[tu]

Doris 2.1异步物化视图 - 释放数据魔法的神奇法宝

凌晨,数据工程师小红正对着一堆复杂的查询语句发愁。复杂的多表JOIN、层层嵌套的聚合计算,让查询性能迟迟得不到提升。这时,他突然想到了Doris 2.1版本中发布的多表异步物化视图功能…"

[tu]

[tu]

从思维导图和架构图中,我们可以直观地看到Doris 2.1版本异步物化视图的核心特性和架构设计。这就像搭建了一座数据加速的立交桥,让复杂的查询分流变得轻松自如。

异步物化视图本质上是一张预计算的表,它存储了预先定义好的聚合计算结果。这就像给数据库配备了一个"智能缓存",把常用的计算结果提前准备好。当用户发起查询时,Doris会自动判断是否可以使用这些预计算结果,从而大幅提升查询性能。

以电商场景为例,假设需要统计每个商品在不同时间维度(天、周、月)的销售情况。如果每次查询都要从原始订单表计算,显然会很耗时。这时我们就可以创建一个基于商品和时间维度的异步物化视图,提前计算好各个时间粒度的聚合结果。用户查询时直接使用物化视图,响应速度可提升10倍以上。

异步物化视图不仅支持简单的聚合统计,更重要的是可以处理复杂的多表JOIN场景。它能把多个表JOIN后的结果物化下来,极大降低即时计算的压力。而且,物化视图的刷新方式非常灵活,可以根据业务需求选择手动刷新、定时刷新或自动触发刷新。

Doris异步物化视图的黄金搭配

让我们先用一个真实的业务场景来感受物化视图的威力。小红负责的某电商平台每天都要分析数百万条订单数据,涉及商品、用户、促销等多个维度的统计分析。传统的即时计算方式让服务器不堪重负,而异步物化视图则为他带来了全新的解决思路。

[tu]

接下来,一起来瞅瞅它的魔法之处。

分区魔法师

在Doris 2.1版本中,异步物化视图的分区设计堪称一绝。似一位数据魔法师,能够根据业务需求灵活变换分区策略。

多列分区允许我们同时按多个维度进行数据切分。比如在数据湖场景中,我们可以按照时间和地区两个维度建立分区,方便数据的管理和查询。部分分区则让我们能够只关注"热"数据,比如只保留最近30天的数据分区,既节省存储空间又提升查询效率。

[tu]

分区上卷更是一个令人眼前一亮的特性。它能够将基表的细粒度分区智能合并成粗粒度分区:基表按天分区,而分析需求常常是按月度统计,这时分区上卷就能自动将30个日分区合并成1个月分区,大大减少分区数量。如下示例:

基表有多列分区

Hive 外表有很多多级分区的情况,例如一级分区按照日期,二级分区按照区域。物化视图可以选择 Hive 的某一级分区列作为物化视图的分区列。

Hive 的建表语句如下:

CREATE TABLE hive1 (
`k1` int)
PARTITIONED BY (
`year` int,
`region` string)
STORED AS ORC;

alter table hive1 add if not exists
partition(year=2020,region="bj")
partition(year=2020,region="sh")
partition(year=2021,region="bj")
partition(year=2021,region="sh")
partition(year=2022,region="bj")
partition(year=2022,region="sh")

当物化视图的创建语句如下时,物化视图mv_hive将有三个分区:(‘2020’),(‘2021’),(‘2022’)

CREATE MATERIALIZED VIEW mv_hive
BUILD DEFERRED REFRESH AUTO ON MANUAL
partition by(`year`)
DISTRIBUTED BY RANDOM BUCKETS 2
PROPERTIES ('replication_num' = '1')
AS
SELECT k1,year,region FROM hive1;

当物化视图的建表语句如下时,那么物化视图mv_hive2将有如下两个分区:(‘bj’),(‘sh’):

CREATE MATERIALIZED VIEW mv_hive2
BUILD DEFERRED REFRESH AUTO ON MANUAL
partition by(`region`)
DISTRIBUTED BY RANDOM BUCKETS 2
PROPERTIES ('replication_num' = '1')
AS
SELECT k1,year,region FROM hive1;

秒懂使用场景

异步物化视图最擅长解决四类经典场景:

首先是多表JOIN查询加速。传统JOIN查询就像一场复杂的相亲配对,要把符合条件的数据一一匹配,非常耗时。物化视图则像一个"红娘",提前帮你把匹配结果存好,查询时直接取用就行。

其次是数据建模场景(ETL)。在复杂的数据分析中,经常需要构建多层指标。异步物化视图支持嵌套创建,可以基于已有的物化视图再创建新的物化视图,完美支持层层递进的指标体系。

[tu]

第三是湖仓一体查询加速。当查询Hive等外部数据源时,网络传输往往成为性能瓶颈。这时可以创建物化视图将热点数据缓存在Doris内部,既保证了数据一致性,又能享受本地查询的极致性能。

最后是实时联邦查询场景。面对分散在各个数据源的数据,物化视图可以作为一个"数据中转站",将多源数据统一整合并提供高效查询。

透明改写的魔法时刻

了解上述场景后,在Doris的江湖中,异步物化视图还有一项独门绝技 - 透明改写,妥妥的魔术师,在幕后悄悄为我们优化查询性能。用户只需正常编写SQL,Doris会自动判断是否可以使用物化视图来加速查询。

[tu]

改写的艺术

透明改写如果是一场精心编排的舞蹈,那么每一步都需要完美协调。

第一步是结构匹配。Doris会分析查询的模式,看是否能对应到已有的物化视图。这就像在图书馆找书,先要确定书的分类是否正确。比如查询包含orders和lineitem两张表的JOIN,系统就会优先考虑使用包含这两张表JOIN结果的物化视图。透明改写的是物化视图符合SPJG这种结构(select from where join group by)。

第二步是条件补偿。查询条件往往比物化视图更严格,这时需要在物化视图的基础上补充过滤条件。想象一下,物化视图存储了所有时间的数据,而查询只需要最近一周的数据,系统就会自动添加时间过滤条件。

第三步是聚合改写。这是最富有魔法色彩的步骤,系统能够基于物化视图的预计算结果,推导出查询需要的聚合结果。就像变魔术一样,把month级别的汇总数据,变成day级别的明细。

[tu]

实践锦囊

在生产环境中使用异步物化视图,有一些关键的优化技巧:

首先是分区设计。对于时序性强的数据,建议采用时间维度作为分区键,并使用分区上卷技术。这样可以在保持查询弹性的同时,有效减少分区数量。老数据访问频率低的场景,甚至可以用部分分区特性,只保留最近N天的热数据。

其次是刷新策略。根据数据更新频率和时效性要求,选择合适的刷新方式。对于准实时分析场景,可以设置较小的刷新间隔;对于T+1报表场景,则可以选择在业务低峰期进行批量刷新。新版本还支持数据变更自动触发刷新,进一步降低运维成本。

再次是资源控制。物化视图的构建和刷新也会消耗系统资源。通过指定workload_group,可以限制资源使用上限,避免影响在线业务。遇到大促这样的高峰期,甚至可以暂时关闭自动刷新,待峰值过后再恢复。

[tu]

最后是监控告警。定期检查物化视图的使用情况,包括命中率、刷新成功率等指标。对于长期未被使用的物化视图要及时清理,避免占用存储空间。一旦发现刷新失败或性能异常,也要第一时间介入处理。

数据工程师的欢呼声

在这里插入图片描述

回到开头的故事。通过合理使用异步物化视图,小红成功将复杂查询的响应时间从分钟级降到了秒级,服务器CPU使用率也降低了70%以上。更重要的是,他不再需要每天被繁重的数据统计工作困扰,可以把更多精力放在数据分析和业务优化上。

异步物化视图就像一位得力助手,在数据查询的"江湖"中为我们披荆斩棘。它用智能的改写机制让复杂查询变得简单,用灵活的分区策略让海量数据易于管理,用多样的刷新方式满足不同场景需求:

透明改写加速

支持常见算子的透明改写,如 Select、Where、Join、Group by、Aggregation 等,可以直接通过建立物化视图,对现有的查询进行加速。例如在 BI 报表场景,某些报表查询延时比较高,就可以通过建立合适的物化视图进行加速。

自动刷新

物化视图支持不同刷新策略,如定时刷新和手动刷新,也支持不同的刷新粒度,如全量刷新、分区粒度的增量刷新等。

外表到内表的物化视图

可以对存放在 Hive、Hudi、Iceberg 等数据湖系统上的数据建立物化视图,加速对数据湖的访问,也可以通过物化视图的方式将数据湖中的数据同步到 Apache Doris 内表中。

物化视图直查

用户也可以将物化视图的构建看做 ETL 的过程,把物化视图看做是 ETL 加工后的结果数据,由于物化视图本身也是一个表,所以用户可以直接查询物化视图。

数据魔法之旅永无止境,让我们期待Doris未来会带来更多惊喜。也许在下一个版本中,我们会看到更智能的优化策略,更强大的预计算能力,让数据分析变得更加简单高效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值