假设我有一个lambda函数,并且作为事件参数,我需要在dynamodb表中查找大约50个主ID,哪种更好的方法是-每个不同的主ID分别获得50个查询或者一次扫描,然后将扫描的主要ID结果与接收为参数的主要ID进行比较?
我认为50 get查询在性能方面会更好,因为如果明天我将拥有100万条记录,那么扫描它们全部然后仅过滤其中的50条记录将浪费时间和内存,但是另一方面向dynamodb发出50个请求是否会出现性能问题并需要更多配置?
答案 0 :(得分:2)
您说对了Scan
操作(假设您只需要读取一百万条记录中的50条记录),那是最糟糕的解决方案。这会非常慢,并且会花费您一分钱,因为扫描时,您需要向Amazon支付读取所有数据的费用-甚至(如果您将其中的大部分数据过滤掉了)。
发出50个单独的GetItem
请求还不错-肯定比扫描好。您只需为实际检索到的商品支付Amazon费用-您无需支付更多,因为它是50个单独的请求。当然,如果您不希望有巨大的延迟,则不要只是一个接一个地启动这些请求-并行启动它们。
但是对于此用例,DynamoDB提供了更好的操作BatchGetItem
。通过此操作,您可以在一个HTTP请求中为DynamoDB提供50个必需密钥的列表,它将(并行)获取所有密钥并将所有响应返回给您。看来BatchGetItem
最适合您的用例。