首页 > 解决方案 > BigQuery 是否适合频繁更新部分数据?

问题描述

我在 GCP 上,我有一个用例,我想从远程机器接收大量事件流。要组成最终事件 - 我需要摄取并“组合”X 类型的事件以及 Y 和 Z 类型的事件。

事件类型 X 架构:SrcPort ProcessID

事件类型 Y 架构:DstPort ProcessID

事件类型 Z 架构:ProcessID ProcessName

我目前正在使用 Cloud SQL (PostgreSQL) 来存储我的大部分关系数据。我想知道是否应该在这个用例中使用 BigQuery,因为我预计会有大量此类事件,而且我可能有未来计划对这些数据进行分析。

我也想知道如何为这些事件建模。我关心的是这些事件之间的“JOIN”,所以“JOIN”ed事件将是:SrcPort、SrcProcessID、SrcProcessName、DstPort、DstProcessID、DstProcessName

当“最终事件”完成后,我想将其发布到 PubSub。

我可以创建一个去规范化的表,只根据事件进行部分更新(BigQuery 在更新性能方面的表现如何?),然后在完成后发布到 pubsub。

或者,我可以将这些作为原始事件存储在单独的“表”中,然后定期 JOIN 完成事件,然后发布到 pubsub。

我不确定 PostgreSQL 在存储和处理大量事件方面有多好。

BigQuery 吸引我的地方是轻松处理大量数据的舒适性。

标签: postgresqlgoogle-bigquerygoogle-cloud-sql

解决方案


如果您已经在 Postgres 上拥有此功能,我建议您应该将 BigQuery 视为一个补充系统,用于存储数据副本或用于分析目的。

BigQuery 为您提供不同的方法来降低成本和提高查询性能:

  1. 阅读有关按小时分区和集群的信息,记住这一点,您只“扫描”您感兴趣的分区以执行“事件完成”。
  2. 您可以使用计划查询定期运行 MERGE 语句以生成物化表(您可以根据需要多次计划)
  3. 您可以在某些情况下使用物化视图

推荐阅读