Data Science: Streaming: Materialized View

 2nd September 2021 at 12:04pm

通常意义下在 SQL 中建一个 view,view 中语句是在 view 被查询时才执行的。Materialized view(后面简称 MV)则不同,它是在 view 所依赖的表有更新时,实时计算好结果保存下来的。这使得查询 MV 非常快。Oracle / PG / MS SQL Server 都支持 MV。MV 的一个示例:

CREATE MATERIALIZED VIEW experiments AS
SELECT
  experiment_views.name,
  experiment_views.variant,
  COUNT(DISTINCT(experiment_views.user_id)) as unique_users,
  COUNT(DISTINCT(conversions.user_id)) as unique_conversions
FROM experiment_views
LEFT JOIN conversions ON
  conversions.user_id = experiment_views.user_id 
  AND conversions.created_at > experiment_views.created_at
GROUP BY experiment_views.name, experiment_views.variant;

Materialize 是一个实现此理念的数据库:

  • 支持多种输入来源,比如 RDBMS、Kafka、文件等
  • 支持用 PG 兼容的语法构建 MV
  • 支持用 PG 客户端快速查询 MV 的结果