【发布时间】:2018-08-19 07:10:11
【问题描述】:
如果我在 DynamoDB 中扫描或查询,则可以设置 Limit 属性。 DynamoDB documentation 表示以下内容:
要评估的最大项目数(不一定是 匹配项)。
所以问题是如果你设置了过滤器,它不会返回所有的项目。
我试图弄清楚如何实现的目标是在扫描或查询中使用过滤器,但让它返回 x 个项目。无论。我可以使用 LastEvaluatedKey 并发出多个请求,但我想尽量让它无缝和简单(所以最好不要这样做。
我想到的唯一方法是将Limit 属性设置为1 或其他内容。然后继续使用LastEvaluatedKey 进行扫描或查询,直到达到我要查找的 x 个项目。问题是,这似乎非常浪费且效率低下。我的意思是,如果您有一个包含数百万条记录的表,您可能必须提出成千上万的请求。它似乎不是很好地扩展。当然,我确信这与 DynamoDB 在幕后所做的没有什么不同。
但是有没有办法更有效地做到这一点,我可以减少我必须提出的请求数量?或者这是实现这一目标的唯一方法?
您将如何实现这一目标?
【问题讨论】:
-
为什么不能在回复中使用计数?
-
@mewa 我认为该属性是 DynamoDB 在响应中返回的项目数。那真的没有帮助。因为如果我有一个庞大的数据库,我不想扫描或查询比我必须做的更多。太浪费了。
-
您的扫描量不会超出您的要求,因为查询的大小也是有限的 (1MB)。然后您将继续使用
LastEvaluatedKey(并在此过程中增加计数)。 -
@mewa 好的,但是您不能拥有大量相对较小的记录吗?我的意思是,在这种情况下,不在请求中限制它只会很快耗尽你的能力。
-
那么你必须设置一个适当的限制。这取决于许多因素。首先,您必须记住,读取容量以 4KB 的倍数计算。这意味着读取 4 个字节将与读取 4KB 一样昂贵。知道了这一点,您应该估计您的数据平均占用多少空间。您还应该考虑数据的分布。与任何 NoSQL 一样,您的解决方案必须专门针对您的用例进行设计。
标签: amazon-web-services amazon-dynamodb