Google Cloud Spanner 和 Cloud SQL 有啥区别?

Posted

技术标签:

【中文标题】Google Cloud Spanner 和 Cloud SQL 有啥区别?【英文标题】:What's the difference between Google Cloud Spanner and Cloud SQL?Google Cloud Spanner 和 Cloud SQL 有什么区别? 【发布时间】:2020-06-10 06:05:17 【问题描述】:

我是 GCP 堆栈的新手,所以我对用于存储数据的大量 GCP 技术感到困惑:

https://cloud.google.com/products/storage

虽然上面的文章中没有提到google cloud spanner,但我知道它是存在的,它是用来存储数据的:https://cloud.google.com/spanner

从我目前的观点来看,我没有看到云 sql(引擎盖下带有 postgres)和云扳手之间有任何显着差异。我发现它的语法有点不同,但是当我应该更喜欢这种技术而不是 spring cloud sql 时,它没有回答。

你能解释一下吗?

附言

我认为 spring cloud sql 是一个传统的数据库,具有自动复制和由 google 管理的水平可扩展性。

【问题讨论】:

【参考方案1】:

我会在之前的答案中添加 Cloud SQL 提供 mysql 或 PostgreSQL 或 SQL Server 的托管实例,以及对 SQL 的相应支持。如果您要从不同位置的 MySQL 数据库迁移,则不必更改查询可能是一大优势。

Spanner 有自己的 SQL 方言,不过最近添加了对 PostgreSQL 方言子集的支持。

【讨论】:

【参考方案2】:

Cloud Spanner 和 Cloud SQL 的主要区别在于 10TB 以上数据的横向可扩展性 + 全球可用性。

Spanner 不适用于一般的 SQL 需求,Spanner 最适合用于大规模的机会。全球每秒 1000 次写入。全球每秒 10,000 至 100,000 次读取。

如果不对数据库进行复杂的分片,使用 NORMAL SQL / MySQL 很难实现上述容量。 Spanner 处理所有这些并允许 ACID 更新(这对于分片数据库基本上是不可能的)。他们通过超精确的时钟来管理冲突来实现这一点。

简而言之,Spanner 不适用于 CRM 数据库,它更适用于组织内的超海量全球数据。而且由于 Spanner 有点贵(与云 SQL 相比),项目应该足够大,足以证明 Spanner 的额外成本是合理的。

你也可以在 Reddit 上关注这个讨论(很好!):https://www.reddit.com/r/googlecloud/comments/93bxf6/cloud_spanner_vs_cloud_sql/e3cof2r/

【讨论】:

Cloud sql 也支持水平缩放:cloud.google.com/community/tutorials/… 这就是我添加 + 全球可用的原因! “全球可用”是什么意思? "全球可用" => 如果 GCP 服务具有最小延迟,可以支持超过 10TB 的数据,则可以在不同区域使用相同的数据库【参考方案3】:

在他们所做的(将数据存储在表中)方面,两者并没有太大区别。不同的是他们如何处理小规模和大规模的数据

当您需要处理具有更高一致性级别和大量数据处理(每秒 +100,000 次读取/写入)的海量数据时,可以使用 Cloud Spanner。 Spanner 提供了更好的可扩展性和更好的 SLO。

另一方面,Spanner 也比 Cloud SQL 贵得多。

如果您只是想以便宜的方式存储客户的一些数据,但又不想面对服务器配置,Cloud SQL 是正确的选择。

如果您计划创建一个大型产品,或者如果您想为您的应用程序(病毒游戏/应用程序)用户的大量增加做好准备,Spanner 就是合适的产品。

您可以在此official paper 中找到有关 Cloud Spanner 的详细信息

【讨论】:

你能解释一下什么是 SLO 吗? SLO (Service-Level Objective) 基本上是产品的可靠性。 SLA(服务水平协议)是您可以从产品中获得的最低限度服务的妥协。 For Spanner 每月 >= 99.999%。 For Cloud SQL 每月 > 99.95% 你能解释一下“处理小规模和大规模的数据”这个短语吗? 我的意思是,Cloud SQL 旨在用于比 Spanner 少得多的数据和事务。在 Spanner 和 Cloud SQL 之间进行选择时,关键是可扩展性、可靠性和价格。如果您深入了解小细节,您会发现许多不同之处,即 Spanner 需要 1 个处理节点来处理每 2TB 的数据。 Here你可以找到更深入地描述扳手的详细论文【参考方案4】:

之前的答案是正确的,Spanner 的主要优点是可扩展性和可用性。虽然您可以使用 Cloud SQL 进行扩展,但写入吞吐量存在上限,除非您进行分片 - 根据您的用例,这可能是一个重大挑战。处理分片 SQL 是 Spanner 在 Google 内部解决的大问题。

【讨论】:

以上是关于Google Cloud Spanner 和 Cloud SQL 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地与多个线程并行查询 google-cloud-spanner?

Google Cloud Spanner 是不是支持压缩?

Google Cloud Spanner 中的自动增量

无法在 Spring Data Cloud Spanner 中将 java.sql.Timestamp 转换为 com.google.cloud.Timestamp

Google Cloud Spanner 是不是支持默认列值?

Google Cloud Spanner 是不是支持任意多对多关系?