使用查询操作的其它分面 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用查询操作的其它分面

限制结果集中的项目数

使用 Query 操作,您可以限制它读取的项目数。为此,请将 Limit 参数设置为您需要的最大项目数。

例如,假设您对某个表进行 QueryLimit 值为 6,并且没有筛选表达式。Query 结果将包含表中与请求中的键条件表达式匹配的前 6 个项目。

现在假设您向 Query 添加了一个筛选表达式。在这种情况下,DynamoDB 最多可读取六个项目,然后仅返回与筛选表达式匹配的项目。最终 Query 结果包含六个或更少的项目,即使更多项目(如果 DynamoDB 继续读取更多项目)与过滤表达式匹配,也是如此。

对结果中的项目进行计数

除了与您的条件匹配的项目之外,Query 响应还包含以下元素:

  • ScannedCount — 在应用筛选表达式(如果有)之前,与关键字条件表达式匹配的项目的数量。

  • Count — 在应用筛选表达式(如果有)之后,剩余的项目的数量。

注意

如果您不使用筛选表达式,那么 ScannedCountCount 具有相同的值。

如果 Query 结果集的大小大于 1 MB,则 ScannedCountCount 将仅表示项目总数的部分计数。您需要执行多次 Query 操作才能检索所有结果(请参阅对表查询结果分页)。

所有 Query 响应都将包含由该特定 Query 请求处理的项目的 ScannedCountCount。要获取所有 Query 请求的总和,您可以对 ScannedCountCount 记录流水账。

查询占用的容量单位

您可以对任何表或二级索引进行 Query,只要您提供分区键属性的名称和该属性的单个值即可。Query 返回具有该分区键值的所有项目。(可选)您可以提供排序键属性,并使用比较运算符来细化搜索结果。QueryAPI 操作将消耗读取容量单位,如下所示。

如果对...进行 Query DynamoDB 将占用...的读取容量单位
表的预置读取容量。
全局二级索引 索引的预置读取容量。
本地二级索引 基表的预置读取容量。

默认情况下,Query 操作不会返回任何有关它占用的读取容量大小的数据。但是,您可在 ReturnConsumedCapacity 请求中指定 Query 参数以获取此信息。下面是 ReturnConsumedCapacity 的有效设置:

  • NONE — 不返回任何已占用容量数据。(这是默认值。)

  • TOTAL — 响应包含占用的读取容量单位的总数。

  • INDEXES — 响应显示占用的读取容量单位的总数,以及访问的每个表和索引的占用容量。

DynamoDB 将基于项目数量以及这些项目的大小,而不是基于返回到应用程序的数据量来计算消耗的读取容量单位数。因此,无论您是请求所有属性(默认行为)还是只请求部分属性(使用投影表达式),占用的容量单位数都是相同的。无论您是否使用筛选表达式,该数值也都是一样的。Query 使用最小的读取容量单位,来为高达 4 KB 的项目每秒执行一次强一致性读取,或每秒执行两次最终一致性读取。如果您需要读取大于 4KB 的项目,DynamoDB 需要额外的读取请求单位。空表和分区键数量稀疏的超大表,可能会有在超出查询的数据量后对一些额外的 RCU 收费的情况。这包括处理 Query 请求的费用,即使不存在数据也是如此。

查询的读取一致性

默认情况下,Query 操作将执行最终一致性读取。这意味着 Query 结果可能无法反映由最近完成的 PutItemUpdateItem 操作导致的更改。有关更多信息,请参阅 读取一致性

如果您需要强一致性读取,请在 Query 请求中将 ConsistentRead 参数设置为 true