在 DynamoDB 中使用查询操作的其他分面
此部分介绍了 DynamoDB 查询操作的其他方面,包括限制结果大小、计算已扫描项目与已返回项目的数量、监控读取容量消耗以及控制读取一致性。
限制结果集中的项目数
使用 Query
操作,您可以限制它读取的项目数。为此,请将 Limit
参数设置为您需要的最大项目数。
例如,假设您对某个表进行 Query
,Limit
值为 6
,并且没有筛选表达式。Query
结果将包含表中与请求中的键条件表达式匹配的前 6 个项目。
现在假设您向 Query
添加了一个筛选表达式。在这种情况下,DynamoDB 最多可读取六个项目,然后仅返回与筛选表达式匹配的项目。最终 Query
结果包含六个或更少的项目,即使更多项目(如果 DynamoDB 继续读取更多项目)与过滤表达式匹配,也是如此。
对结果中的项目进行计数
除了与您的条件匹配的项目之外,Query
响应还包含以下元素:
-
ScannedCount
— 在应用筛选表达式(如果有)之前,与关键字条件表达式匹配的项目的数量。 -
Count
— 在应用筛选表达式(如果有)之后,剩余的项目数量。
注意
如果您不使用筛选表达式,那么 ScannedCount
和 Count
具有相同的值。
如果 Query
结果集的大小大于 1 MB,则 ScannedCount
和 Count
将仅表示项目总数的部分计数。您需要执行多次 Query
操作才能检索所有结果(请参阅在 DynamoDB 中对表查询结果分页)。
所有 Query
响应都将包含由该特定 Query
请求处理的项目的 ScannedCount
和 Count
。要获取所有 Query
请求的总和,您可以对 ScannedCount
和 Count
记录流水账。
查询占用的容量单位
您可以对任何表或二级索引进行 Query
,只要您提供分区键属性的名称和该属性的单个值即可。Query
返回具有该分区键值的所有项目。(可选)您可以提供排序键属性,并使用比较运算符来细化搜索结果。Query
API 操作将消耗读取容量单位,如下所示。
如果对...进行 Query |
DynamoDB 将占用...的读取容量单位 |
---|---|
表 | 表的预置读取容量。 |
全局二级索引 | 索引的预置读取容量。 |
本地二级索引 | 基表的预置读取容量。 |
默认情况下,Query
操作不会返回任何有关它占用的读取容量大小的数据。但是,您可在 ReturnConsumedCapacity
请求中指定 Query
参数以获取此信息。下面是 ReturnConsumedCapacity
的有效设置:
-
NONE
— 不返回任何已占用容量数据。(这是默认值。) -
TOTAL
— 响应包含占用的读取容量单位的总数。 -
INDEXES
— 响应显示占用的读取容量单位的总数,以及访问的每个表和索引的占用容量。
DynamoDB 将基于项目数量以及这些项目的大小,而不是基于返回到应用程序的数据量来计算消耗的读取容量单位数。因此,无论您是请求所有属性(默认行为)还是只请求部分属性(使用投影表达式),占用的容量单位数都是相同的。无论您是否使用筛选表达式,该数值也都是一样的。Query
消耗最小的读取容量单位,来为高达 4 KB 的项目每秒执行一次强一致性读取,或每秒执行两次最终一致性读取。如果您需要读取大于 4KB 的项目,DynamoDB 需要额外的读取请求单位。空表和分区键数量稀疏的超大表,可能会有在超出查询的数据量后对一些额外的 RCU 收费的情况。这包括处理 Query
请求的费用,即使不存在数据也是如此。
查询的读取一致性
默认情况下,Query
操作将执行最终一致性读取。这意味着 Query
结果可能无法反映由最近完成的 PutItem
或 UpdateItem
操作导致的更改。有关更多信息,请参阅 DynamoDB 读取一致性。
如果您需要强一致性读取,请在 Query
请求中将 ConsistentRead
参数设置为 true
。