【大数据面试题】27 讲下Doris的物化视图

一步一个脚印,一天一道面试题。

物化视图概念

物化视图,顾名思义,是将一个查询的结果预先计算并存储为物理表的形式。这意味着,原本需要在运行时动态执行的复杂查询,现在变成了直接从已经计算好的结果表中读取数据,极大地提升了查询速度。它是一种典型的"空间换时间"的策略,牺牲一定的存储空间来换取查询性能的显著提升。

优点

  • 自动维护:Doris自动维护物化视图的数据,无论基础表有新的数据导入还是删除操作,都能确保物化视图与基础表的数据保持一致,无需人工干预。(方便,减少人工)
  • 查询优化 :查询时,Doris能够自动匹配最优的物化视图,并直接从该视图中读取数据,从而跳过不必要的计算步骤,加快查询速度
  • 资源优化 :通过物化视图,可以将计算密集型的操作在数据加载时完成,减少了计算资源消耗

建议使用场景

  • 存储占用小 :这不是必须的,但由于物化视图是需要占用存储空间的,是"空间换时间"的典型,所以尽量使用较少的列(少于10列)。
  • 复杂查询加速 :对于包含多表JOIN或复杂聚合函数的查询,通过预计算结果,物化视图可以提供即时的查询反馈。

物化视图举例

假设有一个大型电商公司的数据库中包含一张名为orders的表,记录了所有订单信息,包括order_id(订单ID)、user_id(用户ID)、product_id(商品ID)、order_date(订单日期)等字段。公司经常需要统计按天的用户购买次数(用户活跃度UV)和商品浏览次数(页面访问量PV)。

为了加速这类固定维度的聚合查询,可以创建一个物化视图。例如,创建一个物化视图daily_uv_pv,预先计算每天每个用户的购买次数和每个商品的浏览次数:

sql 复制代码
CREATE MATERIALIZED VIEW daily_uv_pv
AS
SELECT 
    user_id, 
    product_id, 
    DATE(order_date) AS order_day,
    COUNT(DISTINCT order_id) AS user_activity_count, -- UV计数
    COUNT(order_id) AS product_view_count       -- PV计数
FROM orders
GROUP BY user_id, product_id, DATE(order_date);

这样,当业务方需要查询特定日期的用户活跃度或商品浏览量时,可以直接从daily_uv_pv物化视图中快速获取结果,而不需要每次查询时都去扫描和汇总庞大的原始订单表,大大提高了查询效率。同时,Doris系统会自动管理物化视图的数据同步,确保数据的时效性和准确性。

我是近未来,祝你变得更强!

相关推荐
roman_日积跬步-终至千里39 分钟前
【分布式理论13】分布式存储:数据存储难题与解决之道
分布式
(; ̄ェ ̄)。2 小时前
在Nodejs中使用kafka(三)offset偏移量控制策略,数据保存策略
分布式·后端·kafka·node.js
binbinxyz3 小时前
【Kafka系列】Kafka 消息传递保障机制
分布式·kafka
vx153027823624 小时前
CDGA|企业数据治理实战:从疏通“信息河”到打造优质“数据湖”
java·大数据·人工智能·cdga·数据治理
T.O.P115 小时前
分布式ID介绍&实现方案总结
分布式
AIRIOT5 小时前
AIRIOT智慧消防管理解决方案
大数据
Golinie5 小时前
【Go | 从0实现简单分布式缓存】-1:LRU缓存淘汰策略与单机并发缓存
分布式·缓存·golang
哔哩哔哩技术6 小时前
ClickHouse BSI与字典服务在B站商业化DMP中的应用实践
大数据
想做富婆7 小时前
数仓搭建(hive):DM搭建(数据集市层)
大数据·数仓搭建