什么是数据局部性,为什么它在 Cloud Spanner 与 MySQL 中很重要?

Posted

技术标签:

【中文标题】什么是数据局部性,为什么它在 Cloud Spanner 与 MySQL 中很重要?【英文标题】:What is data locality and why does it matter in Cloud Spanner vs. MySQL? 【发布时间】:2017-07-11 10:57:35 【问题描述】:

数据局部性和根表在 mysql 或 PostgreSQL 中不是一个概念,那么为什么它们在 Cloud Spanner 中很重要。

在您的 Cloud Spanner 架构设计中,选择主键似乎非常重要。

【问题讨论】:

【参考方案1】:

我认为数据局部性和根表在 MySQL 或 PostreSQL 中与在 Cloud Spanner 中一样重要,但它们的名称不同。

请务必了解,Cloud Spanner 专为超大型数据库而设计,只有使用大量传统数据库服务器才能实现这些数据库。当您使用 MySQL 或 PostreSQL 时,解决此问题的常用方法是创建分片。您必须将数据拆分为许多较小的部分,并将每个这样的部分放在不同的服务器上。当然,这样的解决方案实施和维护起来相当复杂。

Google Cloud Spanner 会自动为您执行此操作,但了解如何管理此分片非常重要。 Spanner 中的每个分片都称为拆分。规则是,在 Spanner 中,拆分必须包含根表中的行及其所有子表。通过确定根表,您可以定义 潜在 分割边界,Spanner 会根据需要使用这些边界。您不必担心拆分的数量、拆分之间的数据迁移,因为它们会增长或缩小等。

如果您将所有表设为 root,则 Spanner 将在其分片方面拥有完全的灵活性,但这是有代价的。很难在分片之间保持一致性。你可以想象这类似于同时在多个 MySQL 或 PostreSQL 服务器上执行事务。这是可能的,但并不容易。 Spanner 也会自动为您执行此操作,但会降低性能。

你可以在Schema and Data Model documentation阅读更多关于这个模型的信息

主键在 Spanner 架构中也很重要。它根据主键将根表行分配给拆分。连续键可以转到 同样的分裂。如果您在短时间内对此类行执行大量事务,您可能希望它们分布在更多拆分中。你可以在Best practices阅读更多内容

当然,如果您可以将数据放在单个服务器上,您不会在 MySQL 或 PostgreSQL 中看到所有这些概念;)

【讨论】:

以上是关于什么是数据局部性,为什么它在 Cloud Spanner 与 MySQL 中很重要?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Sleuth 使用教程

Spring Cloud —— Gateway 服务网关

Cloud Firestore 中的每个数据更改都更新了局部变量

什么是Spring Cloud Bus 消息总线,读完这篇文章你就懂了

如何使用 Spring Cloud Sleuth 向每个 span 添加信息

在局部视图上设置放置区的正确方法是啥?