【问题标题】:AWS AppSync getting the count of another table (for example counting the likes of a post)AWS AppSync 获取另一个表的计数(例如计算帖子的点赞数)
【发布时间】:2020-11-17 18:42:07
【问题描述】:

我有以下 AWS AppSync/Amplify 模型

type Event @model {
  id: ID!
  name: String!
  ticketsSold: Int!
  moneySum: Int!
}

ticketsSold 属性必须反映orderseventId = X 的计数。 moneySum 必须代表与eventId = X 的所有订单票价的总和。

有 2 个选项(或更多?)需要考虑:

  1. 对于每个 putItem(createOrder 突变),使用新的计数/总和更新正确的 event
  2. 通过 AWS Lambda 解析器使用 eventId = X 查询/扫描所有订单

每个选项都有一些优点和缺点。使用选项 1,如果多人同时订购(交易?),可能会出现不同步的情况。使用选项 2 的缺点是扫描非常昂贵且速度慢......

事件显示在 ReactJS 应用程序的主页上,ticketsSoldmoneySum 显示为预览和详细信息,因此它会被“大量”获取。

建议?非常感谢!

【问题讨论】:

    标签: aws-lambda aws-amplify aws-appsync


    【解决方案1】:

    我会选择选项 1,使用您的票证数据库中的流到一个 lambda,该 lambda 使用聚合信息更新某些表。这将比无休止的扫描更快、更干净。我使用它来汇总用户的 lambda 使用情况,将 lambda 运行时记录到可以立即查询总数的表中。效果很好。

    【讨论】:

    • 你们如何处理交易?由于可以同时执行多个触发器吗?例如,Firebase 有事务,不知道如何使用 AWS 服务做到这一点?
    • 我认为事务不会成为问题 适当的表流(票?)反映了您关心的有效数据。根据您的场景,您可以让聚合 lambda 处理插入/修改/删除事件。 lambda 在一个批次中最多可以接收 1000 条流记录。
    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    相关资源
    最近更新 更多