持续的物化视图
本文档简要介绍了持续性具体化视图及其常见用例。在阅读本页内容之前,您应先熟悉 Bigtable 概览。
在 Bigtable 中,持续性具体化视图是持续运行的 SQL 查询的完全托管的预计算结果,该查询会增量更新持续性具体化视图。SQL 查询可以包含对底层 Bigtable 表的汇总和转换。使用持续性具体化视图可以提高性能和效率。
持续性具体化视图中的数据包括:
- 从源表中的数据派生出的汇总值或转换值
- 用于定义分组键的未汇总值
借助连续具体化视图,您可以在提取数据时预先对其进行汇总。此外,持续性物化视图的架构与其来源表不同,它以一种结构呈现来源表数据,这种结构针对查询进行了优化,使其查询的查找模式与在来源表上使用的查询不同。
以下是 Bigtable 中持续具体化视图的主要特征:
- 零维护:持续的物化视图会在后台预计算。对基表的数据更改(包括更新和删除)会在后台自动传播到持续性具体化视图,无需用户执行任何操作。
- SQL 开发模式:持续性具体化视图基于 GoogleSQL for Bigtable 查询(包括 SQL 函数、过滤条件和聚合)构建。
- 与垃圾回收同步:持续性具体化视图会与其来源表的垃圾回收政策保持同步,并会在表数据过期或被删除时自动更新。
- 读写延迟时间不受影响:当实例的集群已充分预配或使用自动扩缩时,持续性具体化视图对源表的性能影响微乎其微。
- 最终一致:系统会在后台计算持续的物化视图。持续性具体化视图的更新可能会延迟,但持续性具体化结果始终会随着时间的推移而保持一致。
您可以使用 Google Cloud CLI、 Google Cloud 控制台中的 Bigtable Studio 查询编辑器或适用于 Java 和 Go 的 Bigtable 客户端库创建持续性具体化视图。
您可以使用以下方法从连续具体化视图中读取数据:
- Bigtable Studio 查询编辑器
- 支持 SQL 查询的 Bigtable 客户端库
- 使用适用于 Java 和 Go 的 Bigtable 客户端库进行的
ReadRows
API 调用
如需了解详情,请参阅从连续具体化视图读取。
何时使用连续性具体化视图
借助持续的物化视图,您可以使用 SQL 定义 Bigtable 数据的新表示法。创建后,持续性 materialized view 会持续自动将源表中的数据重构为 SQL 查询定义的格式。然后,您可以查询持续性具体化视图,而无需查询表并在读取数据后转换或汇总数据。
在以下用例中,Material 视图可以提高查询性能:
- 预先聚合数据:您可以使用连续的具体化视图来汇总各行传入的数据。如果您想快速检索汇总和汇总数据(例如信息中心的指标),此方法非常有用。
- 自动化 lambda 和 kappa 架构:如果您的应用需要混合使用包含历史数据的实时流式传输流水线数据和批处理流水线数据,连续具体化视图可提供对所有数据源的最终一致视图,而无需额外的流式处理工具或自定义 ETL 作业。
如需将持续性具体化视图与其他类型的 Bigtable 视图进行比较,请参阅表和视图。
何时使用计数器
您还可以使用汇总单元格创建分布式计数器,以此来预先汇总数据。
对汇总单元格的写入可立即从写入到的集群读取。系统会在写入数据后处理持续具体化视图,最终使其与源表保持一致。
在以下情况下,请使用计数器,而不是持续的物化视图:
- 不需要过滤条件且不需要跨行进行的汇总
- 如果您需要立即从写入到的集群读取写入内容
当您想要执行以下操作时,请使用持续的物化视图:
- 为对汇总进行的查询生成不同的键
- 查看基表更改在汇总中反映的情况
- 自动合并多行数据
在以下用例中,您可以将计数器和持续性具体化视图组合使用:
- 在汇总单元格中捕获新指标,但保留这些指标的历史汇总
- 在持续性具体化视图中组合指标
资源预配和性能
持续性具体化视图的持续处理会作为低优先级后台作业进行。因此,只要集群的大小足够,对应用性能以及源表的读写延迟时间的影响微乎其微。
最佳实践是,为包含持续性具体化视图的实例中的集群启用自动扩缩,以确保持续性具体化视图中的数据保持最新。自动扩缩功能会自动添加足够的节点来处理处理开销,然后在不再需要时将其移除。这有助于确保在执行持续运行的 SQL 查询期间有足够的计算容量。自动扩缩功能还可以确保您有足够的节点来处理持续性具体化视图的存储需求。
实质性视图会计入每个实例的表数上限(1,000 个)。
存储
对于每个持续性具体化视图,Bigtable 都会存储以下内容:
- 持续性物化视图中的数据
- 中间存储
与任何 Bigtable 表一样,包含持续性具体化视图的实例中的所有集群上都存在该具体化视图。实例中的集群必须有足够的节点来存储源表以及基于该表的任何持续性具体化视图。自动扩缩可确保集群在存储需求发生变化时扩容或缩容。
连续具体化视图必须在与来源表相同的实例中创建,即使连续具体化视图的存储空间与来源表不同也是如此。
持续性物化视图存储
持续的物化视图包含持续的物化视图所依据的 SQL 查询生成的数据。这意味着,它包含 SQL 查询中的汇总子句定义的汇总值,以及用于定义分组键的未汇总值。
中间存储
为了支持将持续性具体化视图与其来源表同步,Bigtable 使用中间存储空间来存储其需要以增量方式更新持续性具体化视图的数据副本。
中间存储空间中的数据量大致相当于在源表中扫描的数据量,用于生成用于定义持续性具体化视图的 SQL 查询的结果。例如,如果您的查询对整个表中的数据进行汇总,Bigtable 会在中间存储空间中保留相当于整个表的数据。基于对特定行键范围或列的查询的持续性具体化视图仅会在中间存储区中保留这些行或列。
中间存储空间会在持续性具体化视图的生命周期内保留,以高效支持对具体化视图的增量更新,并将从源表删除的数据传播到持续性具体化视图。您无法读取中间存储中的数据。如需深入了解中间存储空间用量,请参阅持续性物化视图指标。
复制
在使用复制功能的实例中,连续具体化视图的复制方式与表的复制方式不同。而是,实例中的每个集群都会使用自己的源表副本独立处理持续性具体化视图。例如,这意味着写入集群 A 上的源表的数据会复制到集群 B 上的表,然后再复制到集群 B 上的持续性物化视图。
费用
使用持续性具体化视图不会产生按资源的费用。不过,持续性具体化视图的创建和同步需要处理和存储,因此系统会按标准费率向您收费。创建持续性具体化视图后,您可能会看到以下方面有所增加:
- 存储 - 您需要为在持续性具体化视图中存储数据以及中间存储空间支付费用。如需了解详情,请参阅存储。
- 计算 - 源表和持续性具体化视图的持续同步需要 CPU 处理,您的集群可能需要更多节点来处理额外的后台工作。
与此同时,您可能会发现对源表的某些处理有所减少,例如,您不再对数据执行范围扫描以执行重复计算和其他效率较低的查询。您还可能无需运行流水线作业(例如 Dataflow 或 Spark)来汇总来源数据并将其写回 Bigtable。
如需详细了解价格,请参阅 Bigtable 价格。如需了解有助于您监控持续性物化视图使用情况的指标,请参阅指标。
指标
持续性具体化视图会向 Cloud Logging 报告多个关键指标,您可以使用这些指标来监控持续性具体化视图。
指标 | 说明 |
---|---|
materialized_view/max_delay |
持续性物化视图的处理延迟时间上限 |
materialized_view/storage |
用于连续具体化视图存储的数据量(以字节为单位) |
materialized_view/intermediate_storage |
连续 materialized view 的中间处理所用数据量(以字节为单位) |
table/materialized_view_intermediate_storage |
在此表上定义的持续性具体化视图的中间处理所用的数据量 |
materialized_view/user_errors |
持续性具体化视图的用户数据中的错误数。 用户错误会导致数据无法传播到视图。 |
materialized_view/system_errors |
系统中持续性物化视图的错误数 |
您还可以使用许多 Bigtable 表指标来监控持续性具体化视图,只需将持续性具体化视图 ID 替换为表 ID 即可。具体而言,CPU 指标的细分中包含持续的具体化视图,这有助于您了解其影响。当您使用 Data API 的 ReadRows
方法读取持续性具体化视图时,系统会生成有关每秒请求数、延迟时间和吞吐量的 Bigtable 指标。如需了解详情,请参阅指标。
如需开始使用 Cloud Logging,请参阅查询和查看日志概览。
限制
- 您无法修改定义持续物化视图的 SQL 查询。您必须删除连续具体化视图,然后使用所做的更改创建一个新具体化视图。
- 您无法创建其他持续性具体化视图或逻辑视图的持续性具体化视图。
- 您无法为持续性具体化视图配置垃圾回收政策。所有数据保留都受源表的垃圾回收政策的约束,并且源的垃圾回收会自动反映在持续性具体化视图中。