使用dynamodb扫描( 在这里发现的 )的文档引用了AWS的page-size参数。
在查看go AWS,在这里发现的的文档时,有一个函数ScanPages。有一个如何使用该函数的示例,但是在文档中没有一种方法可以像AWS那样指定类似page-size的东西。除了假设结果超过1MB之外,我无法确定分页是如何发生的,那么根据go文档和一般扫描文档,这将被视为一个页面。
我还知道可以在Limit上设置的ScanInput值,但文档表明,只有当处理的每一项与扫描的筛选表达式匹配时,该值才能作为页面大小发挥作用:
要评估的最大项目数(不一定是匹配项的数量)。
有办法用go SDK设置与page-size等价的东西吗?
发布于 2021-08-07 07:15:34
如何在AWS?中分页
DynamoDB对扫描操作的结果进行分页。通过分页,扫描结果被分成大小为1MB(或更小)的数据的“页面”。应用程序可以处理结果的第一页,然后是第二页,依此类推。
因此,对于每个请求,如果结果中有更多的项,则始终会得到LastEvaluatedKey。您将使用此LastEvaluatedKey重新发出扫描请求,以获得完整的结果。
例如,对于一个示例查询,您有400结果,并且每个结果都取到100结果的上限,您将不得不重新发出扫描请求,直到lastEvaluatedKey返回为空。你会做下面这样的事。文档
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将重新发出请求。
下面是来自文档的一个示例请求响应。
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 \
--debugb'{"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 文档
// 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-size和limit是一样的。Limit将限制在一个扫描请求中扫描的行数。
https://stackoverflow.com/questions/68689228
复制相似问题