物化视图

数据库设计

Lis Sulmont

Curriculum Manager

两种类型的视图

视图

  • 亦称为非物化视图
  • 之前我们这样定义过视图
数据库设计

两种类型的视图

视图

  • 亦称为非物化视图
  • 我们目前对视图的定义

物化视图

  • 物理实体化
数据库设计

物化视图

  • 存储的是查询结果,而非查询本身
  • 查询物化视图即读取已存的查询结果
    • 不会像非物化视图那样重新运行查询
  • 在触发或计划时刷新/重物化
数据库设计

何时使用物化视图

  • 长耗时查询
  • 底层查询结果不常变化
  • 数据仓库场景,因为 OLAP 写入不频繁
    • 降低频繁查询的计算成本
数据库设计

实现物化视图

(在 PostgreSQL 中)

$$

CREATE MATERIALIZED VIEW my_mv AS SELECT * FROM existing_table;

$$

REFRESH MATERIALIZED VIEW my_mv;
数据库设计

管理依赖关系

  • 物化视图常依赖于其他物化视图
数据库设计

依赖示例

$$ X 与 Y 视图的示意图,箭头从 X 和 Y 指向表示依赖关系

数据库设计

管理依赖关系

  • 物化视图常依赖于其他物化视图
  • 刷新时会形成依赖链
  • 同时刷新所有视图效率不高
数据库设计

管理依赖的工具

  • 用有向无环图(DAG)跟踪视图 $$ $$
  • 流水线调度工具

有向无环图示例

Airflow 和 Luigi 的标志

数据库设计

Passons à la pratique !

数据库设计

Preparing Video For Download...