BigQuery 与 Cloud SQL 自动扩缩?

Posted

技术标签:

【中文标题】BigQuery 与 Cloud SQL 自动扩缩?【英文标题】:BigQuery vs Cloud SQL autoscaling? 【发布时间】:2021-06-29 22:14:23 【问题描述】:

我声明我是使用 Google Cloud Platform 的初学者。

我正在使用 firebase 开发一个 web 应用程序,因此所有数据都保存在 firestore 上。

现在我需要一个关系数据库,我很困惑 Cloud SQL 和 BigQuery 之间哪个最好。

我的想法是将一部分数据放在 Cloud SQL 上,另一部分放在 Firestore 上。

当事件发生时,来自 Cloud SQL 和 firestore 的数据会合并并上传到 BigQuery 进行分析。

例子:

在 Firestore 上,我有一个产品有一个数组字段,其中 ID 是 存储。这些 ID 与保存在 Cloud SQL 上的数据库相关。什么时候 下订单并将其添加到 Firestore 上的集合中,并且 附加到 BigQuery 上的数据库。

我的问题是,根据我的阅读,Cloud SQL 上不可能自动缩放,而 BigQuery 上却可以。

所以我的问题是你可以在 CloudSQL 上自动缩放吗?

如果做不到,只使用 BigQuery 是否正确?

在 GCP 上是否有其他解决方案可以让您拥有一个关系数据库但具有自动缩放功能?

编辑 1

这是 CloudSQL / BigQuery 上部分数据库的非常简化的模型

我将使用 2/3 内连接查询来获取我需要的所有值。

我不知道如何使它成为非关系型,因此能够在没有大量重复数据的情况下使用 firestore,我愿意接受任何建议

【问题讨论】:

SO 用于对特定问题进行编码,并且询问我们的意见不在指南范围内。例如,询问“哪个更好;X 或 Y”的问题是题外话,因为在不了解整个用例的情况下,我们只是在猜测。 现在我需要一个关系数据库,为什么?您还混合了两种不同类型的数据库,目的尚不清楚;为什么不直接使用 Firebase 并称之为完成?最重要的是,复制数据是 NOSQL 数据库中非常常见的做法 - 这就是所谓的非规范化您的数据。查找它,因为它是一个非常重要的话题。 【参考方案1】:

不确定我的理解是否正确,但我认为您希望获取一些数据(来自一个数据源),将这些数据与 Firestore 集合中的数据组合/处理,然后将结果加载/流式传输到 BigQuery。所有这一切 - 都在运行时运行。问题在于该数据源的选择 - Cloud SQL 或 BigQuery。

从您的角度来看,Cloud SQL 的主要缺点是否正确 - 缺乏可扩展性(自动缩放)。由于“自动缩放”,您想考虑使用 BigQuery 而不是 Cloud SQL?

尚不清楚您期望的请求/查询的速率是多少,以及数据的位置(对全局访问的任何要求),因此可能很难讨论这种情况。总之……

在我看来,想想 BigQuery - 这是一个很棒的“数据库”(从我的角度来看是最好的),但主要用于分析目的......每个查询都有一些“初始”延迟(查询作业获胜' 执行速度不会超过某个阈值),这不能显着减少,而且 BigQuery 表中没有二进制索引。这意味着您的查询每次运行时都需要几秒钟(假设 3 或更多)(除非结果是从缓存中获取的)。如果请求的数量很大 - 它可能会变得昂贵(在 BigQuery 中)并且在用于处理该任务的组件中变得昂贵(即由某些事件触发的云功能) - 因为后者必须等待(并且什么都不做)在查询期间。 此外,BigQuery 非常擅长将数据加载或提取到其中,但在其中的定期数据更新方面不是很好 - 有很多限制。因此,根据您的具体情况,在 BigQuery 中维护操作数据可能不是一个好主意。

如果我排除 BigQuery -

    我们能否为 Cloud SQL 牺牲“自动可扩展性”?

    我们可以使用 Firestore 集合代替 Cloud SQL(并牺牲“关系”属性吗?

    我们可以使用 Cloud SQl 并处理用于查询的表中的数据量,因此没有延迟吗?

不确定我是否能帮上忙,但至少我提供了一些关于这个问题的想法。

【讨论】:

非常感谢您的回答,这对我很有帮助,我已将我的问题编辑得更清楚,如果您能再次帮助我,我将不胜感激【参考方案2】:

'现在我需要一个关系数据库,我很困惑 Cloud SQL 和 BigQuery 之间哪个最好。'

请注意,BigQuery 不能用于替代关系数据库,而且它面向的是运行分析查询,而不是简单的 CRUD 操作和查询(如在 Cloud SQL 中)。这并不意味着 BigQuery 无法处理标准化数据和联接。绝对可以。它只是在非规范化的东西上表现更好,因为 BigQuery 本质上是一个 OLAP 引擎。因此,请尽可能进行非规范化 (please read here)。

您可以使用读取复制来扩展 Cloud SQL。只读副本实例允许将来自主实例的数据复制到一个或多个从属实例。此设置可以提供增加的读取吞吐量。 Please see this.

【讨论】:

以上是关于BigQuery 与 Cloud SQL 自动扩缩?的主要内容,如果未能解决你的问题,请参考以下文章

在 Google Cloud 上的何处配置 Kubernetes 集群自动扩缩器?

自动将数据上传到 Google Cloud Storage 和 BigQuery

在创建 GKE 集群时启用自动扩缩

在 Cloud SQL 中插入 bigquery 结果

在 Cloud Build 步骤中执行 BigQuery 查询

以增量方式将 Cloud SQL 转换为 BigQuery