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

标签 python nosql amazon-dynamodb

我希望在 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/

相关文章:

python - 如何锐化opencv python中的边缘

php - 在没有 ACID 数据库的情况下处理 session ?

javascript - 由 amplify 生成的 Graphql 查询运行良好,但由于身份验证规则而引发错误。为什么?

amazon-web-services - 将 DynamoDB 表复制到另一个帐户

Python:独特的单词及其频率降序排列

python - 傅立叶变换逆傅立叶变换python

.net - 用于 .Net 项目的文档数据库/键值存储

python - aws cli dynamodb(ValidationException)错误

python - 每当我在 django 的搜索栏中输入内容时,如何使 require 对象可用?

nosql - 将 NoSQL DB 挂载为文件系统