私のプロジェクトでは、 のデータが<A,B,C>
のタプルのように形成されるようなストレージが必要です。 <A,B>
と<A,C>
はどちらも有効な主キーです。 ユーザーは私のプロジェクト<A,B,_>
を教えてC
を得るか、私のプロジェクトに<A,_,C>
と伝えてB
を得ることができます。 私はCloud Spannerでこの作業をするのに苦労しています。今、私はテーブルを持っているように:それは非常に簡単(一般性を失うことなく)C与えられたAとBを取得することができますが、私は与えられたBを取得するための読み取りAPIと方法を見つけることができません複数のキーを持つテーブルをシミュレート
CREATE TABLE Example {
A uint64 NOT NULL,
B uint64 NOT NULL,
C string(MAX) NOT NULL,
} PRIMARY KEY (A, B)
AとCがあります。さらに、多数の行が存在すると予想しますが、Aの値は と非常に少ないので、Aを前に付けたすべての行を検索してクライアントでフィルタリングするのは非常に高価になります。私が考えることのできるもう1つのアプローチは、<A,B,C>
の2つの冗長テーブルを持つことです。一つは<A,B>
に、もう一つは<A,C>
に設定し、トランザクションでのみ更新します。しかし、これは私の書き込みと音が2倍になり、同時実行のトラブルを引き起こします。私が望む行動を得るための他の方法はありますか?あなたがSecondary Indexをしたい
第四自己答え:
あなたのケースでは、次のようなインデックスを作成することができます。よくやった – RSon1234