Indexing 使用GSI的DynamoDB查询的结果数据集未返回正确的结果
我有一个dynamo DB表,我目前正在其中存储系统中发生的与每个产品相关的所有事件。主表上有一个主键,其哈希组合为productid、eventtype和eventcategory,排序键作为创建时间。创建了该表并将数据添加到其中 后来,我在表中添加了一个新的GSI,其属性是次要哈希(它只是eventcategory和eventtype(不包括productid)的组合,CreationTime作为排序键。这是为了一次查询多个产品而添加的 GSI似乎工作正常,但直到后来我才意识到返回的数据不正确 下面是一个场景。(我正在对新创建的索引运行所有这些查询) 我在查询过去30天内的产品,查询返回312条记录,但是,当我在过去90天内运行相同的查询时,它只返回128条记录(这是错误的,应该至少等于或大于过去30天的记录) 我的代码中已经嵌入了分页逻辑,因此每次都会验证lastEvaluatedKey,以循环并获取下一组记录,循环完成后,所有结果都会合并 不确定我是否遗漏了什么 如有任何建议,将不胜感激Indexing 使用GSI的DynamoDB查询的结果数据集未返回正确的结果,indexing,amazon-dynamodb,Indexing,Amazon Dynamodb,我有一个dynamo DB表,我目前正在其中存储系统中发生的与每个产品相关的所有事件。主表上有一个主键,其哈希组合为productid、eventtype和eventcategory,排序键作为创建时间。创建了该表并将数据添加到其中 后来,我在表中添加了一个新的GSI,其属性是次要哈希(它只是eventcategory和eventtype(不包括productid)的组合,CreationTime作为排序键。这是为了一次查询多个产品而添加的 GSI似乎工作正常,但直到后来我才意识到返回的数据不正
var limitPtr *int64
if limit > 0 {
limit64 := int64(limit)
limitPtr = &limit64
}
input := dynamodb.QueryInput{
ExpressionAttributeNames: map[string]*string{
"#sch": aws.String("SecondaryHash"),
"#pkr": aws.String("CreationTime"),
},
ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{
":sch": {
S: aws.String(eventHash),
},
":pkr1": {
N: aws.String(strconv.FormatInt(startTime, 10)),
},
":pkr2": {
N: aws.String(strconv.FormatInt(endTime, 10)),
},
},
KeyConditionExpression: aws.String("#sch = :sch AND #pkr BETWEEN :pkr1 AND :pkr2"),
ScanIndexForward: &scanForward,
Limit: limitPtr,
TableName: aws.String(ddbTableName),
IndexName: aws.String(ddbIndexName),
}
您已达到要评估的最大项数(不一定是匹配项数)。限制为1 MB 响应将包含一个LastEvaluatedKey参数,它是最后一项的id。您必须使用额外的ExclusiveStartKey参数执行新查询。(ExclusiveStartKey应与LastEvaluatedKey的值相等。)
当LastEvaluatedKey为空时,您到达表的末尾。您达到了要评估的最大项数(不一定是匹配项数)。限制为1 MB 响应将包含一个LastEvaluatedKey参数,它是最后一项的id。您必须使用额外的ExclusiveStartKey参数执行新查询。(ExclusiveStartKey应与LastEvaluatedKey的值相等。)
当LastEvaluatedKey为空时,即到达表的末尾。通过在DynamoDB控制台中查询来验证结果。通过在DynamoDB控制台中查询来验证结果。