【问题标题】:Fetching relevant data with every comment / message using dynamodb使用 dynamodb 获取每条评论/消息的相关数据
【发布时间】:2021-10-16 22:51:56
【问题描述】:

我正在尝试设计我的第一个 DynamoDB 表。一些项目将代表用户数据(例如个人资料图片 URL),一些项目将代表其他用户的评论等等。我正在寻找一种有效的方法来获取每次评论的用户数据。该查询将获取其他人发布的某个用户的所有/最近 10 条评论。问题是我可以在每条评论中复制评论者的信息,但是像图像 URL 这样的东西是可变的,并且可能会经常更改,并且在所有这些地方更新用户数据似乎效率很低,如果这个用户是活跃的并且发布了这么多评论,cmets ,……。我能想到的另一种方法是首先查询评论,然后使用每条评论的用户 ID 进行批量读取以获取评论者的数据,但这会非常低效且成本高昂。

我假设这是一个常见问题,因为我可以想到许多与此类似的用例(YouTube 视频或帖子的评论、Twitter 帐户的关注者……),在所有这些情况下,您都希望获取相关的用户数据(例如图像 URL 和用户名)。那么,有没有更好的方法来处理这个问题?

【问题讨论】:

    标签: database-design nosql amazon-dynamodb many-to-many one-to-many


    【解决方案1】:

    你能让图片 URL 不可变吗?您也许可以在组件之间建立约定。

    例如,如果 ID 1 的评论最多有 1 张图片,则该图片的位置类似于 https://example.com/reviews/1/image.jpg

    如果他们可以有多个图像,那么您可以在同一个 URL 中使用 json 作为索引(具有低缓存控制)并让浏览器找出它。

    我的意思是:非规范化的可变值可能在 DynamoDB 之外更好。

    另一种选择是粉碎一条记录中的所有数据。像这样,您可以使用 DynamoDB 地图和列表来映射评论中的所有图像。只要您使用投影表达式属性有效地查询并且您以手术方式编写,这可能会起作用。否则,如果您一直对整个项目进行操作,您的 RCU/WCU 将会太高。这还取决于您的用例是否可以接受 DynamoDB 文档的最大大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 2022-01-05
      • 2016-06-30
      相关资源
      最近更新 更多