Dynamodb 一次批量扫描与多次单次扫描
Dynamodb one bulk scan vs many single gets
假设我有一个 lambda 函数,并且作为事件参数,我得到了大约 50 个我必须在 dynamodb 中查找的主 ID table,更好的方法是什么 - 50 get 查询每个都通过不同的主 ID 或一次扫描,然后将扫描的主 ID 结果与作为参数接收的主 ID 进行比较?
我认为 50 get 查询在性能方面会更好,因为如果明天我将有 100 万条记录,那么扫描所有记录然后仅过滤其中的 50 条记录将是浪费时间和内存,但在另一个方面一方没有向 dynamodb 发出 50 个请求可能会出现性能问题并需要更多配置?
您是对的,Scan
操作是最糟糕的解决方案,假设您只需要读取一百万条记录中的 50 条记录。这将非常缓慢,并且会花费您一大笔钱,因为当您扫描时,您需要向亚马逊付费以读取所有数据 - even 如果您过滤掉大部分数据。
发出 50 个单独的 GetItem
请求并没有那么糟糕 - 它肯定比扫描要好。您只需为实际检索到的商品向亚马逊支付费用——您无需支付更多费用,因为它是 50 个单独的请求。当然,如果你不想要巨大的延迟,不要一个接一个地启动这些请求——并行启动它们。
但是对于这个use-case,DynamoDB 提供了更好的操作BatchGetItem
。通过此操作,您只需在一个 HTTP 请求中就可以向 DynamoDB 提供 50 个必需键的列表,它会获取所有这些键(并行)和 return 对您的所有响应。 BatchGetItem
似乎最适合您的用例。
假设我有一个 lambda 函数,并且作为事件参数,我得到了大约 50 个我必须在 dynamodb 中查找的主 ID table,更好的方法是什么 - 50 get 查询每个都通过不同的主 ID 或一次扫描,然后将扫描的主 ID 结果与作为参数接收的主 ID 进行比较?
我认为 50 get 查询在性能方面会更好,因为如果明天我将有 100 万条记录,那么扫描所有记录然后仅过滤其中的 50 条记录将是浪费时间和内存,但在另一个方面一方没有向 dynamodb 发出 50 个请求可能会出现性能问题并需要更多配置?
您是对的,Scan
操作是最糟糕的解决方案,假设您只需要读取一百万条记录中的 50 条记录。这将非常缓慢,并且会花费您一大笔钱,因为当您扫描时,您需要向亚马逊付费以读取所有数据 - even 如果您过滤掉大部分数据。
发出 50 个单独的 GetItem
请求并没有那么糟糕 - 它肯定比扫描要好。您只需为实际检索到的商品向亚马逊支付费用——您无需支付更多费用,因为它是 50 个单独的请求。当然,如果你不想要巨大的延迟,不要一个接一个地启动这些请求——并行启动它们。
但是对于这个use-case,DynamoDB 提供了更好的操作BatchGetItem
。通过此操作,您只需在一个 HTTP 请求中就可以向 DynamoDB 提供 50 个必需键的列表,它会获取所有这些键(并行)和 return 对您的所有响应。 BatchGetItem
似乎最适合您的用例。