我在dynamoDB AWS上面临一个奇怪的问题 - 我使用AWS API Gateway查询我的表 - AWS Service Proxy,我得到Count:0结果,ScannedCount在总共10000条记录中约有2500条记录。只是为了确认我在我的表中需要数据,我在DynamoDB上使用Scan Operation。
我无法理解的是ScannedCount小于完整表记录的原因。这是否应该发生
答案 0 :(得分:1)
根据DynamoDB documentation,ScannedCount
是dynamodb查看当前请求的项目数,Count
是与您的过滤器匹配的项目数:
计算结果中的项目
除了符合条件的项目外,查询响应还包含以下元素:
- ScannedCount - 在应用过滤器表达式(如果存在)之前与键条件表达式匹配的项目数。
- 计数 - 应用过滤器表达式(如果存在)后剩余的项目数。**
请注意
如果您不使用过滤器表达式,则ScannedCount和Count将具有相同的值。
如果查询结果集的大小大于1 MB,则ScannedCount和Count将仅表示总项目的部分计数。您需要执行多个查询操作才能检索所有结果(请参阅分页结果)。
每个查询响应都将包含特定查询请求处理的项目的ScannedCount和Count。要获取所有Query请求的总计,您可以保持ScannedCount和Count的运行记录。
因此,在您的情况下,扫描经历了前2500条记录(ScannedCount为2500),并且没有与您的过滤器匹配的结果(Count为零)。
要扫描表格中的其余数据,您需要按照here所述的分页参数重复请求:
单次扫描仅返回符合1 MB大小限制的结果集。要确定是否有更多结果,并一次检索一页,应用程序应执行以下操作:
- 检查低级扫描结果:
- 如果结果包含LastEvaluatedKey元素,请继续执行步骤2.
- 如果结果中没有LastEvaluatedKey,则无法再检索任何项目。
- 构造一个新的扫描请求,其参数与前一个相同 - 但这一次,从步骤1获取LastEvaluatedKey值,并将其用作新扫描请求中的ExclusiveStartKey参数。
- 运行新的扫描请求。
- 转到第1步。
根据语言的不同,您可以找到一个为您添加分页的库,例如python为boto2 high-level dynamodb client或boto3为"paginator"。