我希望在 DynamoDB 表中存储大量照片。 每张照片都可以属于一个“相册”——事实上,一张照片可以属于多个相册。 我想设置数据,以便可以执行 album_id 查询并检索属于该相册的所有 photo_ids。
例如:“获取属于相册 1 的所有照片”
table "album-photo-map"
keys(album_id, timestamp) - photo_id
然后,我可以对表 album-photo-map 执行范围查询,询问属于相册“1”且时间戳大于 0 的 range_key 的所有 photo_id。
问题是——如果有两张照片具有相同的时间戳怎么办? DynamoDB 不允许我拥有多个具有相同 key 的项目。
解决此问题的一种方法可能是将 photo_ids 的二进制列表存储在 album_id 的数据字段之一中,但随后照片列表会受到 64K 的限制,而我不想这样做。
我的想法正确吗?有没有办法解决重复时间戳问题?也许我可以做这样的事情:
timestamp = str(time.time()).replace('.','')
>> 134704419008
并存储它?这样的速度是否足以消除重复问题?
最佳答案
您可以使用图像的哈希值作为 range_key。如果哈希函数选择得好,图像重叠但不相同的可能性很小。这个键会更好,因为它与内容直接相关。
如果性能很重要,您可以简单地在 key 后附加一个随机数。
关于python - 在 DynamoDB 表中存储项目,其中键和范围键可能重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12323943/