Amazon web services 从dynamodb获取多个项目的最便宜方式

Amazon web services 从dynamodb获取多个项目的最便宜方式,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,我看到AWS中的“BatchGetItem”API,它可以用于从dynamodb检索多个项。但n个项目的容量消耗为n个单位,即使它们只有10字节长。有没有更便宜的方式取回这些物品?我看到了“Query”API,但它可能不支持对键进行ORing,甚至不支持IN操作符。从DynamoDB中获取大量小项目的最便宜的方法是查询 BatchGetItems的成本与调用GetItem的次数相同。只有延迟较低,但是如果您在不同的分区中有大量的项,并且您有一种与并行性配合良好的语言,那么通过大量的并行GetIt

我看到AWS中的“BatchGetItem”API,它可以用于从dynamodb检索多个项。但n个项目的容量消耗为n个单位,即使它们只有10字节长。有没有更便宜的方式取回这些物品?我看到了“Query”API,但它可能不支持对键进行ORing,甚至不支持IN操作符。

从DynamoDB中获取大量小项目的最便宜的方法是
查询

BatchGetItems
的成本与调用
GetItem
的次数相同。只有延迟较低,但是如果您在不同的分区中有大量的项,并且您有一种与并行性配合良好的语言,那么通过大量的并行
GetItem
调用,您实际上会获得更好的性能

重新组织数据的一种方法是将所有的小项目存储在同一分区键下,然后使用
查询
获取该分区内的所有项目。您必须注意每秒写入次数的限制,但是如果您不经常添加更多项,并且更担心读取次数,那么这将非常有效

查询中
,DynamoDB根据返回的数据大小收费,而不考虑返回的项目数。但这似乎是这些经济学应用的唯一地方

根据我对DynamoDB的了解,这是有道理的。在
BatchGetItems
调用中,项目很容易来自不同的分区(甚至是不同的表),因此效率不高-每个项目都必须在DynamoDB网络上单独查找并从其分区获取。如果批处理中的所有键都来自同一分区,并且在范围键上是连续的,这是一个幸运的巧合,但是DynamoDB不能利用它


另一方面,在
查询中
,DynamoDB完全知道它只会直接与一个分区进行对话,并在该分区内进行顺序读取,因此调用更简单、更便宜,节省的成本会传递给客户。

使用BatchGetItem,每个项目单独读取,因此n个项目将等于n个读取容量单位。不确定在不重新设计表的情况下是否可以避免这种情况。他们需要高度一致的阅读吗?最终,一致性读取可能会将消耗的容量减半。目前的答案是否定的。没有更便宜的方法检索这些n项。你看过报纸了吗?