在DynamoDB中有效实现这种简单的关系?

时间:2016-09-27 21:49:11

标签: amazon-web-services amazon-dynamodb data-modeling

  1. 用户有电子邮件地址和显示名称。
  2. 这两者必须是唯一的。
  3. 只要两者都没有使用,这两者都必须是可更新的。
  4. 将存在一个User表,其中包含其他非键属性和一个guid ID。
  5. 如果已经使用电子邮件地址或显示名称,如何建模以支持有效的查询检查?

    我应该创建一个guid为Key的表,没有范围,2个单独的GSI用于电子邮件,一个用于显示名称(每个都是键)?两者还将具有第二个字段,其中包含用户的guid id。或者这些应该是完全独立的表格,还是????

    思考,有更好的方法吗? 感谢。

1 个答案:

答案 0 :(得分:0)

我可以设想3种可以设计的方法:

  1. 正如您所提到的,带有guid的表格和2个单独的GSI用于电子邮件,其他用于名称。
  2. 您已声明这两个字段必须是唯一的,因此您可以将其中任何一个作为哈希并为其他字段创建GSI。(这会遇到问题,因为您提到需要更新电子邮件& Name,因为你必须删除旧记录并添加具有相同属性和更新的Hash密钥的新记录)

    这样做的好处是你需要支付更少的费用,因为与#1相比只有一个GSI。

  3. 另一种选择是使用CloudSearch,您的DynamoDB表可以与cloudSearch集成,在此选项中您只需创建一个带有guid的表,无需添加任何GSI,无论何时您想要搜索,您都可以在CloudSearch上搜索得到输出。

    您将在CloudSearch中获得的另一个优势是,您可以查询表格的任何属性,并可以对它们使用不同的过滤器。

    有一件事你需要看到#2和#3之间的价格差异,你可以选择更适合价格和功能的人。

  4. 如果您通过其他方式实现此功能,请随时分享。

    希望有所帮助