用多个键模拟 table

Simulate a table with multiple keys

我的项目需要这样的存储空间 数据的形成类似于 <A,B,C> 的元组。 <A,B><A,C> 都是有效的主键。 用户可以告诉我的项目 <A,B,_> 并获得 C,或者可以告诉我的项目 <A,_,C> 并获得 B。 我正在努力在 Cloud Spanner 中完成这项工作。现在我有一个 table 像:

CREATE TABLE Example {
  A uint64 NOT NULL,
  B uint64 NOT NULL,
  C string(MAX) NOT NULL,
} PRIMARY KEY (A, B)

这使得在给定 A 和 B 的情况下检索 C 变得非常容易(不失一般性),但是我找不到使用 Read API 来检索给定 A 和 C 的 B 的方法。此外,我希望有大量的行,但很少 A 的值,因此简单地检索所有以 A 为前缀的行并在客户端上进行过滤将非常昂贵。我能想到的另一种方法是有两个 <A,B,C> 的冗余 table,一个在 <A,B> 上,一个在 <A,C> 上,并且只在交易中一起更新它们,但这会使我的写入加倍,听起来会导致并发问题。有没有其他方法可以获得我想要的行为?

你想要 Secondary Index:

对于您的情况,您可以创建如下索引: CREATE INDEX ExampleByAC ON Example(A, C)