0

我的项目需要存储数据,以便像<A,B,C>. <A,B>并且<A,C>都是有效的主键。用户可以告诉我的项目<A,B,_>并获取C,也可以告诉我的项目<A,_,C>并获取B。我正在努力在 Cloud Spanner 中完成这项工作。现在我有一张像这样的桌子:

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>,一个 keyed on<A,B>和一个 keyed on <A,C>,并且只在事务中一起更新它们,但这会使我的写入加倍,并且听起来会导致并发问题。还有其他方法可以获得我想要的行为吗?

4

1 回答 1

0

你想要一个二级索引

在您的情况下,您可以创建一个索引,例如: CREATE INDEX ExampleByAC ON Example(A, C)

于 2017-02-16T00:10:53.057 回答