Таблица DynamoDB и пользователя

Я создал приложение, и в настоящее время он имеет довольно стандартную пользовательскую таблицу:

int id, электронная почта varchar, пароль varchar

Если бы я должен был переключить это на DynamoDB, то как мне создать эту таблицу?

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

Любые советы, пожалуйста? Благодаря, Марк

Ответ 1

Вы говорите, что было бы дорого использовать ID как хэш, потому что вам нужно фильтровать по электронной почте?

Если вам нужно отфильтровать ваши запросы несимвольным столбцом, вы часто заканчиваете создание index для него.

DynamoDB не имеет встроенного secundary index, но довольно просто реализовать свое собственное решение.

В основной таблице может использоваться ID как хэш, как вы указали, а другая таблица будет служить индексом, это может быть:

varchar email, int id

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

Ответ 2

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

Для вашей таблицы: USER

RDBMS:

id, пароль по электронной почте

1, senthil3569 @stack.com, спрашивает

DynamoDB:

KEY, id, email, пароль

1, 1, [email protected], спрашивает

senthil3569 @stack.com, 1, [email protected], спрашивает

Вместо сохранения одной записи вы резервируете резервную копию с помощью не индексированных столбцов.

Надеемся, что решение понятно.

Ответ 3

Создайте таблицу User с идентификатором хеш-ключа (пользовательский UUID) и другими атрибутами. Создайте глобальный вторичный индекс с хеш-ключом Email, и у вас есть возможность выбрать ключ сортировки в соответствии с вашими требованиями (статус пользователя активен, тип пользователя).

  • вы можете получить их и обновить пользователя по UUID (идентификатор пользователя)
  • Получить пользователя с emailId
  • Получить пользователя с активным статусом без фильтра (по ключу сортировки)
UserTable:
   Type: AWS::DynamoDB::Table
   Properties:
     TableName: UserTable
     AttributeDefinitions:
       - AttributeName: id
         AttributeType: S
       - AttributeName: email
         AttributeType: S
       - AttributeName: status(optional sort key according to your requirement)
         AttributeType: S
     KeySchema:
       - AttributeName: id
         KeyType: HASH
     ProvisionedThroughput:
       ReadCapacityUnits: 5
       WriteCapacityUnits: 5
     GlobalSecondaryIndexes:
       - IndexName: UserDetail
         KeySchema:
           - AttributeName: email
             KeyType: HASH
           - AttributeName: status(option)
             KeyType: RANGE
         Projection:
           ProjectionType: ALL
         ProvisionedThroughput:
           ReadCapacityUnits: 5
           WriteCapacityUnits: 5