【发布时间】:2023-03-07 06:38:01
【问题描述】:
我正在开发一个保存应用程序,基本上用户可以转到一篇文章并单击保存以将其存储在他的个人资料中。应用程序当前使用的是 dynamodb,而不是使用关系数据库。每篇文章都有特定类型的文章。该结构目前用于此应用程序的方式是:
user-id [string][DynamoDBHashKey]
type-of-article [string] [DynamoDBRangeKey]
json [string]
user-id 是用户的唯一标识,type-of-article 也就是文章的类型,json 就是所有以json格式保存的文章。 json格式为:
[{article-id: timestamp}, {article-id: timestamp}]
Article #1 ^ Article #2 ^
article-id (再次)是文章的唯一标识符,timestamp 是存储该文章的时间戳。
注意这是在 dynamodb 开始支持 json 文档作为 Map 和 Lists 之前完成的。而且代码不是我的..它已经完成了..
所以当应用程序需要从已保存的文章中删除文章时,它会调用 dynamo 获取 json 修改 json 然后再次存储。当要添加新文章时,它会做同样的事情。现在,当我想显示所有按时间戳排序的文章时,出现了一个问题。我不得不打电话来获取所有类型并将它们合并到字典中以对它们进行排序。 (在用户配置文件中,我需要显示所有已保存的文章,无论是什么类型,排序)现在应用程序的响应时间超过 700 或 900 毫秒。
我个人认为这不是解决此问题的最佳方法。所以我正在考虑重写以前的代码以实现 dynamodb(列表和地图)的新功能。现在我对 dynamodb 结构的想法是这样的:
user-id [string] [DynamoDBHashKey]
saved-articles [List]
article-type_1
article_1 [Map] {id: article-id, timestamp: date}
article_2 [Map] {id: article-id, timestamp: date}
article-type_2
article_1 [Map] {id: article-id, timestamp: date}
但我对 dynamodb 比较陌生,我制作了一些测试代码以使用列表和地图将其存储在 dynamo 中。我使用低级 api 和对象持久性模型来做到这一点。
现在,我的问题是:这是更好的方法还是不是为什么?什么是更好的方法。
这样我想我可以使用低级别的 Api 来只获取文章类型#2 的已保存文章。或者,如果我需要它们,我就全部调用。
【问题讨论】:
标签: json amazon-web-services amazon-dynamodb