7

我有两个表:帖子和用户

createPost突变解析器中,我为某些属性设置了一些默认值(想想 userId、createdAt 时间戳、isDeleted 标志等)。另外,我想增加用户的numPosts计数器。

这可以通过标准解析器实现吗?

如果没有,有什么更好的选择,为什么?

备选方案 1)在添加增加用户numPosts计数器的新 Post 记录时使用 DynamoDB Stream 并触发 lambda 函数。

备选方案 2)使用 lambda 解析器并将所有逻辑移到那里,而不是标准解析器。

4

3 回答 3

4

您可以使用 BatchPut 操作同时更新多个表。有关更多信息,请参阅Amazon DynamoDB 批量操作指南。

你需要有一个解析器

{
  "version" : "2018-05-29",
  "operation" : "BatchGetItem",
  "tables" : {
    "Posts": {
        ...data
    },
    "NumPosts":{
        ...data
    }
  }
}
于 2018-05-29T17:18:32.170 回答
1

我走的是“使用 lambda 解析器并将所有逻辑移到那里而不是标准解析器”的路线。对于我的应用程序。

通过这种方式,你有很多控制权,可靠的日志记录、度量标准,并且几乎可以做任何你想做的事情,但是你必须为 lambda 付费。

如果其他更改可能在事后发生,并且让数据处于中间状态并不重要,那么您观看流的选择可能更有意义。

如果没有完整的上下文,很难评估最佳选择是什么。

于 2018-06-06T23:56:32.680 回答
-1

有可用于 DynamoDB的更新表达式;它显然在 AppSync 的DynamoDB 解析器映射模板参考中。通过代码中给出的示例代码,您应该可以通过UpdateItem以下代码进行操作:

{
    "version" : "2017-02-28",
    "operation" : "UpdateItem",
    "key": {
        "id" : { "S" : "${context.arguments.id}" }
    },
    "update" : {
        "expression" :  "ADD numPosts :incrCount",
        "expressionValues" : {
           ":incrCount" : { "N" : 1 }
        }
    }
}

编辑:这篇文章假设您的numPosts计数器作为一个字段保存在您的Users表格中。

于 2018-05-28T20:03:35.567 回答