我已经建立了一个应用程序,它目前拥有一个相当标准的用户表,像这样:DynamoDB和用户登录表
INT ID,VARCHAR电子邮件,VARCHAR密码
如果我是这个切换到DynamoDB那么我将如何创建这个表?
如果我使用的电子邮件地址的哈希键,那么我不能够提供更新您的电子邮件的能力,如果我使用了哈希存储ID,那么我需要使用扫描这是昂贵的,并受1Mb限制。
有什么建议吗? 谢谢, 马克
我已经建立了一个应用程序,它目前拥有一个相当标准的用户表,像这样:DynamoDB和用户登录表
INT ID,VARCHAR电子邮件,VARCHAR密码
如果我是这个切换到DynamoDB那么我将如何创建这个表?
如果我使用的电子邮件地址的哈希键,那么我不能够提供更新您的电子邮件的能力,如果我使用了哈希存储ID,那么我需要使用扫描这是昂贵的,并受1Mb限制。
有什么建议吗? 谢谢, 马克
你是否认为使用ID作为哈希值会很昂贵,因为您需要通过电子邮件字段进行过滤?
如果您需要通过非键列筛选查询,则通常会结束为其创建索引。
DynamoDB没有内置secundary指数,而是实现自己的解决方案很简单。
主要表可以使用ID为哈希,正如你指出的,和differente表将作为指标,则可能是:
varchar email, int id
作为电子邮件的哈希键secundary表。如果它允许有多个用户使用相同的电子邮件,比你可以使用ID为范围,以使事情更容易,否则简单的列会适合。
的副本确实,您可以通过这种方式创建您自己的二级索引,但请记住**您的代码负责保持它与主表**同步。此外,更新表和索引表的操作不会是原子操作。这可能会也可能不会成为问题,具体取决于访问模式的并发性。 – bkirkbri 2012-05-25 14:42:20
DynamoDB现在可以使用全局二级索引(http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html) – 2014-05-12 13:42:16
@JeffWalkerCodeRanger我没有看到GSI如何帮助解决这个问题。你可以解释吗? – rob 2016-02-02 23:42:23
有将导致高维护索引不同的表。 我遇到了我的前CTO冗余模型。
为您的表:USER
RDBMS:
ID,邮箱密码
1,senthil3569 @ stack.com,问
DynamoDB:
K EY,ID,电子邮件,密码
1,1,[email protected],问
senthil3569 @ stack.com,1,[email protected],问
相反存储一条记录时,您正在冗余存储以使用非索引列进行提取。
希望该解决方案是明确的。
该解决方案如何比使用辅助表的维护方式需要更少的维护?您再次有2条记录,即使它们在同一个表中,它们也不能在事务中更新。 – ivant 2012-11-30 10:00:11
这似乎是http://stackoverflow.com/q/12920884/268898 – 2014-05-12 13:44:40