【发布时间】:2022-01-01 04:03:47
【问题描述】:
我的 DynamoDB 表中目前有以下数据:
person_id_and_gender | ttl(timestamp) | person_movie_rate |
-------------------------------------------------------------------------------------------------------
id_1:male | 123456789 | amazing_spider_man:0.8, iron_man:0.674, dr_strange:0.32, ... |
id_9:non-binary | 123000089 | batman:0.9, iron_man:0.874, terminator:0.55, lala_land:0.5 ...|
...
如您所见,此表试图将一个人与其/她/他们的评分之间的关系保存到不同电影的列表中。随着新电影数量的迅速增加,条目大小限制(400k)已经达到,因此我们必须切断一些评分以适应一个人的条目。
当前配置:person_id_and_gender 是该表的主键,它没有排序键。
有没有更好的方法来重新设计这个架构,这样即使我们有越来越多的评分,我们也不会爆炸条目?
请注意:
-
所有列名/属性都是由组成的。它们仅用作示例(尽管可能是不好的示例)。
-
在我们的用例中,我们可能有更多的“性别”(男性、女性、非二元等等……)
-
在我们的用例中,我们假设一个人可能有不同的性别,换句话说,我们可能会看到
id_2:male和id_2:female出现在同一张表中,我们需要这两个数据点。
更新:
当前的查询模式只是获取person_id_and_gender 的电影评分列表,即单个人的所有评分。
【问题讨论】:
-
我能想到的一种方法:
person_movie_rate对象可以存储在单独的 S3 存储桶中,并且该对象的链接可以存储在 dynamo db 中。 -
无论何时设计 NoSQL 架构,您都需要了解您想要服务的访问模式 - 那些是什么?
-
@AmeyaS 谢谢,这就是我尝试的方法:我将评级列表保存为 csv 文件并将其上传到 s3,但它导致上传作业经常超时。我花了大约 30 分钟使用 32 个线程上传数据。
-
@Maurice 谢谢我已经更新了这个问题。对于未来的 NoSQL 问题,我会这样做。
标签: amazon-web-services nosql amazon-dynamodb