0

它是最好的發言權用戶ID有一個巨大的表,並存儲在DynamoDB與它的一切或者創建擁有大量的表格的超級非規範化的模式?如何最好地建立一個架構在DynamoDB

讓我們假設我有一個像Flickr一樣的圖像共享網站。我想要:

users (userId, email, passwords, names) 
images (imageId, userId, filename, size) 
comments (commentId, userId, imageId, textOfComment) 

這是一個非常規範化的做事方式(據我瞭解),將3個表。我會根據我需要的來查詢它們。

說,如果我有一個帳戶及希望得到他們所有的圖片:

query = select * from images where userId = @userId 

但是DynamoDB似乎並沒有這樣的工作方式,因爲它通過按鍵partions數據:

用戶id ,圖像標識,commentsId將鑰匙和partion表

我將如何獲得特定用戶的所有圖像?我只是有一張大桌子嗎?(這似乎太糟糕了)?或者我應該把imageId作爲用戶表中的一個集合(如果說一個用戶擁有1,000,000個圖像,可能會變大)?或者,還有更好的方法?

回答

0

我認爲這可以很好地工作。 DynamoDB(或一般NoSQL)的一般經驗法則是:storage = cheap和CPU =昂貴(這也反映在定價中)。

您可以複製數據:在評論你不僅指定image_id,而且所有的圖像性能,例如。這比2個查詢更便宜和更有效率(假設沒有數百個'列')。

你的查詢可以工作,只是設置了正確的索引(設置用戶id圖像作爲哈希和圖像標識的範圍內的全球二級索引,則可以單獨使用該索引的用戶id查詢)。

相關問題