创建并验证 2 个属性在 DynamoDB 中是唯一的
Creating and verifying that 2 attirbutes are unique in DynamoDB
我需要创建一种方法,使电子邮件和用户名在 table(或 table 的所有部分都是唯一的,如果需要的话)。除了使 1 个唯一(主键)然后另一个在分区中唯一之外,我似乎找不到其他方法。
我想要一个电子邮件地址检查,以便每个用户都有一个唯一的电子邮件和一个唯一的用户名。
所以数据库不能有:
email username
a@a.com aa
b@b.com aa
或:
email username
a@a.com a
a@a.com b
我需要两者在整个 system/database 中都是独立唯一的。
这是怎么做到的?我正在使用 Lambda 和 DynamoDB。
而且我还需要独立地知道哪一个也不是唯一的。
dynamodb 唯一性仅在 hash_key(或复合键:hash+range)上。
我认为在这种情况下最好的选择是确保应用程序级别的唯一性(在用户名上添加 GSI 并尝试查询新用户名)。在电子邮件上很容易检查唯一性,因为它 table 散列键..
我的理解是,您想确保 user_names
是唯一的并且 email_addresses
是唯一的并且 user_name
映射到 1 且仅映射到 1 email_address
和email_address
映射到 1,并且仅映射到 user_name
。
一种方法是使用两个 DynamoDB table。第一个 (table A) 将使用 user_name
作为 HASH,与之关联的记录将包含有关该用户的所有信息。第二个 table (table B) 将使用 email_address
作为 HASH 并将包含一个附加属性,即 user_name
.
创建新用户时,您可以在 table A 上执行条件 attribute_not_exists(user_name)
如果失败,则 user_name
已经存在,因此新记录不会被创建。如果成功,则 user_name
是唯一的。然后,您可以对 table B 进行条件放置,条件为 attribute_not_exists(email_address)
。如果失败,则 email_address
已在使用中,您必须从 table A 中删除记录或以其他方式解决与用户的电子邮件地址冲突。如果条件 PUT 成功,则您知道 email_address
是唯一的,并且您已成功创建新的唯一用户记录。
这有点复杂,但它确实允许您依靠 DynamoDB 来保证唯一性和一致性,而不是尝试在应用程序级别实现。
我需要创建一种方法,使电子邮件和用户名在 table(或 table 的所有部分都是唯一的,如果需要的话)。除了使 1 个唯一(主键)然后另一个在分区中唯一之外,我似乎找不到其他方法。
我想要一个电子邮件地址检查,以便每个用户都有一个唯一的电子邮件和一个唯一的用户名。
所以数据库不能有:
email username
a@a.com aa
b@b.com aa
或:
email username
a@a.com a
a@a.com b
我需要两者在整个 system/database 中都是独立唯一的。
这是怎么做到的?我正在使用 Lambda 和 DynamoDB。
而且我还需要独立地知道哪一个也不是唯一的。
dynamodb 唯一性仅在 hash_key(或复合键:hash+range)上。
我认为在这种情况下最好的选择是确保应用程序级别的唯一性(在用户名上添加 GSI 并尝试查询新用户名)。在电子邮件上很容易检查唯一性,因为它 table 散列键..
我的理解是,您想确保 user_names
是唯一的并且 email_addresses
是唯一的并且 user_name
映射到 1 且仅映射到 1 email_address
和email_address
映射到 1,并且仅映射到 user_name
。
一种方法是使用两个 DynamoDB table。第一个 (table A) 将使用 user_name
作为 HASH,与之关联的记录将包含有关该用户的所有信息。第二个 table (table B) 将使用 email_address
作为 HASH 并将包含一个附加属性,即 user_name
.
创建新用户时,您可以在 table A 上执行条件 attribute_not_exists(user_name)
如果失败,则 user_name
已经存在,因此新记录不会被创建。如果成功,则 user_name
是唯一的。然后,您可以对 table B 进行条件放置,条件为 attribute_not_exists(email_address)
。如果失败,则 email_address
已在使用中,您必须从 table A 中删除记录或以其他方式解决与用户的电子邮件地址冲突。如果条件 PUT 成功,则您知道 email_address
是唯一的,并且您已成功创建新的唯一用户记录。
这有点复杂,但它确实允许您依靠 DynamoDB 来保证唯一性和一致性,而不是尝试在应用程序级别实现。