DynamoDB - Глобальный вторичный индекс по заданным позициям

У меня есть таблица dynamo со следующими атрибутами:

  • id (номер - первичный ключ)
  • title (String)
  • created_at (Number - long) Теги
  • (StringSet - содержит набор тегов, например, android, ios и т.д.).

Я хочу иметь возможность запрашивать теги - получить все теги с тегами android. Как я могу это сделать в DynamoDB? Похоже, что глобальный вторичный индекс может быть построен только на ScalarDataTypes (который является Number и String), а не на элементах внутри набора.

Если подход, который я принимаю, ошибочен, альтернативный способ сделать это либо путем создания разных таблиц, либо для изменения атрибутов также хорош.

Ответ 1

Схема ключа для индекса. Каждый атрибут в схеме ключа индекса должен быть атрибутом верхнего уровня типа String, Number или Binary. Вложенные атрибуты и многозначные наборы не допускаются. Другие требования к ключевой схеме зависят от типа индекса: для глобальный вторичный индекс, хэш-атрибутом может быть любая скалярная таблица атрибут. Атрибут range необязателен, и он также может быть любым скаляром table. Для локального вторичного индекса хэш-атрибут должен быть таким же, как атрибут хэш таблицы, и атрибут диапазона должен быть атрибутом без ключа.

Ответ 2

Вам понадобится создать отдельную таблицу для этого запроса. Если вы заинтересованы в получении всех элементов на основе тега, я предлагаю хранить таблицу с первичным ключом:
хэш: тег
диапазон: id

Таким образом вы можете использовать очень простой Query, чтобы получить все элементы по тегу.