Asp.net
全球二級索引的 DynamoDB 一致性讀取
為什麼我無法獲得全域二級索引的一致讀取?
我有以下設置:
表:
tblUsers(id作為雜湊)全域二級索引:(
tblUsersEmailIndex電子郵件作為雜湊,id 作為屬性)全域二級索引:(
tblUsersUsernameIndex使用者名作為雜湊,id作為屬性)我查詢索引以檢查給定的電子郵件或使用者名是否存在,因此我不會創建重複的使用者。
現在,問題是我不能對索引的查詢進行一致的讀取。但為什麼不呢?這是我真正需要最新數據的少數場合之一。
根據 AWS 文件:
對全域二級索引的查詢僅支持最終一致性。
在正常情況下,對錶數據的更改會在幾分之一秒內傳播到全域二級索引。但是,在一些不太可能發生的故障情況下,可能會出現更長的傳播延遲。因此,您的應用程序需要預測和處理對全域二級索引的查詢返回的結果不是最新的情況。
但是我該如何處理這種情況?如何確保數據庫中不存在給定的電子郵件或使用者名?
您可能已經經歷過這個: http ://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html
簡短的回答是你不能用全域二級索引做你想做的事(即它總是最終的一致性)。
這裡的解決方案是有一個單獨的表,其中包含您感興趣的屬性作為鍵,並在那裡進行一致的讀取。您需要確保在插入新實體時進行更新,並且您還必須擔心插入成功但不在主表中的邊緣情況(即您需要確保它們同步)
另一種解決方案是掃描整個表,但如果表很大,這可能會有點矯枉過正。
你為什麼要關心是否有人用同一個電子郵件創建了 2 個帳戶?您可以只使用使用者名作為主雜湊鍵,而不是強制電子郵件唯一性。