首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >构造DynamoDB表的最佳方法?

构造DynamoDB表的最佳方法?
EN

Stack Overflow用户
提问于 2020-05-03 02:39:17
回答 1查看 65关注 0票数 0

我正在制作一个网站,用户可以在其中提取图片并给他们添加注释,我正在努力寻找最有效的方法来构建表格。请考虑以下几点:

  • 用户不能看到相同的图像两次,所以我需要操作一些项,这样
  • 就会有大约1000个图片列出在表
  • 中,用户数量未知,但我怀疑我在某个时候会达到400 so的项目大小限制
  • ,所以我想对元数据进行游戏化,这样用户就可以将他们的元数据与其他

进行比较了。

我猜img id和user id作为分区和排序键是最好的选择,尽管这会给每个用户留下1000个条目,当添加新的图像时,我需要为每个用户添加一个项--我可能可以很容易地使用一个辅助索引来完成这个任务。如果可能的话,我想完全避免扫描。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-03 14:59:37

如果您想要一个表,可以考虑此表中的两种类型的项:

1. (未加注释)图像

分区键:imgID_xxx

范围键:img

2.按用户标注的图像

分区键:userID_xxx

范围键:imgID_xxx

注释:some annotation...

因此,最初您将只有1000个未加注释的图像项,用户可以通过GSI查询这些项(hashKey是我在这里所称的分区键):

代码语言:javascript
运行
复制
hashKey  | rangeKey | isImg | ...
img_0001 | img      | 1     | 
img_0002 | img      | 1     |
...
img_1000 | img      | 1     |

当任何用户下载任何图像时,他们都会从这个常见的映像开始,只有在用户注释图像之后才会懒洋洋地生成“按用户标注的图像”项。

如果用户希望对图像进行注释,则需要写入“注释图像”项,该项将由userID进行分区,但在imgID上也应该有一个GSI。

例如,如果user_111注释了两个图像(img_0002img_0042),那么user_222只注释了一个图像(img_0002):

代码语言:javascript
运行
复制
hashKey  | rangeKey | isImg | annotation | imgID    |
img_0001 | img      | 1     | 
img_0002 | img      | 1     |
...
img_1000 | img      | 1     |
user_111 | img_0002 |       | "foo"      | img_0002 |
user_111 | img_0042 |       | "bar"      | img_0042 |
user_222 | img_0002 |       | "baz"      | img_0002 |

这将使用户能够:

查询所有图像(通过第一个GSI):1000个条目-- returned

  • Query --所有它们注释过的图像(它们位于一个单独的partition)

  • Query中--所有在单个图像上(通过第二个GSI)所做的注释--即在本例中,它将返回img_0042的一个项或img_0002.

的两个项

添加新图像时,只需要添加一个项。只有在用户对该图像进行注释之后,您才需要为该用户创建额外的项。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61568970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档