2012-04-19 50 views
8

我已经建立了一个应用程序,它目前拥有一个相当标准的用户表,像这样:DynamoDB和用户登录表

INT ID,VARCHAR电子邮件,VARCHAR密码

如果我是这个切换到DynamoDB那么我将如何创建这个表?

如果我使用的电子邮件地址的哈希键,那么我不能够提供更新您的电子邮件的能力,如果我使用了哈希存储ID,那么我需要使用扫描这是昂贵的,并受1Mb限制。

有什么建议吗? 谢谢, 马克

+0

这似乎是http://stackoverflow.com/q/12920884/268898 – 2014-05-12 13:44:40

回答

5

你是否认为使用ID作为哈希值会很昂贵,因为您需要通过电子邮件字段进行过滤?

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

DynamoDB没有内置secundary指数,而是实现自己的解决方案很简单。

主要表可以使用ID哈希,正如你指出的,和differente表将作为指标,则可能是:

varchar email, int id 

作为电子邮件的哈希键secundary表。如果它允许有多个用户使用相同的电子邮件,比你可以使用ID为范围,以使事情更容易,否则简单的列会适合。

+1

的副本确实,您可以通过这种方式创建您自己的二级索引,但请记住**您的代码负责保持它与主表**同步。此外,更新表和索引表的操作不会是原子操作。这可能会也可能不会成为问题,具体取决于访问模式的并发性。 – bkirkbri 2012-05-25 14:42:20

+4

DynamoDB现在可以使用全局二级索引(http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html) – 2014-05-12 13:42:16

+0

@JeffWalkerCodeRanger我没有看到GSI如何帮助解决这个问题。你可以解释吗? – rob 2016-02-02 23:42:23

1

有将导致高维护索引不同的表。 我遇到了我的前CTO冗余模型。

为您的表:USER

RDBMS:

ID,邮箱密码

1,senthil3569 @ stack.com,问

DynamoDB:

K EY,ID,电子邮件,密码

1,1,[email protected],问

senthil3569 @ stack.com,1,[email protected],问

相反存储一条记录时,您正在冗余存储以使用非索引列进行提取。

希望该解决方案是明确的。

+2

该解决方案如何比使用辅助表的维护方式需要更少的维护?您再次有2条记录,即使它们在同一个表中,它们也不能在事务中更新。 – ivant 2012-11-30 10:00:11