Amazon dynamodb DynamoDB和用户登录表

Amazon dynamodb DynamoDB和用户登录表,amazon-dynamodb,Amazon Dynamodb,我构建了一个应用程序,目前它有一个相当标准的用户表,因此: int id,varchar电子邮件,varchar密码 如果我要将它切换到DynamoDB,那么我将如何创建这个表 如果我对电子邮件地址使用哈希键,那么我将无法提供更新您电子邮件的功能,如果我使用哈希来存储ID,那么我需要使用昂贵且受限于1Mb限制的扫描 有什么建议吗? 谢谢 Mark您是否认为使用ID作为哈希值会很昂贵,因为您需要按电子邮件字段进行筛选 如果需要按非键列筛选查询,通常会结束为其创建索引的过程 DynamoDB没有内置

我构建了一个应用程序,目前它有一个相当标准的用户表,因此:

int id,varchar电子邮件,varchar密码

如果我要将它切换到DynamoDB,那么我将如何创建这个表

如果我对电子邮件地址使用哈希键,那么我将无法提供更新您电子邮件的功能,如果我使用哈希来存储ID,那么我需要使用昂贵且受限于1Mb限制的扫描

有什么建议吗? 谢谢
Mark

您是否认为使用ID作为哈希值会很昂贵,因为您需要按电子邮件字段进行筛选

如果需要按非键列筛选查询,通常会结束为其创建索引的过程

DynamoDB没有内置的二级索引,但是实现自己的解决方案非常简单

正如您所指出的,主表可以使用ID作为散列,而不同的表可以作为索引,它可以是:

varchar email, int id

电子邮件是第二个数据表的哈希键。如果允许多个用户使用同一封电子邮件,那么您可以使用ID作为范围,以使事情变得更简单,否则一个简单的列就适合了。

使用不同的索引表将导致高维护。 我从我的前CTO那里找到了一个多余的模型

对于您的表:用户

RDBMS:

id,电子邮件密码

一,,senthil3569@stack.com”她问道

发电机B:

密钥、id、电子邮件、密码

一,一,,senthil3569@stack.com”她问道

senthil3569@stack.com1.senthil3569@stack.com”她问道

不是存储一条记录,而是冗余存储以使用非索引列获取


希望解决方案是明确的。

创建一个带有散列键id(用户UUID)和其他属性的
User
表。 使用哈希键电子邮件创建全局二级索引,您可以根据需要选择排序键(用户活动状态、用户类型)

  • 您可以获取它们并在UUID(用户id)上更新用户
  • 获取具有emailId的用户
  • 获取不带筛选器的活动状态用户(按排序键)

的确,您可以用这种方式创建自己的二级索引,但请记住,您的代码负责使其与主表保持同步。此外,更新表和索引表的操作也不是原子操作。这可能是问题,也可能不是问题,这取决于访问模式的并发程度。DynamoDB现在有全局二级索引可用于此()@JeffWalkerCodeRanger我不知道GSIs如何帮助解决此问题。你能解释一下吗?@RobertOliveira simpt创建一个用户表,其散列键为
ID
(我使用的是guids而不是int),属性为
Email
Password
。然后使用哈希键
Email
创建一个全局二级索引。然后,您可以通过电子邮件查询索引。更新用户行时,您必须按ID进行更新,但索引将自动保持同步。@JeffWalkerCodeRanger但这在运行put时是否提供原子操作?在执行put操作之前,我不需要查询GSI吗?这个解决方案如何比具有辅助表的解决方案需要更少的维护?您又有2条记录,即使它们在同一个表中,也无法在事务中更新。对我来说,这似乎是同一问题的重复
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