gpt4 book ai didi

amazon-web-services - DynamoDB 扫描/查询返回 x 项目数

转载 作者:行者123 更新时间:2023-12-04 08:09:44 34 4
gpt4 key购买 nike

如果我在 DynamoDB 中扫描或查询,则可以设置 Limit属性(property)。 DynamoDB documentation说如下:

The maximum number of items to evaluate (not necessarily the number of matching items).



所以这个问题是如果你设置过滤器,它不会返回所有项目。

我试图弄清楚如何实现的目标是在扫描或查询中使用过滤器,但让它返回 x 个项目。无论。我可以使用 LastEvaluatedKey并提出多个请求,但我想尝试使其尽可能无缝和简单(所以最好不要这样做。

我认为这样做的唯一方法是设置 Limit属性(property)说 1或者其他的东西。然后继续使用 LastEvaluatedKey 扫描或查询直到我达到我正在寻找的 x 个项目。问题是,这似乎 非常浪费和低效。我的意思是,如果您有一个包含数百万条记录的表,您可能需要发出数以千计的请求。看起来它的扩展性不是很好。当然,我确信这与 DynamoDB 在幕后所做的没有什么不同。

但是有没有办法更有效地做到这一点,我可以减少我必须提出的请求数量?或者这是实现这一目标的唯一方法?

你将如何实现这个目标?

最佳答案

A single Query operation will read up to the maximum number of items set (if using the Limit parameter) or a maximum of 1 MB of data and then apply any filtering to the results using FilterExpression.



在 FilterExpression 之前应用 Limit 是 100% 正确的。这意味着 Dynamo 可能会返回一些小于 Limit 的数字或文档,而满足 FilterExpression 的其他文档仍然存在于表中但不会返回。

听起来您的 api 以相同的方式行事是 Not Acceptable 。这意味着在某些情况下,对您的服务的单个请求将导致对 Dynamo 的多个请求。另外,请记住,无法预测 LastEvaluatedKey将需要并行处理这些请求。因此,如果您的服务向 Dynamo 发出多个请求,它们将是串行的。对我来说,这是一个相当沉重的权衡,但是,如果您需要尽可能满足限制,那么您可以选择。

首先,Dynamo 会以 1 MB 的大小自动分页。这意味着您可以简单地将您的查询发送到 Dynamo 而没有限制,并在您的终端实现限制。您可能仍需要发出多个请求以确保满足限制,但这种方法将导致对 Dynamo 的请求数量最少。这里的权衡是读取和传输的总数据。您的限制可能不会与 1 MB 限制完美对齐,这意味着正在读取、过滤和传输的多余数据将被浪费。

您已经提到发送 Limit 为 1 的另一个极端,并指出这将导致对 Dynamo 的最大请求数

沿着这些路线的另一种方法是创建某种概率函数,该函数采用客户端提供给您的服务的限制并计算 Dynamo 的新限制。例如,您的 FilterExpression 过滤掉了表中大约一半的文档。这意味着您可以将客户端限制乘以 2,这将是发送到 Dynamo 的合理限制。到目前为止,在我们讨论的方法中,这种方法具有最高的效率潜力,但它也具有最高的复杂性潜力。例如,您可能会发现使用简单的线性函数不够好,您需要使用机器学习来找到多变量非线性函数来计算新的 Limit。这种方法还很大程度上取决于 Dynamo 中数据的一致性以及访问模式。同样,您可能需要机器学习来优化这些变量。

在您最终实现限制的任何情况下,如果您计划发回 LastEvaluatedKey到客户端以供后续调用您的服务时,您还需要注意跟踪 LastEvaluatedKey你评估的。您将无法再依赖 LastEvaluatedKey从迪纳摩回来。

最后一种方法是使用 GSI、使用 Dynamo Streams 保持同步的单独表或完全不同的模式来重新组织/重新组合您的数据,目标是不需要 FilterExpression。

关于amazon-web-services - DynamoDB 扫描/查询返回 x 项目数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215334/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com