【问题标题】:Dynamodb one bulk scan vs many single getsDynamodb 一次批量扫描与多次单次获取
【发布时间】:2019-06-11 04:01:34
【问题描述】:

假设我有一个 lambda 函数,并且作为事件参数,我得到了大约 50 个必须在 dynamodb 表中查找的主 ID,那么更好的方法是什么 - 50 个通过不同的主 ID 获取每个查询或者一次扫描,然后将扫描主 ID 结果与作为参数接收的主 ID 进行比较?

我认为 50 get 查询在性能方面会更好,因为如果明天我将拥有一百万条记录,那么扫描它们然后只过滤其中的 50 条记录将是浪费时间和内存,但另一方面是不向 dynamodb 发出 50 个请求可能会出现性能问题并需要更多配置?

【问题讨论】:

  • 您所描述的可能是使用batch_get_item 操作的一个很好的用例。
  • 好的,非常感谢!

标签: amazon-web-services aws-lambda amazon-dynamodb throughput capacity


【解决方案1】:

您是对的,假设您只需要读取一百万条记录中的 50 条记录,Scan 操作是最糟糕的解决方案。这会很慢,而且会花费你一大笔钱,因为当你扫描时,你需要支付亚马逊来读取你的所有数据 - 即使如果你过滤掉大部分数据。

发出 50 个单独的 GetItem 请求还不错 - 它肯定比扫描要好。您只需为实际检索到的商品向亚马逊支付费用 - 您无需支付更多费用,因为它是 50 个单独的请求。当然,如果您不想要巨大的延迟,不要只是一个接一个地启动这些请求 - 并行启动它们。

但是对于这个用例,DynamoDB 提供了更好的操作BatchGetItem。通过此操作,您可以在一个 HTTP 请求中为 DynamoDB 提供 50 个必需键的列表,它会(并行)获取所有这些键并将所有响应返回给您。似乎BatchGetItem 最适合您的用例。

【讨论】:

  • Nadav,我想再咨询一个问题。我已将 350 件商品的扫描更改为 50 件商品的批量扫描,并且需要大约相同的时间,这可能吗?差异很小,大约 500 毫秒。
  • 当然有可能——350 个项目是一个很小的数据库。完全扫描它不会很慢也就不足为奇了。
  • 我可以做任何其他改进来更快地获得结果吗?我正在使用 api 网关、lambdas 和 dynamodb。调用api网关后大约需要6秒才能得到结果
  • @SyndicatorBBB 这可能是因为你的 lambda 函数的冷启动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多