2012-09-07 67 views
1

我正在尋找將大量照片存儲在DynamoDB表中。 每張照片都可以屬於一張「相冊」 - 事實上,一張照片可以屬於多張相冊。 我想設置數據,以便我可以對album_id執行查詢並檢索屬於該相冊的所有photo_id。將項目存儲在DynamoDB表中,其中鍵和範圍鍵可能重疊

例如:「給我拿所有屬於專輯1張照片」

table "album-photo-map" 
keys(album_id, timestamp) - photo_id 

然後我可以在桌子上張專輯,照片地圖上執行一系列的查詢請求屬於專輯所有photo_ids 「1」,且時間戳的range_key大於0.

問題是 - 如果有兩張照片具有相同的時間戳,該怎麼辦? DynamoDB不會讓我擁有多個具有相同密鑰的項目。解決此

一種方式是存儲在該album_id的數據字段的一個photo_ids的二進制名單,但隨後的照片列表變成由64K,我寧願不做限制。

我在想這個嗎?有重複時間戳問題的解決方案嗎?也許我可以這樣做:

timestamp = str(time.time()).replace('.','') 
>> 134704419008 

並存儲?這是否足夠快以消除重複問題?

回答

1

您可以使用圖像的散列作爲range_key。如果散列函數選擇得當,那麼圖像重疊的可能性很小,而不相同。這個關鍵會更好,因爲它與內容直接相關。

如果性能很重要,您可以簡單地在密鑰上附加一個隨機數。

+0

實際上,製作一個隨機的整數字符串並在我的整數時間戳的十進制後修復它可能更有效。所以range_key的格式將是「timestamp.random_num」 – ensnare

+1

事實上,這是我的建議:) – yadutaf

+0

,我怎麼能去從表中刪除項目如果需要的話,在一個單一的操作有什麼建議? – ensnare

相關問題