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 处的示例后,我解决了问题。