2016-03-06 34 views
0

唯一我需要創建一個方法有(如果需要或臺)的電子郵件和用戶名是acreoss表的所有partions獨特。我似乎無法找到其他方式,然後只製作一個唯一的(主鍵),然後另一個在分區中唯一。創建和驗證2個attirbutes在DynamoDB

我想有一個電子郵件地址檢查,使每個用戶都擁有唯一的電子郵件和獨特的用戶名。

因此數據庫不能有:

email username 
[email protected] aa 
[email protected] aa 

OR:

email username 
[email protected] a 
[email protected] b 

我需要既要在整個系統/數據庫獨立唯一的。

這是如何完成的?我正在使用Lambda和DynamoDB。

而且我也需要獨立知道哪一個是不是唯一的了。

回答

1

我的理解是,你要確保user_names是獨一無二的,email_addresses是獨一無二的,是一個user_name映射到1,只有1 email_addressemail_address映射到1並且只有user_name

執行此操作的一種方法是使用兩個DynamoDB表。第一個(表A)將使用user_name作爲HASH,並且與其關聯的記錄將包含有關該用戶的所有信息。第二個表(表B)將使用email_address作爲HASH,幷包含一個附加屬性user_name

創建新用戶時,可以在條件爲attribute_not_exists(user_name)的條件下對錶A進行條件放置如果失敗,則user_name已存在,因此不會創建新記錄。如果成功,user_name是獨一無二的。然後,您可以對條件爲attribute_not_exists(email_address)的表B進行有條件投放。如果失敗,email_address已被使用,您將不得不從表A中刪除記錄,否則將解決與用戶的電子郵件地址衝突。如果條件PUT成功,那麼您知道email_address是唯一的,並且您已成功創建新的唯一用戶記錄。

這有點複雜,但它確實允許您依靠DynamoDB來保證唯一性和一致性,而不是試圖在應用程序級別實現這一點。

+0

是的,這是我在做什麼。我有2桌子的一部分,但我正在計算今天第3段的一致性問題。另外使用GSI掃描/查詢又如何?它是否適用於所有的分區,就像電子郵件是散列並且用戶名在Email表中是GSI一樣。 – cdub

1

dynamodb獨特性是在HASH_KEY(或複合鍵:散列+範圍)只。

我認爲,在這種情況下,最好的選擇是保證應用層上的獨特性(對用戶名添加GSI並嘗試查詢新的用戶名)。在電子郵件它會很容易檢查的獨特性,因爲它表散列鍵..

+0

是啊,我新,所以我必須弄清楚如何GSI和哈希鍵和範圍內的工作,並 – cdub