我已經建立了一個應用程序,它目前擁有一個相當標準的用戶表,像這樣:DynamoDB和用戶登錄表
INT ID,VARCHAR電子郵件,VARCHAR密碼
如果我是這個切換到DynamoDB那麼我將如何創建這個表?
如果我使用的電子郵件地址的哈希鍵,那麼我不能夠提供更新您的電子郵件的能力,如果我使用了哈希存儲ID,那麼我需要使用掃描這是昂貴的,並受1Mb限制。
有什麼建議嗎? 謝謝, 馬克
我已經建立了一個應用程序,它目前擁有一個相當標準的用戶表,像這樣:DynamoDB和用戶登錄表
INT ID,VARCHAR電子郵件,VARCHAR密碼
如果我是這個切換到DynamoDB那麼我將如何創建這個表?
如果我使用的電子郵件地址的哈希鍵,那麼我不能夠提供更新您的電子郵件的能力,如果我使用了哈希存儲ID,那麼我需要使用掃描這是昂貴的,並受1Mb限制。
有什麼建議嗎? 謝謝, 馬克
你是否認爲使用ID作爲哈希值會很昂貴,因爲您需要通過電子郵件字段進行過濾?
如果您需要通過非鍵列篩選查詢,則通常會結束爲其創建索引。
DynamoDB沒有內置secundary指數,而是實現自己的解決方案很簡單。
主要表可以使用ID爲哈希,正如你指出的,和differente表將作爲指標,則可能是:
varchar email, int id
作爲電子郵件的哈希鍵secundary表。如果它允許有多個用戶使用相同的電子郵件,比你可以使用ID爲範圍,以使事情更容易,否則簡單的列會適合。
的副本確實,您可以通過這種方式創建您自己的二級索引,但請記住**您的代碼負責保持它與主表**同步。此外,更新表和索引表的操作不會是原子操作。這可能會也可能不會成爲問題,具體取決於訪問模式的併發性。 – bkirkbri 2012-05-25 14:42:20
DynamoDB現在可以使用全局二級索引(http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html) – 2014-05-12 13:42:16
@JeffWalkerCodeRanger我沒有看到GSI如何幫助解決這個問題。你可以解釋嗎? – rob 2016-02-02 23:42:23
有將導致高維護索引不同的表。 我遇到了我的前CTO冗餘模型。
爲您的表:USER
RDBMS:
ID,郵箱密碼
1,senthil3569 @ stack.com,問
DynamoDB:
K EY,ID,電子郵件,密碼
1,1,[email protected],問
senthil3569 @ stack.com,1,[email protected],問
相反存儲一條記錄時,您正在冗餘存儲以使用非索引列進行提取。
希望該解決方案是明確的。
該解決方案如何比使用輔助表的維護方式需要更少的維護?您再次有2條記錄,即使它們在同一個表中,它們也不能在事務中更新。 – ivant 2012-11-30 10:00:11
這似乎是http://stackoverflow.com/q/12920884/268898 – 2014-05-12 13:44:40