在没有父子 table 关系的 Google Spanner 中使用交错行

Using interleaved rows in Google Spanner without parent-child table relationship

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

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

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

我可以将 table A 定义为 BC 的父 table 吗? 我需要用 PK (C1) 创建一个虚拟 table 吗?

还有其他方法吗?

数据库将有很多读取、很多更新但很少插入。

任何建议将不胜感激。

谢谢

为了定义 child table,child table 的主键必须包含 parent 的整个主键作为一个前缀。

在您的示例中,您需要使用主键 C1 创建 table。然后你可以在这个 parent table.

中插入 tables A, B, and/or C

parent table 不能完全是一个虚拟 table。要将值插入 child table,相应的行必须存在于 parent table 中。因此,在您的示例中,您需要确保 parent table 对于要添加到任何 child table 的每个 C1 值都有一行.