首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以用dynamodb.ScanPages设置页面大小吗?

可以用dynamodb.ScanPages设置页面大小吗?
EN

Stack Overflow用户
提问于 2021-08-07 03:40:45
回答 1查看 2.8K关注 0票数 1

使用dynamodb扫描( 在这里发现的 )的文档引用了AWS的page-size参数。

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

我还知道可以在Limit上设置的ScanInput值,但文档表明,只有当处理的每一项与扫描的筛选表达式匹配时,该值才能作为页面大小发挥作用:

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

有办法用go SDK设置与page-size等价的东西吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-07 07:15:34

如何在AWS?中分页

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

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

例如,对于一个示例查询,您有400结果,并且每个结果都取到100结果的上限,您将不得不重新发出扫描请求,直到lastEvaluatedKey返回为空。你会做下面这样的事。文档

代码语言:javascript
复制
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上的页面大小是多少?

扫描操作扫描所有的dynamoDB并根据过滤器返回结果。通常,AWS处理分页automatically.The AWS继续为我们重新发出扫描请求.这种请求和响应模式一直持续到最后的响应。

page-size专门告诉您一次只扫描DB表中的page-size行数,并对这些行进行筛选。如果未扫描完整表或结果大于1MB,则结果将发送lastEvaluatedKey,而cli将重新发出请求。

下面是来自文档的一个示例请求响应。

代码语言:javascript
复制
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
代码语言:javascript
复制
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个项目被过滤。文档

从极限‘s 文档

代码语言:javascript
复制
    // 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将限制在一个扫描请求中扫描的行数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68689228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档