我的项目需要存储数据,以便像<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>
,并且只在事务中一起更新它们,但这会使我的写入加倍,并且听起来会导致并发问题。还有其他方法可以获得我想要的行为吗?