【问题标题】:Amazon DynamoDB (NoSQL db) one-to-many relationshipAmazon DynamoDB (NoSQL db) 一对多关系
【发布时间】:2016-05-27 20:50:45
【问题描述】:

自从Parse.com 服务宣布关闭后,我决定使用 Amazon Web Services 重建我的应用程序。据我了解 Parse 使用 NoSQL (MongoDB) 数据库,我能够在 Parse 仪表板中设置一对多关系。

我成功创建了一个带有哈希"_id"的DynamoDB表"Post"

{
 "_id":"1"
}

和表"Comment" 与哈希"_id" 和范围"post_id"

{
 "_id":"1",
 "post_id":"1",
 "text":"my comment"
}

现在,我想获取帖子 _id = 1 以及与该帖子相关的所有 cmets。实现这一点的基本方法是什么?我想定义一个 Lambda 函数,它将对 DynamoDB 进行两次查询:

  1. 获取帖子
  2. 使用 post_id 获取评论
  3. 使用评论模型构建帖子并返回

设计一对多关系是否有效?

【问题讨论】:

  • 您所描述的是使用 DynamoDB 执行此操作的正确方法。
  • @MarkB 谢谢,我将发布一个 Lambda 函数作为答案,以帮助 Parse 社区将他们的数据库调整为 DynamoDB。

标签: amazon-web-services parse-platform amazon-dynamodb aws-lambda


【解决方案1】:

在您的设计中,您会遇到的一个问题是通过post_id 查询评论表的能力。 DynamoDB 要求您在进行查询时提供哈希键值,因此在关系数据库中微不足道的事情(例如连接)实际上可能在 DynamoDB 中变得相当困难。

您可以尝试缓解这种情况的一种方法是在您的 Comments 表上创建一个 GSI(全局二级索引),分区键为 post_id

另一种选择是将评论表中的哈希键设为post_id,将范围键设为comment_idtimestamp

我希望这会有所帮助,但如果您仍有疑问,我建议您通过 Forums. 联系亚马逊客户支持

【讨论】:

    【解决方案2】:

    正如我所承诺的,发布我的 lambda 函数以获取您帖子的“关系”。它实例化一个 dynamodb 实例并使用您提供的参数进行查询。长话短说,您需要在 ExpressionAttributeValues 中提供您感兴趣的 cmets post_id

    var AWS = require('aws-sdk');
    
    exports.handler = (event, context, callback) => {
      var dynamodb = new AWS.DynamoDB();    
      var comment_params = {
          "TableName": "YOUR_TABLE_NAME",
          "Select":"ALL_ATTRIBUTES",
          "IndexName": "YOUR_GLOBAL_INDEX",
          "Limit": 10,
          "ConsistentRead": false,
          "KeyConditionExpression": "#post_id = :v1",
          "ExpressionAttributeValues": {
              ":v1": {"S": "POST_ID"}
          },
          "ExpressionAttributeNames": {"#post_id": "post_id"},
          "ReturnConsumedCapacity": "TOTAL"
      }
    
      dynamodb.query(comment_params, function(err, data) {
          if (err) {
                return callback(err);
          } else {
              var comment_items = data.Items;
                return callback(null, comment_items);
          }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2019-11-09
      • 2019-02-24
      • 1970-01-01
      相关资源
      最近更新 更多