提问者:小点点

Dynamodb 中的极限到底是什么?


来自 AWS Docs:

单个查询操作最多可以检索 1 MB 的数据。在将任何 FilterExpression 或 ProjectionExpression 应用于结果之前,此限制适用。如果响应中存在 LastEvaluatedKey 并且为非 null,则必须对结果集进行分页。

我已经在 DynamoDB 上工作了一段时间,当我增加查询限制时,它总是会给我更多的记录。那么极限 = 2 的最接近的含义是什么?返回 2 个项目(或我们知道的最大 1 MB)对吗?那么,这会不会使限制=1000;返回 1000 个项目或 1000 MB 的数据?还是 1000 条记录,对数据大小没有影响?还是别的什么?


共2个答案

匿名用户

limit 参数仅影响返回的项数。

限制 = 2 表示最多返回 2 个项目。limit 参数的上限为 1000 - 一个 API 调用不能返回超过 1000 个项目。

根据项目大小,您可能无法获取使用 limit 参数指定的所有记录,因为从表中最多读取 1MB 的数据。这意味着,如果表中的所有项目的大小均为 400KB(每个项目的最大大小),并且您将 limit 参数设置为 5,则由于 1MB 的限制,您将始终从表中最多获得 2 个项目。

匿名用户

在查询中,“限制”是查询后将显示(或 SDK 响应中可用的项目数)。

因此,如果您进行的查询通常会返回 15 个项目,但限制为 2,那么您会根据它们的排序键获得前 2 个(如果没有排序键,则返回前两个,我相信最古老的项目,但不要引用我的话。

1mb 限制是 SDK api 调用进行的查询中返回的 JSON 总大小的硬上限。因此,如果您有 100 个项目,并且当采用 JSON 格式时,它们的数据值超过 1 MB,则只会返回前 1MB 的条目(整个条目)。还将返回一个分页令牌(如果我没记错的话,NextToken),可以在下一个查询中使用该令牌从前一个查询的结尾开始返回(分页)。

认识到 Limit 关键字和 1mb 硬上限分页的组合非常重要,这意味着如果您有一个需要分页的查询,并且包含限制,则该限制将在分页开始后应用。

因此,如果查询的第一页返回 15 个项目,并且您的限制为 5 个,则您将获得前 5 个项目。然后,如果您调用下一个令牌,则会得到项目 16-20,因为在限制之前,原始查询已将下一个令牌分配给项目 16。

通常,几乎没有理由使用 Limit - 相反,应按照访问模式设置分区键/排序键组合,以便仅在任何给定调用中检索所需的实际项目。使用 的排序键表达式