2012-04-19 53 views
8

我已經建立了一個應用程序,它目前擁有一個相當標準的用戶表,像這樣:DynamoDB和用戶登錄表

INT ID,VARCHAR電子郵件,VARCHAR密碼

如果我是這個切換到DynamoDB那麼我將如何創建這個表?

如果我使用的電子郵件地址的哈希鍵,那麼我不能夠提供更新您的電子郵件的能力,如果我使用了哈希存儲ID,那麼我需要使用掃描這是昂貴的,並受1Mb限制。

有什麼建議嗎? 謝謝, 馬克

+0

這似乎是http://stackoverflow.com/q/12920884/268898 – 2014-05-12 13:44:40

回答

5

你是否認爲使用ID作爲哈希值會很昂貴,因爲您需要通過電子郵件字段進行過濾?

如果您需要通過非鍵列篩選查詢,則通常會結束爲其創建索引

DynamoDB沒有內置secundary指數,而是實現自己的解決方案很簡單。

主要表可以使用ID哈希,正如你指出的,和differente表將作爲指標,則可能是:

varchar email, int id 

作爲電子郵件的哈希鍵secundary表。如果它允許有多個用戶使用相同的電子郵件,比你可以使用ID爲範圍,以使事情更容易,否則簡單的列會適合。

+1

的副本確實,您可以通過這種方式創建您自己的二級索引,但請記住**您的代碼負責保持它與主表**同步。此外,更新表和索引表的操作不會是原子操作。這可能會也可能不會成爲問題,具體取決於訪問模式的併發性。 – bkirkbri 2012-05-25 14:42:20

+4

DynamoDB現在可以使用全局二級索引(http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html) – 2014-05-12 13:42:16

+0

@JeffWalkerCodeRanger我沒有看到GSI如何幫助解決這個問題。你可以解釋嗎? – rob 2016-02-02 23:42:23

1

有將導致高維護索引不同的表。 我遇到了我的前CTO冗餘模型。

爲您的表:USER

RDBMS:

ID,郵箱密碼

1,senthil3569 @ stack.com,問

DynamoDB:

K EY,ID,電子郵件,密碼

1,1,[email protected],問

senthil3569 @ stack.com,1,[email protected],問

相反存儲一條記錄時,您正在冗餘存儲以使用非索引列進行提取。

希望該解決方案是明確的。

+2

該解決方案如何比使用輔助表的維護方式需要更少的維護?您再次有2條記錄,即使它們在同一個表中,它們也不能在事務中更新。 – ivant 2012-11-30 10:00:11