【问题标题】:DynamoDB Appsync Query on multiple attributesDynamoDB Appsync 查询多个属性
【发布时间】:2021-12-27 05:19:45
【问题描述】:

我的应用使用 AppSync 解析器从 DDB 获取数据并将其返回到我们的前端。我们有一张表用于通知。通知可以是挂起的或默认的(非挂起的)。表本身有一个主键 notification_id,我们有一个名为 userIndex 的 GSI 来获取用户的通知,排序键是时间戳。

在应用程序中,我将所有通知显示在一个列表中,首先是待处理的,然后是默认的。鉴于用户可能有很多通知,我想实现分页以一次获取一批。我能够做到这一点的唯一方法是

  1. 更改查询以包含 isPending 参数,我将其用作查询的过滤表达式,以仅返回 isPending 或 isNotPending 的通知。
  2. 存储两个“nextTokens”,每个 isPending 和 isNotPending 一个,以及相应的列表。
  3. 对待处理/非待处理进行单独查询,并使用过滤器返回到相应的列表。

这显然效率低下,我正在从 DynamoDB 重新读取数据。我的问题是,鉴于我的 DynamoDB 表/要求,有没有一种方法可以分页,以便我可以先获取所有待处理通知(按时间戳排序),然后使用一个查询获取所有默认通知(按时间戳排序)和一个nextToken

我见过@model@key 的用法,但我无法在我的应用程序中使用它。

谢谢!

【问题讨论】:

    标签: graphql amazon-dynamodb aws-appsync


    【解决方案1】:

    不,不是真的。 Dynamodb 查询的返回值有一个硬性限制——这是无法绕过的。使用nextToken 的唯一方法是另一个查询。

    然而,同样值得注意的是,FilterExpression发生在数据已经被检索后并且被过滤客户端。它不会减少从查询中提取的文档 - 只有显示的内容。因此,对于每个查询,下一个标记仍然(相对)相同。您可以在调用之后在下一个分页查询之前自己过滤它,并在多次调用方面为自己节省一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 2019-10-19
      • 2019-05-03
      相关资源
      最近更新 更多