2012-09-07 25 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

相关问题