Как отсортировать данные по рейтингу с помощью Aws Lambda с помощью nodeJS - PullRequest
0 голосов
/ 08 октября 2019

У меня есть БД на Динамодб. И написание некоторых пользовательских баллов в БД. Также у меня есть лямбда-функция, которая написала это с помощью nodejs. Я хочу получить первые 10 пользователей, у которых больше всего очков. Как я могу сканировать этих пользователей?

Большое спасибо.

1 Ответ

1 голос
/ 08 октября 2019

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/

...