【问题标题】:Need some advice on DynamoDb Tables schema需要有关 DynamoDb 表架构的一些建议
【发布时间】:2020-10-10 12:16:15
【问题描述】:

我正在建立一个评论网站。 它将审查酒店、餐馆和咖啡馆(我们称它们为列表), 所以会有三类listing。 这些列表中的每一个都会有评论。

现在最终用户将能够喜欢/不喜欢列表或个人评论。 我正在使用 AWS Amplify 构建此站点。

前端查询数据的方式如下。

  1. 搜索框可能希望查看给定位置(例如悉尼/伦敦等)的餐厅。
  2. 出现餐厅列表后,最终用户可以点击每家餐厅查看对该餐厅的评价。
  3. 最终用户可以喜欢/不喜欢餐厅,也可以对个人评论进行相同的喜欢/不喜欢。

我是 NoSQL 数据库概念的新手,因此需要一些关于如何构建它的建议。下图显示了我的想法。

【问题讨论】:

    标签: database-design nosql amazon-dynamodb schema


    【解决方案1】:

    NoSQL 模式建模应基于数据的访问模式执行。根据您提供的访问模式

    1. 可以在列表中搜索给定位置的餐厅 辅助分区,除此之外,您还可以对它们进行排序 使用列表评级。
    2. 对于每家餐厅,您可以获得 与此相关的评论。您是否存储原始评论 这里有斑点?如果是这样,请注意最大行大小和 考虑压缩review或者使用S3来存储原文 审查。
    3. 增加 Review_Likes 和 Dislikes 的列 将解决您的用例 3。

    但是,要完全验证您的架构,我需要以下信息。在清单表中,主分区键 - 类别值非常少(酒店、咖啡厅、餐厅等),这可能会导致热分区。 DynamoDB 期望主键为 uniformly distributed 以获得最佳性能。

    【讨论】:

    • 谢谢阿迪亚。 > 您是否在此处存储原始评论 blob?是的,我正在考虑这样做。我可能会将它存储在 S3 中,一直在阅读各种论坛上的类似推荐。 > 分区键 - 类别值非常少,随着我添加更多类别,这将随着时间的推移而增长,但在前几个月(6),我将只关注这三个。如果是这样的话,你有其他建议吗?谢谢
    • 存储在 S3 中是一种选择,但是请检查 S3 延迟和您的 API 延迟要求,因为从 S3 获取数据的时间可能 > 1 秒。关于您的 Query1 的一个快速问题:如果您想获取某个城市的餐馆列表,您的查询可能必须过滤掉餐馆,因为您的辅助分区和排序键没有它。您还可以考虑创建一个复合二级键 (category_type | rating),它可以避免过滤并降低读取 IOPS。有限的类别不应该给您带来问题。
    • > 您还可以考虑创建一个复合二级键(category_type | rating),它可以避免过滤并降低您的读取 IOPS --- 感谢 Aditya,这是有道理的。我目前正在构建一些样板应用程序以使所有组件都能正常工作,数据库设置应该在今天晚些时候,我会尽快回复您。
    猜你喜欢
    • 2013-07-24
    • 2011-03-03
    • 2012-03-15
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多