我有两个表:帖子和用户
在createPost
突变解析器中,我设置了一些默认值做某些属性(想想userId,createdAt timestamp,isDeleted flag等)。另外,我想增加用户numPosts
计数器。
这可以通过标准旋转变压器实现吗?
如果没有,那么更好的选择是什么?为什么?
替代方案1)使用DynamoDB Stream并在添加新的Post记录时触发lambda函数,该记录会增加用户的numPosts
计数器。
备选方案2)使用lambda解析器并将所有逻辑移到那里而不是标准解析器。
答案 0 :(得分:3)
您可以使用BatchPut Operation同时更新多个表。有关详细信息,请参阅Amazon DynamoDB Batch Operations指南。
你需要一个像
这样的解析器{
"version" : "2018-05-29",
"operation" : "BatchGetItem",
"tables" : {
"Posts": {
...data
},
"NumPosts":{
...data
}
}
}
答案 1 :(得分:0)
我走了"使用lambda解析器并将所有逻辑移到那里而不是标准解析器。"对于我的应用程序。
你可以通过这种方式进行大量控制,实时记录,公制,并且可以随心所欲地做任何事情,但你必须为lambda付费。
如果其他更改可能在事后发生,并且将数据置于中间状态并不重要,则您选择观看流可能更有意义。
如果没有完整的背景,很难评估最佳选择。
答案 2 :(得分:-1)
有Update Expressions可用于DynamoDB;它显然属于AppSync的Resolver Mapping Template Reference for 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
表中的字段。