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

is it correct to use a DynamoDB scan operation with pagination instead of query with GSI, I need all the items from the table

我读到当数据很大时 dynamo 数据库扫描操作很慢。但我想知道,有一个提取所有项目的方案。仍然首选避免扫描吗? 考虑到索引不是免费的,我需要 table 中的所有项目,我将采用这种方法。

  1. 如果他们选择扫描操作有任何问题,请提出建议?
  2. 为什么只有scan有并行扫描选项,query默认是并行的?
  3. 如果我使用带分页的查询操作,它会运行顺序还是并行?

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

刚刚意识到DDB

  • 一次只有 returns 1MB 的数据,所以你需要使用 ExclusiveStartKey := LastEvaluatedKey
  • 循环调用
  • Scan() 可以快速消耗您配置的 RCU,因此请注意限制错误并重试。

反对 Scan() 的建议是尝试使用 Scan() + 过滤器代替 Query() 来获取记录子集。 Scan() 总是读取完整的 table.

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

TotalSegments
For a parallel Scan request, TotalSegments represents the total number of segments into which the Scan operation will be divided. The value of TotalSegments corresponds to the number of application workers that will perform the parallel scan. For example, if you want to use four application threads to scan a table or an index, specify a TotalSegments value of 4.

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