问题描述
我读到当数据很大时dynamo db扫描操作很慢。但我想知道,有一种方案可以提取所有项目。还是最好避免扫描? 考虑到索引不是免费的,并且我需要表中的所有项目,因此我会采用这种方法。
解决方法
如果您需要所有物品,则Scan()非常合适。
只要意识到DDB
- 一次仅返回1MB数据,因此您需要使用
ExclusiveStartKey
进行循环调用:=LastEvaluatedKey
- Scan()可以快速消耗已配置的RCU,因此请注意节流阀错误并重试。
针对Scan()的建议是尝试使用Scan()+过滤器代替Query()来处理记录的子集。 Scan()始终读取整个表。
还要注意,从性能的角度来看,Scan()支持parallel scans。
总计细分
对于并行扫描请求,TotalSegments代表 扫描操作将进入的段总数 分为。 TotalSegments的值对应于 将执行并行扫描的应用程序工作者。例如, 如果要使用四个应用程序线程来扫描表或 索引,将TotalSegments值指定为4。
但是,如果再次使用预配置读取,那么并行扫描将很快耗尽RCU。