在没有父子表关系的情况下在Google Spanner中使用交错行

时间:2018-02-27 19:16:53

标签: google-cloud-platform google-cloud-spanner

我尝试使用Google Spanner的交错方法来定义一种机制,让来自同一分割中的多个表的行。根据文档(https://cloud.google.com/spanner/docs/schema-and-data-model#database-splits),共享相同主键前缀的行放在同一个拆分中。但是什么是定义"相同的主键前缀"?让我们举一个例子。我有三张主键表:

table A has PK (C1, CA)
table B has PK (C1, CB)
table C has PK (C1, CC)

这三个表共享其主键的第一个元素,列C1。我希望C1具有相同值的所有行都进行相同的拆分。

我可以将表格A定义为BC的父表吗? 我是否需要使用PK (C1)创建虚拟表?

还有其他办法吗?

数据库将有大量读取,许多更新但插入很少。

任何建议都将受到高度赞赏。

由于

1 个答案:

答案 0 :(得分:2)

为了定义子表,子表的主键必须包含父表的整个主键作为前缀。

在您的示例中,您需要创建一个包含主键C1的表。然后,您可以在此父表中交错表A,B和/或C.

父表不一定是虚表。要将值插入子表,父表中必须存在相应的行。因此,在您的示例中,您需要确保父表对于要添加到任何子表的C1的每个值都有一行。