Spanner 列式引擎概览

本页面简要介绍了 Spanner 的列式引擎,并说明了如何使用它。

运营数据库通常会提取、转换和加载 (ETL) 数据到 OLAP 系统中以进行分析。此系统通常是数据仓库的一部分。借助 Data Boost,Spanner 已经分离了分析计算,这可确保事务稳定性。

列式引擎是一种存储技术,与基于批次的扫描相比,分析系统使用该技术可加快扫描速度。Spanner 列式引擎使您可以基于最新的运营数据运行分析,并显著提升性能。Spanner 列式引擎可将扫描性能提高多达 200 倍,无需 ETL,同时可保持强一致性。

Spanner 的 Ressi 格式使用跨分区属性 (PAX) 列式布局,以便在数据块内进行高效扫描。不过,此格式会将一行的所有列共同放置在给定数据块内,以实现快速单行查找。与 Ressi 不同,Spanner 的列式引擎会将连续数据块专门用于单个列。这种方法对于顺序扫描来说效率更高,因为 Spanner 只需要读取查询中引用的列。

Spanner 会在后台构建列式表示形式(作为压缩的一部分),并在查询时自动将该表示形式与最新更新合并,以提供强一致性。无法从列式存储中受益的查询可以继续使用 PAX。

可从使用列式引擎中受益的工作负载包括以下这些:

  • 运营报告可从最新的运营数据中提取实时商业智能。
  • 服务型分析能够以交互式延迟为信息中心和自定义细目提供支持。
  • 联合分析可在 BigQuery 中无缝合并来自 Spanner 和其他来源的数据。

Spanner 实例备份不包含列式格式。

有关使用列式引擎的最佳实践

本部分介绍了使用列式引擎时的最佳实践。

大型扫描优化

列式引擎可优化扫描大量数据的查询。对于较小的数据扫描或具有很快就可满足的 LIMIT 子句的查询,基于行的扫描可能更高效。

必要的列

如果您使用 SELECT *,Spanner 会从列式存储中读取所有列。如需尽可能提升性能,请仅指定必要的列。例如 SELECT column1, column2 FROM ...

性能瓶颈识别

列式引擎对于受扫描限制的工作负载非常有效。如需识别受扫描限制的工作负载,请在查询计划中检查表扫描节点中是否存在高延迟级别。如果您的查询不受扫描限制,请先优先进行其他优化。如果您的优化使查询受扫描限制,列式引擎以后便可以带来好处。

最佳列式覆盖范围

在已包含数据的数据库上启用列式引擎后,Spanner 的自动压缩过程会在后台以异步方式将数据转换为列式存储。如需了解查询的受益程度,请查看查询计划中的列式读取占比百分比

高流失数据管理

更新或随机插入操作产生的高写入速率可能会影响列式引擎的性能。纯附加工作负载在使用列式引擎时受到的影响非常小。压缩是一个后台进程,通常会持续数天,但如果数据库大小大幅增加,则可能会更快地进行。或者,设计架构以在分块级上支持纯附加写入。如需了解详情,请参阅在 Spanner 中对按照时间戳排序的数据进行分块

价格

Spanner 列式引擎的结算基于存储空间用量。启用 Spanner 列式引擎并且 Spanner 完成数据压缩后,存储空间用量会增加,以包含新的列式表示形式。列式引擎会提供存储空间指标,可让您监控对存储空间的影响。如需了解详情,请参阅列式数据存储空间指标

Spanner 列式引擎不受每个单元 8 字节开销的影响。

预览限制

  • 您必须使用显式提示,才能为直接向 Spanner 发出的查询或使用 BigQuery EXTERNAL_QUERY 发出的查询启用列式读取。如需了解详情,请参阅查询列式数据
  • 列式引擎仅支持 GoogleSQL 接口。
  • 缺少选择性过滤条件的扫描可能会没有多少改进。

后续步骤