将项目存储在DynamoDB表中,其中键和范围键可能会重叠

时间:2012-09-07 19:01:49

标签: python nosql amazon-dynamodb

我希望在DynamoDB表中存储大量照片。 每张照片都属于“专辑” - 事实上,照片可以属于多张专辑。 我想设置数据,以便我可以执行album_id的查询并检索属于该相册的所有photo_id。

例如:“获取属于专辑1的所有照片”

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

然后,我可以在table album-photo-map上执行范围查询,要求所有属于专辑“1”的photo_id,其range_key的时间戳大于0。

问题是 - 如果有两张具有相同时间戳的照片怎么办? DynamoDB不会让我有多个具有相同密钥的项目。

解决这个问题的一种方法可能是在album_id的一个数据字段中存储photo_ids的二进制列表,但是然后照片列表会被64K限制,我宁愿不这样做。

我是否正确地考虑过这个问题?是否有重复时间戳问题的解决方案?也许我可以这样做:

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

并存储?这会快到足以消除重复的问题吗?

1 个答案:

答案 0 :(得分:1)

您可以使用图像的哈希值作为range_key。如果很好地选择了散列函数,那么在不相同的情况下图像重叠的可能性很小。这个密钥会更好,因为它与内容直接相关。

如果性能很重要,您只需在密钥上附加一个随机数即可。