Не имея score
в качестве ключа сортировки для вашей таблицы, вам нужно будет выполнить полное сканирование таблицы, которое со временем может стать дорогостоящим, особенно по мере роста вашей базы данных. Если известно, что ваши данные имеют согласованную схему, альтернативы RDS (MySQL, PostgreSQL) могут быть лучшим инструментом для этой работы.
Если вы настроены на DynamoDB, в зависимости от вашего шаблона доступа, и если вы обнаружите, что последовательно выполняете это действие, может иметь смысл иметь другую таблицу с score
в качестве ключа сортировки. Вы можете сделать это, создав Глобальный вторичный индекс или Локальный вторичный индекс , который автоматически синхронизируется с вашей базовой таблицей. На этой странице есть полезный пример с табло, которое очень похоже на то, что вы ищете.
Получив второй индекс или изменив ключ сортировки на score
, вы можете выполнить более эффективный query
из кода своего приложения со следующими ограничениями:
Установите для параметра ScanIndexForward
значение false
, чтобы выполнить поиск в порядке убывания (сначала набирается наибольшее количество баллов)
Установите для параметра limit
значение 10
, чтобы прекратить дальнейшие запросы к DynamoDB после возвращения максимального количества элементов
В качестве запроса это будет выглядеть следующим образом:
QueryParam = {
TableName: 'pacman',
IndexName: 'ScoreIndex', // Name of your local/global secondary index
KeyConditionExpression: "Score = :Score ", // Shared partition key
ExpressionAttributeValues: {
":UserId": UserId,
},
ScanIndexForward: false, // false for descending order
Limit: 10 // Limit response to 10 items
}
В качестве альтернативы, вы можете внести изменения в ваш первичный ключ, набрав , сделав его уникальной комбинацией date
и score
, чтобы иметь возможность эффективно запрашивать несколько параметров.