电子邮件是DynamoDB中客户订单的主键吗?

时间:2019-05-20 05:27:37

标签: amazon-web-services amazon-dynamodb

我有一个要存储在DynamoDB中的订单,其中包含以下字段:

  • 订购日期::2019-03-27 02:09 pm
  • 名字: John
  • 姓氏: Doe
  • 电子邮件: john@example.com
  • 电话: 555-11434
  • 地址::Sunny Shores Lorong K Changi 13
  • 城市:新加坡
  • 邮政编码: 654321
  • 国家/地区:新加坡
  • 状态:新的,已确认的,已交付的

(没有唯一的订单标识符)

首先,我将名字和姓氏“ John Doe”组合为分区键,并以订购日期作为排序键。直到:

我认为我无法查询分区键(客户名称)。我希望能够按客户查找客户订单!

第二个处理该顺序的URL看起来像:https://example.com/2019-03-27/John%20Doe...,即空格确实引起一些混乱。有没有更有效的方式来编码名称?

我最热衷于电子邮件地址,但通过研究发现,电子邮件似乎是一个不好的领域。

访问模式非常简单。需要一种方法:

  • 查询订单
  • 按客户搜索(可以是名称,可以是电子邮件)
  • 按订单状态查询

我尝试制作包含订单状态和订单日期的组合键,但是效果不佳:Replace an old item with a new item in DynamoDB

1 个答案:

答案 0 :(得分:0)

在这种情况下,大多数人都会为用户生成一个UUID,并使其成为分区键。

如果您使用电子邮件地址作为分区键,则意味着您的用户永远无法更改其电子邮件地址,至少没有您自己的创造性编码。

在您的情况下使用电子邮件地址可能是有效的,例如,如果用户永远无法更改电子邮件地址。在这种情况下,您应该只能够对客户端上的电子邮件地址进行URL编码。但是,如果要完全避免这种情况,可以接受Base64编码格式的参数,并在与DynamoDB一起使用之前对其进行解码。

如果您决定生成UUID并将其作为分区键,则可能会创建带有电子邮件地址和订单状态的分区键的GSI。您可以使用这些GSI以指定的访问方式快速访问数据。