4

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

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

4

1 回答 1

2

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

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

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

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

您可以在模式和数据模型文档中阅读有关此模型的更多信息

主键在 Spanner 架构中也很重要。它根据主键将根表行分配给拆分。连续的键可以进入相同的拆分。如果您在短时间内对此类行执行大量事务,您可能希望它们分布在更多拆分中。您可以在最佳实践中阅读更多信息

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

于 2017-03-03T12:24:52.237 回答