数据局部性和根表在MySQL或PostgreSQL中不是一个概念,那么为什么它们在Cloud Spanner中很重要。
在Cloud Spanner的架构设计中,选择主键似乎非常重要。
发布于 2017-03-03 20:24:52
我认为数据局部性和根表在MySQL或PostreSQL中与在Cloud Spanner中一样重要,但它们的名称不同。
了解Cloud Spanner是为非常大的数据库设计的,这一点很重要,这些数据库只能使用许多传统的数据库服务器来实现。在使用MySQL或PostreSQL时,解决此问题的常用方法是创建分片。您必须将数据拆分成许多较小的块,并将每个这样的块放在不同的服务器上。当然,这样的解决方案实现和维护起来相当复杂。
Google Cloud Spanner会自动为你做这件事,但重要的是要了解你如何管理这种分片。扳手中的每个碎片都称为拆分。在Spanner中,拆分必须包含来自根表的行以及它的所有子表。通过确定根表,您可以定义潜在的拆分边界,扳手在他认为合适的情况下使用该边界。您不必担心拆分的数量、拆分之间的数据迁移以及拆分的增长或缩小等问题。
如果你把所有的表都设为根,那么Spanner在分片时就会有充分的灵活性,但这是有代价的。很难保持分片之间的一致性。您可以想象这类似于同时在多个MySQL或PostreSQL服务器上执行事务。这是可能的,但并不容易。扳手也会自动为你做这件事,但会有性能上的损失。
您可以在Schema and Data Model documentation中阅读有关此模型的更多信息
主键在扳手架构中也很重要。它根据主键将根表行分配给拆分。连续的关键点可以转到相同的分割。如果您在短时间内对这些行进行了大量事务处理,那么您可能希望它们分布在更多的拆分上。您可以在Best practices中阅读更多内容
当然,如果您可以将数据放在一台服务器上,那么您不会在MySQL或PostgreSQL中看到所有这些概念;)
https://stackoverflow.com/questions/42373774
复制相似问题