SELECT 查询会更快、开销也更低。增量视图支持所有聚合函数,并且具备良好的扩展性——即使数据规模达到 PB 级也是如此——因为每次查询处理的都只是当前写入数据集中的一小部分最新数据。
相比之下,可刷新materialized view是按计划更新的。这类视图会定期重新执行完整查询,并覆盖目标表中的结果。这与 Postgres 等传统 OLTP 数据库中的materialized view类似。
增量materialized view 与可刷新materialized view 之间如何选择,很大程度上取决于查询本身的性质、数据变化的频率,以及视图更新是否必须在每一行写入时立即反映出来,还是可以接受按周期刷新。理解这些权衡,是在 ClickHouse 中设计高性能、可扩展的materialized view的关键。
何时使用增量materialized view
- 你需要每次插入后都会更新的实时查询结果。
- 你需要频繁对海量数据进行聚合或过滤。
- 你的查询仅涉及对单表进行简单的转换或聚合。
何时使用可刷新materialized view
总结
- 你需要能立即获得缓存的查询结果,并且可以接受数据新鲜度有轻微延迟。
- 你需要查询结果集中的前 N 项。
- 结果集的大小不会随着时间推移而无限增长,否则会导致目标视图性能下降。
- 你正在执行涉及多个表的复杂 JOIN 或反规范化,并且只要任一源表发生更改就需要更新。
- 你正在构建批次工作流、反规范化任务,或创建类似 DBT DAG 的视图依赖关系。
APPEND 与 REPLACE 模式
APPEND 和 REPLACE。这些模式定义了视图刷新时,如何写入该视图查询的结果。
REPLACE 是默认行为。每次刷新视图时,目标表中原有的内容都会被最新的查询结果完全覆盖。这适用于视图应始终反映最新状态的场景,例如缓存结果集。
相比之下,APPEND 允许将新行追加到目标表末尾,而不是替换其现有内容。这使其适用于更多场景,例如捕获周期性快照。当每次刷新都代表一个独立的时间点,或者需要对结果进行历史累积时,APPEND 尤其有用。
在以下情况下选择 APPEND 模式:
- 你希望保留过去刷新的历史记录。
- 你正在构建周期性快照或报表。
- 你需要随时间推移增量收集刷新后的结果。
REPLACE 模式:
- 你只需要最新的结果。
- 过时数据应被完全丢弃。
- 该视图表示当前状态或用于查找。
APPEND 功能的一个应用场景。