确保 GSI 在 DynamoDB 中不重复
Ensure GSI isn't duplicated in DynamoDB
我的 DynamoDB table 目前有 PK、SK 和一个名为“EmailIndex”的 GSI。
这背后的想法是,当用户创建他们的帐户时,用户名将被设置为 PK,电子邮件将被设置为 EmailIndex GSI。
这应该让我允许用户使用用户名或电子邮件登录。
是否可以可靠地确保没有重复的 EmailIndex 记录?例如,如果两个不同的人在完全相同的时间使用不同的用户名输入完全相同的电子邮件,我如何确保两个用户最终不会使用相同的 GSI 创建记录?
现在我假设 DynamoDB 实际上不可能做到这一点。在这种情况下,acceptable 和推荐的允许用户名或电子邮件登录的方法是什么,而不是强制其中一个?
无法保证 GSI 上的唯一值。我过去为解决此问题所做的工作是为用户创建两条记录,一条包含您今天拥有的数据,另一条以电子邮件地址为关键字。在执行 Put
操作时,您可以使用事务来确保两条记录都成功。您仍然可以将电子邮件放在主记录上的 GSI 中并将其用于查询,或者改用第二条记录并复制数据(如果将投影设置为 ALL
,GSI 会执行此操作) ).
我的 DynamoDB table 目前有 PK、SK 和一个名为“EmailIndex”的 GSI。
这背后的想法是,当用户创建他们的帐户时,用户名将被设置为 PK,电子邮件将被设置为 EmailIndex GSI。
这应该让我允许用户使用用户名或电子邮件登录。
是否可以可靠地确保没有重复的 EmailIndex 记录?例如,如果两个不同的人在完全相同的时间使用不同的用户名输入完全相同的电子邮件,我如何确保两个用户最终不会使用相同的 GSI 创建记录?
现在我假设 DynamoDB 实际上不可能做到这一点。在这种情况下,acceptable 和推荐的允许用户名或电子邮件登录的方法是什么,而不是强制其中一个?
无法保证 GSI 上的唯一值。我过去为解决此问题所做的工作是为用户创建两条记录,一条包含您今天拥有的数据,另一条以电子邮件地址为关键字。在执行 Put
操作时,您可以使用事务来确保两条记录都成功。您仍然可以将电子邮件放在主记录上的 GSI 中并将其用于查询,或者改用第二条记录并复制数据(如果将投影设置为 ALL
,GSI 会执行此操作) ).