【发布时间】:2018-04-10 12:03:28
【问题描述】:
我正在使用 cron 作业将数据从 google bigquery(googles SQL 数据仓库)写入 mysql。我们使用 google pub/sub 作为中介(从 bigquery 读取,发布到 pub/sub,然后从 pub/sub 订阅并写入 mysql(在 cloudsql 上))。我们在 bigquery 表的每一行上放置了一个 published_flag 布尔值,以表示一行已成功发布。问题在于 bigquery 每个表每天的 UPDATE/INSERT/DELETE 语句数量有限。此外,我们正在处理数十亿行。这个问题的替代解决方案是什么?是否有任何 GCP 服务或 Web 服务可以更优雅地处理这个问题?
我们目前的选择是:
购买更多 bigQuery 配额(不可扩展)
从 bigquery 直接写入 mysql(不健壮和解耦)
在另一个服务(如 google 数据存储)中有另一个表,用于跟踪已发布的行(看起来并不优雅,而且增加了复杂性)。
批量更新发布标志(同样不可扩展)
【问题讨论】:
-
至于 DML 限制,我认为您对此无能为力。 BigQuery 确实不是为 DML 设计的,因此存在硬性限制。但是,您为什么首先将这么多数据从 BigQuery 转移到 MySQL?听起来很奇怪。通常情况正好相反!
-
@GrahamPolley 好问题,在写入 MySql 之前,我们正在聚合和压缩来自 BiQuery 的数据。然后前端可以在从 MySql 查询时进行更快、更便宜的查询。我也知道使用 DML 更新表格不是一个好的解决方案,并且正在寻找一个完全不同的解决方案。
-
您的工作流程如何?我认为 Cloud Dataflow 是最适合这种情况的云产品。
-
@enlelin 我认为您可能是对的,Cloud Dataflow 可能是将数据从 BigQuery 移动到 PubSub 的一种更合法的方式。我假设 Dataflow 有一种方法可以跟踪哪些行已经发布,因此它们不会再次发布?
-
我可以说在这种情况下您不必使用 Pub/Sub。您可以使用 BigqueryIO 从 Bigquery 中读取,并使用 JdbcIO 将其写入 SQL 数据库。如果您担心重复数据,请参阅Exactly-once processing in Cloud Dataflow
标签: google-cloud-platform google-bigquery database-migration google-cloud-pubsub