使用建议
概述
异步物化视图通过预先计算和存储查询结果来提高查询性能,但每次刷新可能带来较大开销。本文档提供异步物化视图的使用建议。 物化视图的刷新原理参考:刷新原理
使用场景建议
推荐使用场景
复杂聚合查询
- 场景描述: 包含多表连接、复杂聚合函数(如SUM、AVG、COUNT)或窗口函数的查询
- 优势:避免每次执行时重新计算复杂逻辑
报表
- 场景描述: 需要按固定时间点(如每日午夜)生成一致性快照的报表
- 优势:确保所有用户看到相同时间点的数据
计算密集型分析
- 场景描述: 包含复杂数学计算或数据转换的分析查询,如客户生命周期价值计算、预测分析模型
- 优势:预先计算结果,减少运行时资源消耗
数据仓库中的星型/雪花模式
- 场景描述: 事实表与多个维度表连接的场景,如销售事实表与产品、时间、地区等维度表的连接
- 优势:预先物化连接结果,加速分析查询
湖仓加速
- 场景描述: 查询数据湖可能由于网络延迟和对象存储的吞吐限制而变慢
- 优势:利用 Doris 本地存储加速优势,加速数据湖分析
数仓分层
- 场景描述: 基表中包含大量原始数据,查询需要进行复杂的 ETL 操作
- 优势:对数据建立多层异步物化视图实现数仓分层
不推荐使用场景
基础表频繁更新
- 场景描述: 源表数据变更非常频繁(如每分钟多次更新)
- 问题:异步物化视图难以保持同步,刷新成本过高,需要考虑定期刷新。
简单查询
- 场景描述: 仅涉及单表扫描或简单过滤的查询
- 问题:异步物化视图带来的收益无法抵消刷新成本
需要实时(1~5分钟内)数据的场景
- 场景描述: 业务要求数据必须是最新版本
- 问题:异步物化视图存在数据延迟
源表数据量很小
- 场景描述: 基础表只有少量记录(如几百行)
- 问题:异步物化视图优化效果不明显
刷新策略选择建议
异步物化视图提供三种主要刷新策略,每种策略适用于不同的业务场景和数据特征。合理选择刷新策略对于平衡数据新鲜度和系统性能至关重要。
刷新策略详解
手动刷新
工作方式:
- 由用户通过显式命令或外部系统调度触发
适用场景:
- 对数据实时性要求不高的报表系统
- 数据仓库中的历史数据分析
- 需要与特定业务流程同步刷新的场景
- 大规模数据刷新需要协调系统资源时
优缺点:
优点:完全控制刷新时机,可避开业务高峰期
缺点:需要额外管理刷新调度,需要做好容错,方式外部循环不断的刷新。
定时刷新
工作方式:
- 按固定时间间隔自动刷新
- 最小时间单位为分钟级
- 可指定第一次运行任务的开始时间
适用场景:
- 周期性业务指标监控
- 阶梯式数据管道
- 时间敏感度分级的报表体系
- 有规律波动的源数据
优缺点:
优点:定时数据处理,确定性的数据延迟
缺点:数据新鲜度局限,相关视图的刷新时序需要人工编排
配置约束:
不建议将所有物化视图设置为高频定时刷新,达到类实时的目的,这会导致:
- 系统资源持续被占用
- 刷新作业相互竞争资源
- 频繁增删partition/tablet等,对be造成较大压力
触发式刷新
工作方式:
- 当基表数据变更时自动触发刷新
适用场景:
- 多层物化视图架构的上层视图
- 基表变更频率较低的场景
优缺点:
优点:数据新鲜度高,自动化程度高
缺点:可能造成刷新风暴,难以预测系统负载
配置约束:
不建议对基础层物化视图使用触发式刷新,除非:
- 能明确知道基表刷新频率不高(如:几十分钟变更一次)
刷新策略组合建议
分层策略
- 基础层:定时刷新(如每小时)
- 中间层:定时或触发式刷新
- 展示层:触发式刷新或手动刷新
业务关键性分级
- 关键实时业务数据:不建议使用异步物化视图
- 常规分析数据:定时刷新(每日/每小时)
- 历史/归档数据:手动刷新
数据变更频率适配
- 高频变更:定时刷新(较长间隔)或手动刷新
- 低频变更:触发式刷新或短间隔定时刷新
- 批量变更:变更后手动刷新
刷新频率建议
此建议仅为通用建议,实际还需根据系统资源,异步物化视图数量,其它业务资源占用等情况综合评估
实际刷新耗时 | 刷新频率 |
---|---|
小于15s | 大于等于5分钟 |
小于10分钟 | 大于等于1小时 |
小于1小时 | 大于等于1天 |