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