Разработка индекса DynamoDB с запросом по двум скалярным столбцам - PullRequest
0 голосов
/ 23 марта 2020

У меня есть набор данных из миллионов строк, которые я хочу сохранить в DynamoDB.
Набор данных имеет 3 столбца, и первые два столбца вместе уникальны, как показано ниже:

C1 C2 C3
A  1  15
B  1  20
C  1   5
A  2  17
B  2  10
A  5   5
B  5  25
C  5   5
C  6   5

Запросы Я хочу использовать эти данные следующим образом:

Для C1 = A, для C2 >= 2 получить максимальное значение C3.
Ожидаемый результат: 17

Для C1 = A получите значения C2 и C3 с сортировкой C2.
Ожидаемый результат: [[1,15],[2,17],[5,5]]

Этот запрос будет выполняться очень часто, поскольку элементы в БД часто меняются , Поэтому сканирование или фильтрация во время запроса не являются опцией.

То, что я пробовал:

Я установил C1 в качестве первичного ключа, C2 в качестве ключа сортировки, чтобы я мог достичь 2-й запрос.

Мне нужно как-то сохранить максимальное значение C3, чтобы я мог получить его без сканирования. Поскольку я не могу установить и C2, и C3 в качестве ключа сортировки (диапазона), я создал локальный вторичный индекс с ключом сортировки C3. Благодаря этому я мог сохранить C3 отсортированным, но это было бы независимо от C2. Это требует от меня сканирования C2, чтобы найти значение C2, которое больше, чем мой параметр в запросе.

Я создал разреженный глобальный вторичный индекс, чтобы обозначить значение строки, имеющей самое высокое значение. И я обновил этот столбец по мере добавления новых элементов. Тем не менее, этот подход ограничивает меня в предположении значения C2, с которым я хочу запросить >= для этого индекса.

Я думал о слиянии двух столбцов в один, поскольку предлагал похожие проблемы. Но оба столбца являются скалярными, и я не делаю операции равенства ни для одного из этих столбцов. Следовательно, я не мог объединить два скалярных столбца.

Возможно, я что-то пропустил в своих испытаниях. Или я могу создать больше таблиц, если это необходимо. Я знаю, что это длинный вопрос, спасибо за любую помощь заранее.

...