【问题标题】:Can page size be set with dynamodb.ScanPages?可以使用 dynamodb.ScanPages 设置页面大小吗?
【发布时间】:2021-10-11 19:11:11
【问题描述】:

使用 dynamodb 扫描的文档 found here 引用了 AWS CLI 的 page-size 参数。

在查看 go AWS SDK found here 的文档时,有函数 ScanPages。有一个如何使用该函数的示例,但文档中没有任何方法可以像 AWS CLI 那样指定 page-size 之类的内容。我无法确定分页是如何发生的,除非假设结果超过 1MB,那么根据 go 文档和一般扫描文档,这将被视为一个页面。

我也知道可以在ScanInput 上设置的Limit 值,但文档表明,只有当处理的每个项目都与扫描的过滤器表达式匹配时,该值才会用作页面大小:

要评估的最大项目数(不一定是匹配项目的数量)

有没有办法使用 go SDK 设置与 page-size 等效的内容?

【问题讨论】:

    标签: amazon-web-services go amazon-dynamodb


    【解决方案1】:

    分页在 AWS 中的工作原理是什么?

    DynamoDB 对 Scan 操作的结果进行分页。带分页, 扫描结果分为 1 MB 的数据“页面” 大小(或更小)。应用程序可以处理结果的第一页, 然后是第二页,以此类推。

    因此,对于每个请求,如果结果中有更多项目,您将始终获得LastEvaluatedKey。您将使用此LastEvaluatedKey 重新发出扫描请求以获得完整结果。

    例如,对于一个示例查询,您有400 结果并且每个结果都提取到上限100 结果,您将不得不重新发出扫描请求,直到lastEvaluatedKey 返回为空。您将执行以下操作。 documentation

    var result *ScanOutput
    for{
        if(len(resultLastEvaluatedKey) == 0){
             break;
        }
        input := & ScanInput{ 
            ExclusiveStartKey= LastEvaluatedKey
            // Copying all parameters of original scanInput request
        }
        output = dynamoClient.Scan(input)
    }
    

    AWS-CLI 上的页面大小是多少?

    scan 操作扫描所有 dynamoDB 并根据过滤器返回结果。通常,AWS CLI 会自动处理分页。AWS CLI 会不断为我们重新发出扫描请求。这种请求和响应模式一直持续到最终响应为止。

    page-size 专门告诉一次只扫描数据库表中的page-size 行数并过滤这些行。如果未扫描完整表或结果超过1MB,则结果将发送lastEvaluatedKey,cli 将重新发出请求。

    这是来自documentation 的示例请求响应。

    aws dynamodb scan \
        --table-name Movies \
        --projection-expression "title" \
        --filter-expression 'contains(info.genres,:gen)' \
        --expression-attribute-values '{":gen":{"S":"Sci-Fi"}}' \
        --page-size 100  \
        --debug
    
    b'{"Count":7,"Items":[{"title":{"S":"Monster on the Campus"}},{"title":{"S":"+1"}},
    {"title":{"S":"100 Degrees Below Zero"}},{"title":{"S":"About Time"}},{"title":{"S":"After Earth"}},
    {"title":{"S":"Age of Dinosaurs"}},{"title":{"S":"Cloudy with a Chance of Meatballs 2"}}],
    "LastEvaluatedKey":{"year":{"N":"2013"},"title":{"S":"Curse of Chucky"}},"ScannedCount":100}'
    
    

    我们可以清楚地看到scannedCount:100 和过滤计数Count:7,因此在扫描的 100 个项目中只有 7 个项目被过滤。 documentation

    来自 Limit 的 Documentation

        // The maximum number of items to evaluate (not necessarily the number of matching
        // items). If DynamoDB processes the number of items up to the limit while processing
        // the results, it stops the operation and returns the matching values up to
        // that point, and a key in LastEvaluatedKey to apply in a subsequent operation,
        // so that you can pick up where you left off.
    

    所以基本上,page-sizelimit 是相同的。 Limit 将限制一个扫描请求中扫描的行数。

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 1970-01-01
      • 2016-04-29
      • 2014-04-27
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多