Dynamodb 中的 Limit 到底是什么?

问题描述 投票:0回答:3

来自 AWS 文档:

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

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

amazon-dynamodb dynamodb-queries
3个回答
1
投票

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

Limit = 2 表示最多退回 2 件商品。

limit
参数的上限为 1000 - 一次 API 调用不能返回超过 1000 个项目。

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

limit
参数设置为 5,则由于 1MB 的限制,您将始终从表中获得最多 2 个项目。


1
投票

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

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

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

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

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

一般来说,没有什么理由使用限制 - 相反,您的分区键/排序键组合应根据您的访问模式进行设置,以便您仅在任何给定调用中检索所需的实际项目。使用 >、<, =, between, starts_with, contains are a better way to limit the number of responses than Limit. The only major use case I can usually find for Limit is literally needing just the latest item of a potential multiple items after a specific date. But even so, its usually better just to take the entire query and get the first item yourself in your code (index 0) instead so you don't accidentally loose items from the limit/query combination.

的 SortKey 表达式

0
投票

我已经看到,如果将限制设置为例如 10,则如果 ExclusiveStartKey 为 null,则只会从表的开头扫描 10 个。如果ExclusiveStartKey不为空,则将从ExclusiveStartKey的位置开始扫描10个键。这里的关键词是“扫描”,因为它只会过滤这 10 条记录并返回结果。在 Mongo 或 MySQL 中分页不是这样工作的。在这些数据库中,它会过滤、跳过,然后进行限制。在dynamodb中,它会跳过、限制然后过滤。这就是响应中包含 ScannedCount 的原因。

© www.soinside.com 2019 - 2024. All rights reserved.