Golang dynamodb并行扫描为所有段返回相同的LastEvaluatedKey
Golang dynamodb parallel scan returning same LastEvaluatedKey for all segment
我是 运行 一个执行 dynamodb
parallel scan
table 的 golang
程序。我的 ScanInput 对象是:
params = &dynamodb.ScanInput{
TableName: aws.String(tableName),
ExclusiveStartKey: lastEvalKey,
Segment: aws.Int64(segment),
TotalSegments: aws.Int64(TOTAL_SEG),
}
除了第一个,我收到所有 segment
错误。例如,如果 totalsegment
是 4,那么 3 将 return 以下错误:
ValidationException: The provided starting key is invalid: Invalid ExclusiveStartKey. Please use ExclusiveStartKey with correct Segment. TotalSegments: 4 Segment: 2
我通过调试检查有错误的段 LastEvaluatedKey
与没有抛出错误的段相同。
我正在为每个段调用在等待组中扫描为 goroutine 的函数。
var wg sync.WaitGroup
wg.Add(int(TOTAL_SEG))
for i := 0; i < int(TOTAL_SEG); i++ {
go func(i int) {
Scan(int64(i))
wg.Done()
}(i)
}
wg.Wait()
任何人都可以指导什么是问题。提前致谢。
解决问题。问题是对于第一次扫描的每个段,我将 ExclusiveStartKey
作为 nil 传递,因为每个段的起点都相同,并且 return 与 LastEvaluatedKey
.[=16= 的值相同]
对于第一次扫描,我没有为每个 segment
传递 ExclusiveStartKey,对于每个段的后续扫描,我在 ExclusiveStartKey
的上一次扫描中使用了 LastEvaluatedKey
return。
仔细检查 https://amazon-dynamodb-labs.com/design-patterns/ex2scan/step2.html 处的示例后,我解决了问题。
我是 运行 一个执行 dynamodb
parallel scan
table 的 golang
程序。我的 ScanInput 对象是:
params = &dynamodb.ScanInput{
TableName: aws.String(tableName),
ExclusiveStartKey: lastEvalKey,
Segment: aws.Int64(segment),
TotalSegments: aws.Int64(TOTAL_SEG),
}
除了第一个,我收到所有 segment
错误。例如,如果 totalsegment
是 4,那么 3 将 return 以下错误:
ValidationException: The provided starting key is invalid: Invalid ExclusiveStartKey. Please use ExclusiveStartKey with correct Segment. TotalSegments: 4 Segment: 2
我通过调试检查有错误的段 LastEvaluatedKey
与没有抛出错误的段相同。
我正在为每个段调用在等待组中扫描为 goroutine 的函数。
var wg sync.WaitGroup
wg.Add(int(TOTAL_SEG))
for i := 0; i < int(TOTAL_SEG); i++ {
go func(i int) {
Scan(int64(i))
wg.Done()
}(i)
}
wg.Wait()
任何人都可以指导什么是问题。提前致谢。
解决问题。问题是对于第一次扫描的每个段,我将 ExclusiveStartKey
作为 nil 传递,因为每个段的起点都相同,并且 return 与 LastEvaluatedKey
.[=16= 的值相同]
对于第一次扫描,我没有为每个 segment
传递 ExclusiveStartKey,对于每个段的后续扫描,我在 ExclusiveStartKey
的上一次扫描中使用了 LastEvaluatedKey
return。
仔细检查 https://amazon-dynamodb-labs.com/design-patterns/ex2scan/step2.html 处的示例后,我解决了问题。