【问题标题】:Dynamo Db query using maxPageSize and maxResultSize ,slowing down the query使用 maxPageSize 和 maxResultSize 的 Dynamo Db 查询,减慢查询速度
【发布时间】:2018-06-11 03:53:52
【问题描述】:

我正在使用 dynamo db 分页,基于 AWS 文档:

--> maxResultSize 是本次查询中要检索的资源的最大数量,包括所有要检索的页面中的所有资源。

--> maxPageSize 是单个页面中要检索的最大资源数;它用于分页目的。

令人惊讶的是,当我不设置任何页面大小 (1) 时,DynamoDb 查询明显更快,根据文档,情况不应该如此。我假设 dynamo db 默认返回所有结果,如果我们不指定 pageSize。

querySpec.withExclusiveStartKey(lastAccessedRecord); (1)


querySpec.withMaxPageSize(30);
            querySpec.withMaxResultSize(100);
querySpec.withExclusiveStartKey(lastAccessedRecord); (2)

【问题讨论】:

    标签: java pagination amazon-dynamodb


    【解决方案1】:

    ItemCollection:它确实使用了延迟加载。来自 AWS 文档:

    在从该 Iterable 返回的迭代器上对 {@code Iterator.next} 的每次调用都会导致对 DynamoDB 的一次调用以检索单页结果。

    另一方面,DynamoDB 中的分页基于包的大小(限制为 1MB 大小)。返回的每个页面最大为 1MB(项目数量会有所不同)。通过设置 maxPageSize,DynamoDB 将不得不做更多的计算来满足您的请求,而不是仅仅根据包大小返回匹配的项目。

    【讨论】:

      【解决方案2】:

      此问题的根本原因:ItemColletions 也返回大小为 0 的页面。我们需要在有大小为 0 的页面时立即跳出循环,以避免重复不必要的页面。

      ItemCollections 使用某种延迟加载(仅在我们遍历页面时从 DynamoDb 获取结果)

      “Item 的集合。ItemCollection 对象维护一个指向其当前数据页的游标。最初游标定位在第一页之前。next 方法将游标移动到下一行”

      QuerySpec spec = new QuerySpec().withKeyConditionExpression("Id = :v_id")
                  .withValueMap(new ValueMap().withString(":v_id", replyId)).withMaxPageSize(1);
      
              ItemCollection<QueryOutcome> items = table.query(spec);
      
              System.out.println("\nfindRepliesForAThreadSpecifyOptionalLimit results:");
      
              // Process each page of results
              int pageNum = 0;
              for (Page<Item, QueryOutcome> page : items.pages()) {
      
      if(page.size==0)   ](fix )
      break;             ]
                  System.out.println("\nPage: " + ++pageNum);
      
                  // Process each item on the current page
                  Iterator<Item> item = page.iterator();
                  while (item.hasNext()) {
                      System.out.println(item.next().toJSONPretty());
                  }
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2017-12-24
        • 2011-10-04
        • 2015-12-04
        • 2015-11-27
        • 2019-11-22
        • 1970-01-01
        • 2016-08-28
        • 1970-01-01
        • 2021-10-09
        相关资源
        最近更新 更多