У моего проекта есть потребность в хранении, так что Данные формируются как кортежи <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)
, что делает его очень легко получить C данную A и B (без ограничения общности), но я не могу найти способ, с помощью API чтения для извлечения B данного A и C. Более того, я ожидаю, что будет большое количество строк, но очень мало значений для A, поэтому простое получение всех строк, префикс A и фильтрация на клиенте, будет чрезмерно дорогостоящей. Еще один подход, который я могу придумать, состоит в том, чтобы иметь две избыточные таблицы <A,B,C>
, один из которых связан с номером <A,B>
, а один - с кодом <A,C>
и только обновляет их вместе в транзакциях, но это удваивает мои записи и звучит так, как будто это приведет к проблемам параллелизма в будущем. Есть ли другой способ получить поведение, которое я хочу?
4 самостоятельного ответа в течение 5 минут. Хорошая работа – RSon1234