暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

现代数据系统中的物化视图

作者:Sooter Saalu |Technical Writer

1什么是数据库中的物化视图?

物化视图是数据库中用来存储操作、计算或查询结果的对象,它们相当于数据的本地快照,可以被重复使用,而无需重新计算或重新获取数据。使用物化视图可以节省处理时间和成本,并允许预先加载经常使用或最耗时的查询。

物化视图与 SQL 数据库中的视图类似。不过虽然视图也是数据表的虚拟副本,但查询结果并未在本地存储或缓存,仅保留查询表达式。因此,视图和物化视图的主要区别在于,每次执行或查询视图时,需要重新计算存储在视图中的结果。

当数据不断变化和更新但只偶尔查看时,通常会使用视图。而当数据需要经常查看,但保存的表不经常更新时,则会使用物化视图。

本文探讨了现代数据库中物化视图的用途、重要性、与数据分析的关系以及其局限性。

2为什么需要物化视图?

创建物化视图的过程通常被称为物化[1],它会缓存查询操作的结果。查询操作可以是基本的 SELECT 语句、JOIN 操作、数据的聚合摘要或任何其他 SQL 查询。物化会创建一个存储在本地占用空间的表。

然后,我们就可以直接查询这个存储在本地的表,不需要从原始数据表执行查询。通过物化视图,经常使用的变量可以和所需的 joins、aggregates 和 filters 一起预先计算,这有助于优化查询,并减少常见和重复查询的性能问题。

物化视图可以是只读的、可更新的或可写入的。在只读物化视图上不能执行 DML 语句(例如 INSERT 和 MERGE 语句);但在可更新和可写的物化视图上也许可以执行这些语句。如果不更新原始数据表中的值,物化视图也会过时。使用触发器可以手动或按计划刷新物化视图,重新计算保存的值。有一些数据库(如: RisingWave[2])可以自动更新物化视图,使其与基本表中出现的新值保持同步。

物化视图的用途

一般来说,使用物化视图的查询相比直接从基本表访问数据的查询要快得多,而且所需的资源更少。现代数据库中尤其如此,因为执行每个查询都有相应的成本,而且还要优化对资源和计算能力的使用。

物化视图可以将对业务逻辑或数据流程重要的常见逻辑编码,并对该逻辑进行预计算,以便在后续流程(例如数据报告或分析)中更高效地使用。

物化视图改善和优化了最重要的或资源密集型查询的执行时间,能更好、更高效的访问即时相关数据,代价是需要一些额外的存储空间。虽然物化视图需要刷新来避免数据过时,但可以利用触发器或具有自动刷新功能的数据库,结合流处理,获取预先计算的实时数据以供查询和操作使用。

3为什么物化视图在现代数据仓库中很有用?

随着组织不断产生数据,用作数据分析、月度数据报告或仪表盘等需要处理的数据量也随之增加。某些操作可能需要访问分布在多个服务器上的多个表中的数据。随着数据规模的增大和分散,执行对这些数据表的查询需要越来越多的计算资源。

OLAP[3] 操作需要通过预期和重复查询进行大量计算,例如提取、转换、加载 (ETL) 或商业智能 (BI) 管道中的查询,而物化视图对此能提供显著帮助。具有增强物化视图功能的数据仓库可以帮助改善查询性能,当查询经常被使用而且需要聚合、过滤、聚类或连接多个数据表时,效果更加明显。

现代数据仓库,特别是利用云计算的数据仓库,按每次查询计价或按照有效计算资源的使用时间计费。物化视图能帮助减少执行查询所需的时间和计算资源。

高效的查询并减少执行时间

为一些业务逻辑和流程预先计算相关变量的结果是简化查询工作量的有效方法,特别是考虑到查询经常被重复使用的情况。

相比其他方法,物化视图维护成本更低、效率更高。虽然缓存数据会产生存储成本,而且在创建时会占用计算资源。但在更新期间,重新运行查询或使用常规视图所需的资源要少得多。通过确保物化视图经过过滤和聚合,只提供必要的数据可以降低维护成本。此外,如果遵循最佳实践并将物化视图用于不需要定期重新计算的数据,还可以降低计算成本。

简化部门之间的查询数据

例如,电商团队了解他们的最佳客户以及客户来自哪里是非常有用的,而这对于营销、运营和商品部门来说同样是有价值的信息。这些信息可能来自不同的表(例如 KYC 表和订单),并以不同的分类和类别(例如按月、按区域和历史最佳)进行整合。这种信息的查询经常会被不同的部门使用。

运营团队可以用它来报告目标,营销团队可以根据信息用不同的折扣和商品来回馈客户,销售可以根据客户数据优化产品推销。比起每次需要这类信息时都需要查询数据库,创建一个物化视图来预先计算这个查询提供给各个部门,这样更快而且占用的资源更少。

通过分化数据权限保护数据安全

使用物化视图可以在组织内限制数据权限,使部门或个人只能访问他们所需的数据子集,而对于可能包含敏感数据和客户信息的数据表他们是没有权限的。这在组织内部为数据库创建了更安全的环境。

4现代功能中的局限性

物化视图这一概念在现代数据库中仍在不断改进和优化。一些数据库对物化视图仅提供有限的操作,而且不同数据库对于物化视图的更新能力并不相同。

“自动维护物化视图”是用于避免物化视图中出现过时数据的重要功能,但目前只有少数系统支持。此外,并不是所有系统都支持增量更新,不支持的系统更新物化视图需要重新计算查询结果,而且每次更新需要从头开始重建视图。

这是物化视图的一大关键局限,因为自动更新物化视图的能力对于构建实时物化视图至关重要。实时物化视图会立即使用来自其基表的新数据进行更新,避免数据过时和额外的计算成本。

我们可以通过提供实时物化视图的解决方案来克服这些局限性,实时物化视图可以用于高效、实时的数据分析,确保最相关的数据值是可用的、预先计算的而且是最新的。

RisingWave 的使命是赋能实时数据分析,通过使流处理变得简单、经济实惠和易于使用,使每个人都能够使用流处理。RisingWave 在数据库内部使用流处理来实时刷新物化视图,使组织能够在实时数据上获得高效且性能优越的查询。这降低了实时数据操作和后续处理的复杂性和成本。

5结论

在这篇文章中,我们了解了物化视图和 SQL 数据库中的传统视图有何不同,其使用场景以及对现代数据体系的重要性。我们还了解了物化视图的局限性以及实时物化视图如何成为更有效的选择。

RisingWave Labs 是一家开发提供实时物化视图的流处理应用程序的成熟公司,他们的产品RisingWave 是一个云原生流数据库,采用 SQL 作为其接口以降低开发实时数据解决方案的难度和成本。RisingWave 可以从各种来源(如 Kafka 和 Pulsar)消费流数据,并利用实时物化视图实现连续查询和动态更新。

请查看 最新的教程[4] ,了解如何使用 RisingWave 作为指标存储库来监控运行指标,并利用 Grafana 进行可视化展示。

6参考引用

[1] 

物化: https://www.javatpoint.com/materialization-in-query-processing

[2] 

RisingWave: https://www.risingwave.com/

[3] 

OLAP: https://olap.com/olap-definition/OLAP

[4] 

最新的教程: https://www.risingwave.dev/docs/current/use-risingwave-to-monitor-risingwave-metrics/




关于 RisingWave
RisingWave是一款分布式 SQL 流处理数据库,旨在帮助用户降低实时应用的的开发成本。作为专为云上分布式流处理而设计的系统,RisingWave 为用户提供了与 PostgreSQL 类似的使用体验,并且具备比 Flink 高出 10 倍的性能以及更低的成本。了解更多:
✨ GitHubrisingwave.com/github
 💻 官网: risingwave.com
 👨‍💻‍ Slack: risingwave.com/slack
📖 文档: risingwave.dev
🎬 B站RisingWave中文开源社区
🔍 知乎RisingWave 中文开源社区

文章转载自RisingWave中文开源社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论