使用带有分页的DynamoDB扫描操作而不是使用GSI查询是否正确,我需要表中的所有项目

问题描述

我读到当数据很大时dynamo db扫描操作很慢。但我想知道,有一种方案可以提取所有项目。还是最好避免扫描? 考虑到索引不是免费的,并且我需要表中的所有项目,因此我会采用这种方法

  1. 请通过选择扫描操作来建议他们是否有问题?
  2. 为什么只有扫描具有并行扫描选项,认情况下查询是并行的吗?
  3. 如果我将查询操作与分页一起使用,它将顺序运行还是并行运行?

解决方法

如果您需要所有物品,则Scan()非常合适。

只要意识到DDB

  • 一次仅返回1MB数据,因此您需要使用ExclusiveStartKey进行循环调用:= LastEvaluatedKey
  • Scan()可以快速消耗已配置的RCU,因此请注意节流阀错误并重试。

针对Scan()的建议是尝试使用Scan()+过滤器代替Query()来处理记录的子集。 Scan()始终读取整个表。

还要注意,从性能的角度来看,Scan()支持parallel scans

总计细分
对于并行扫描请求,TotalSegments代表 扫描操作将进入的段总数 分为。 TotalSegments的值对应于 将执行并行扫描的应用程序工作者。例如, 如果要使用四个应用程序线程来扫描表或 索引,将TotalSegments值指定为4。

但是,如果再次使用预配置读取,那么并行扫描将很快耗尽RCU。