使用多个键模拟表

时间:2017-02-16 00:10:53

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

我的项目需要存储 数据形成为<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>的冗余表,一个在<A,B>上键入,一个在<A,C>上键入,只在事务中一起更新它们,但这会使我的写入加倍并且听起来它会导致并发问题。是否有其他方法可以获得我想要的行为?

1 个答案:

答案 0 :(得分:0)

您需要Secondary Index

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