在写入时汇总值
本文档简要介绍了您可以在写入时汇总 Bigtable 数据的方式。在阅读本文档之前,请确保您熟悉 Bigtable 概览。
许多应用都会跟踪运营指标,这些指标有助于实现应用内报告、实时建议和速率限制等应用场景。此类运营指标的示例包括:
- 周活跃用户数
- 广告展示次数
- 社交内容的观看次数或分享次数
- 媒体串流数量
您可以在面向用户的应用中使用这些指标,也可以将其用作机器学习模型的输入,而且在使用这些指标时通常需要低延迟和高吞吐量。由于在查询时计算此类指标在规模上不切实际,因此在数据提取期间进行预聚合是实时系统的首选方法。
Bigtable 提供了多种在写入时汇总数据的方法,包括无冲突的复制数据类型、ReadModifyWriteRow
请求和连续具体化视图。
通过在写入时汇总 Bigtable 数据,您无需在将数据写入 Bigtable 之前或之后使用任何提取、转换和加载 (ETL) 或流式处理软件来汇总数据。例如,如果您的应用之前向 Pub/Sub 发布了消息,然后使用 Dataflow 读取消息并汇总数据,然后再将数据写入 Bigtable,那么您可以改为直接将数据发送到 Bigtable 中的汇总单元格。
不会发生冲突的复制数据类型
借助 Bigtable,您可以创建仅包含类型为汇总的单元的列族。汇总单元格是一种无冲突的复制数据类型结构,专为增量更新进行了优化。
如果您要从 Apache Cassandra、Redis 或 Valkey 等数据库迁移到 Bigtable,则这些系统中的类似结构称为计数器。
下表列出了支持的操作以及如何处理新写入的值。
操作 |
说明 |
---|---|
总和 |
系统会将单元格值替换为新添加的值与当前单元格值的总和。 |
下限 |
系统会将单元格值替换为新添加的值和当前单元格值中较小的值。 |
上限 |
系统会将单元格值替换为新添加的值和当前单元格值中较大的值。 |
HyperLogLog |
所写入的值会添加到自上次重置以来添加的所有值的概率集合中。单元格值表示该集合的状态。如需详细了解 HLL 算法,请参阅 HyperLogLog。 您可以使用 Zetasketch 库读取 HLL 值。 |
您可以发送 AddToCell
和 MergeToCell
类型的更改来创建和更新汇总单元格。
如需开始在 Bigtable 中进行计数,请参阅在 Bigtable 中创建和更新计数器快速入门。
先读取,然后写入
在写入时聚合数据的另一种方法是使用 ReadModifyWriteRow 请求,该请求可让您通过以事务方式递增或附加值来操控单元格的值。如需详细了解何时使用此方法,请参阅附加。
持续的物化视图
持续性物化视图是汇总来源表中数据的 SQL 查询的预计算结果。视图会在数据提取到源表后持续处理数据,并批量进行更新。这包括更新和删除。使用持续性具体化视图可以提高性能和效率。如需了解详情,请参阅连续具体化视图。