У меня есть таблица динамических БД, в которой в настоящее время хранятся все события, происходящие в моей системе в отношении каждого продукта.В основной таблице имеется первичный ключ с хэш-комбинацией productid, eventtype и eventcategory, а также ключ сортировки как время создания.Таблица была создана, и в нее были добавлены данные.
Позже я добавил в таблицу новый GSI с такими атрибутами, как Вторичный хэш (который представляет собой просто комбинацию eventcategory и eventtype (исключая productid) и CreationTime в качестве ключа сортировки. Это было добавлено, чтобы я мог запрашиватьнесколько продуктов одновременно.
Кажется, GSI работает нормально, однако только позже я понял, что возвращаемые данные неверны
Вот сценарий. (Я выполняю все эти запросы для недавносоздан индекс) Я запрашивал продукты за последние 30 дней, и Запрос возвращает 312 записей. Однако, когда я выполняю тот же запрос в течение последних 90 дней, он возвращает мне только 128 записей (что неверно, должно быть по крайней мере равным илибольше, чем записи последних 30 дней)
У меня уже есть логика разбиения на страницы, встроенная в мой код, так что lastEvaluatedKey проверяется каждый раз, чтобы выполнить цикл и извлечь следующий набор записей, а после цикла всерезультаты объединяются.
Не уверен, что я что-то упустил.
Любые предложения будут оценены.
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),
}