首页 > 解决方案 > 从 Springboot 到 BigQuery 便宜

问题描述

所以我们刚收到 GCP 的账单,比我们预期的要多 wwwaaayyyy。

我们有一个在 GKE 上运行的 Spring Boot 应用程序,但我很快就会将它转移到云运行。此应用程序连接到云 SQL postgress 数据库。我有两份在加拿大和美国运行。由于法律要求,我们必须将原始用户数据存储在不同的数据区域。

我们想要做的是将每个区域的未识别数据导出到单个 BigQuery 实例中,以便我们可以运行分析并开始创建一些 ML 模型。

它最初的设置方式是我们将 pub/sub 导出到 BigQuery。为简单起见,我将每个表导出到流向 BigQuery 中表的不同发布/订阅。

这些默认让每个数据流实例运行 4vCPU,这导致了巨额账单。这 5 个数据流实例占我们账单的 2/3。

还有其他我应该探索的事情吗?我正在研究运行将数据直接导出到 bigquery 的批处理查询。我知道这不会很好地扩展,但我需要达到一个我们有足够的用户来担心扩展的地步。

TIA。

标签: google-cloud-platformgoogle-bigquerygoogle-cloud-dataflowgoogle-cloud-pubsub

解决方案


您的用例有多种解决方案。

将 Cloud SQL 数据与 BigQuery 同步

我建议您查看BigQuery Cloud SQL federated queries,它允许您直接从 BigQuery 查询 Cloud SQL 实例(仅限读取操作)。然后你可以想象一个简单的同步INSERT ... SELECT (from Cloud SQL)...

您可以使用BigQuery 预定查询安排此同步

这里的问题是您的数据位置,因为您在加拿大有 1 个 Cloud SQL,而在美国有另一个,您需要有 2 个数据集,每个区域一个,并执行相同的同步。

因此,如果您需要在所有数据之间执行查询,无论它们的位置如何,BigQuery 都无法做到这一点。您必须拥有相同地理位置中的所有数据(在同一地区或美国(所有美国地区)或欧盟(所有欧洲地区)-> 因此我的问题只针对美国地区)

要使用 BigQuery 将数据从一个区域移动到另一个区域,您可以使用传输服务

去识别化

对于去标识化,您还可以使用 BigQuery 请求从源(Cloud SQL 联合查询或 BigQuery 中已有的数据)中隐藏 PII 数据,并将结果保存在新表中。您还可以运行删除操作以删除临时 BigQuery 表中的纯文本 PII 数据(或使用临时表

您还可以为此使用计划查询,或使用Workflow来编排所有操作


总而言之,对于这些操作,您可以原谅 Dataflow 和您的 springboot 应用程序,我相信您可以使用云原生组件来实现,效率更高,因此成本更低


推荐阅读