Max()
в NoSQL намного сложнее, чем в SQL. И в действительности это не масштабируется - если вы хотите добиться очень высокой масштабируемости при достижении этого, дайте мне знать, но давайте вернемся к вопросу.
Предположим, что ваша таблица выглядит так:Добавьте в таблицу фиктивный атрибут category
, который будет постоянным (например, значение «A»). Создайте индекс:
category - hash key
score - sort key
Запросите этот индекс по хеш-ключу "A" в резервном порядке, чтобы получить результаты намного быстрее, чем scan
. Но это масштабируется до 10 ГБ (максимальный размер раздела, все данные находятся в одном разделе). Также убедитесь, что вы проецируете только необходимые атрибуты для этого индекса, чтобы сэкономить место.
Например, вы можете увеличить размер до 30 ГБ, установив 3 категории («A», «B», «C»), выполняя 3 запроса и программно объединяя результаты. Это немного повлияет на производительность, но все же лучше, чем полное сканирование.
EDIT
var params = {
TableName: 'MyTableName',
Limit: 10,
// Set ScanIndexForward to false to display most recent entries first
ScanIndexForward: false,
KeyConditionExpression: 'category = : category',
ExpressionAttributeValues: {
':category': {
S: 'category',
},
},
};
dynamo.query(params, function(err, data) {
// handle data
});
source: https://www.debassociates.com/blog/query-dynamodb-table-from-a-lambda-function-with-nodejs-and-apex-up/