我的项目需要存储
数据形成为<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>
上键入,只在事务中一起更新它们,但这会使我的写入加倍并且听起来它会导致并发问题。是否有其他方法可以获得我想要的行为?
答案 0 :(得分:0)
您需要Secondary Index:
在您的情况下,您可以创建一个索引,如:
CREATE INDEX ExampleByAC ON Example(A, C)