2016-03-09 3 views
0

Предположим, у меня были таблицы пользователей и изображений в DynamoDB.Можете ли вы запросить диапазон в GSI в DynamoDB

users table 
userId (hash) name email 

images table 
imagesId (hash) userId filename 

Как я должен настроить диапазон или GSI, если я хочу, чтобы получить все изображения для одного USERID? Если таблица изображений представляет собой составной ключ с идентификатором изображения (hash) и userId (диапазон) и поиск по диапазону (если это возможно)? или должен userId (быть GSI) и запрос просто быть userId?

ответ

1

Похоже, что вы могли бы add a GSI на ваших изображений стол с обратной ключевой схемой вашей таблицы:

  • hash key - userId
  • range key - imagesId
  • filename - дополнительное свойство

Вы может затем запросить этот GSI с userId до g и все его связанные imagesId.

+1

Только для записи вы также можете сохранять изображения в одной таблице 'users' в виде списка карт. Вы сохранили бы себе запрос и глобальный индекс, так как вы могли бы получить изображения только с запросом «GetItem» (это также намного дешевле). –

+0

@MatiasCicero Хороший звонок. Я предполагал, что он уже имел их как существующие таблицы, которые могут быть неверными. @cdub, другой вариант - использовать то, что сказал @MatiasCicero, и использовать ['UpdateExpressions'] (https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html), чтобы изменить вложенные карты. Сохранить в GSI, несколько таблиц и т. Д. Вам решать, как вы хотите хранить и извлекать данные! – mkobit

1

Вы не можете запрашивать, используя только клавишу диапазона в DynamoDB.

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

Смежные вопросы