在DynamoDB表中,我有 161712条记录,申请时没有任何过滤器,我收到的扫描计数值仅为10589
这是mytable meta
{
"AttributeDefinitions": [
{
"AttributeName": "question_id",
"AttributeType": "N"
},
{
"AttributeName": "timestamp",
"AttributeType": "S"
}
],
"TableName": "users_answers",
"KeySchema": [
{
"AttributeName": "timestamp",
"KeyType": "HASH"
},
{
"AttributeName": "question_id",
"KeyType": "RANGE"
}
],
"TableStatus": "ACTIVE",
"CreationDateTime": "2017-09-12T12:33:22.615Z",
"ProvisionedThroughput": {
"LastIncreaseDateTime": "2017-09-12T16:46:26.742Z",
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 80,
"WriteCapacityUnits": 80
},
"TableSizeBytes": 16014441,
"ItemCount": 161712
}
当我在上面执行扫描操作时,只会获得10589条记录
table = dynamo.get_table('answer_options')
x = table.scan()
请建议我如何从表中获取整个记录
Env:python 3.5.1,flask dynamodb
提前致谢
答案 0 :(得分:3)
DynamoDB每个请求只返回1MB。在获得整个数据集之前,您必须循环并发出多个请求。
DynamoDB对扫描操作的结果进行分页。通过分页,扫描结果被划分为大小为1 MB(或更小)的数据“页面”。应用程序可以处理结果的第一页,然后处理第二页,依此类推。
单次扫描仅返回符合1 MB大小限制的结果集。要确定是否有更多结果,并一次检索一页,应用程序应执行以下操作:
检查低级扫描结果:
- 如果结果包含LastEvaluatedKey元素,请继续执行步骤2.
- 如果结果中没有LastEvaluatedKey,则无法再检索任何项目。
构造一个新的扫描请求,其参数与前一个相同 - 但这一次,从步骤1获取LastEvaluatedKey值,并将其用作新扫描请求中的ExclusiveStartKey参数。
< / LI>运行新的扫描请求。
- 醇>
转到第1步。