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

问题描述

我读到数据很大时发电机数据库扫描操作很慢。但我想知道,有一个场景来提取所有项目。是否仍然首选避免扫描?考虑到索引不是免费的,并且我需要表中的所有项目,我将采用这种方法。

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

标签: paginationamazon-dynamodbdynamodb-queriesamazon-dynamodb-index

解决方案


如果您需要所有项目,那么 Scan() 非常好。

只要意识到 DDB

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

反对 Scan() 的建议是尝试使用 Scan() + filter 代替 Query() 记录子集。Scan() 总是读取整个表。

另请注意,从性能角度来看,Scan() 支持并行扫描

TotalSegments
对于并行扫描请求,TotalSegments 表示扫描操作将被分成的段的总数。TotalSegments 的值对应于将执行并行扫描的应用程序工作人员的数量。例如,如果要使用四个应用程序线程来扫描表或索引,请将 TotalSegments 值指定为 4。

但同样,如果使用预置读取......并行扫描将很快耗尽 RCU。


推荐阅读