Пагинация Dynamo db

Я хочу использовать разбиение на страницы в Dynamodb с помощью aws-sdk DocumentClient(). Я использую node.js.

Я хочу получить первые 10 элементов, а затем вернуть эти значения пользователю. После этого пользователь делает новый запрос, в котором он говорит серверу начать с 10, а сервер получает другие 10 от 10 до 20 и возвращает ответ. Я пробовал LastEvaluatedKey, но мой сценарий другой. Есть ли способ сказать Dynamodb, чтобы он начал с определенного элемента, например 1, а затем установил Limit: 10.


person Nouman Dilshad    schedule 10.05.2019    source источник
comment
Пагинация Dynamodb не имеет типа пропуска и ограничения. Вы должны передать последний ключ клиенту и попросить его переслать его, чтобы перейти на следующую страницу.   -  person Nidhin David    schedule 10.05.2019
comment
Спасибо. Есть ли способ получить все элементы с помощью запроса, чтобы получить все записи из коллекции. Я не хочу использовать сканирование.   -  person Nouman Dilshad    schedule 10.05.2019
comment
Нет ... DynamoDB возвращает не более 1 МБ данных в одном ответе на запрос.   -  person Nidhin David    schedule 10.05.2019


Ответы (1)


Я нашел способ обойти это. Вам нужно получить LastEvaluatedKey из ответа Dynamodb и отправить его обратно во внешний интерфейс, тогда ваш интерфейс должен отправить LastEvaluatedKey в параметрах, и вы можете использовать его как ExclusiveStartKey.

getItems(pageSize, lastItem?) {
    try {
      const params = {
        TableName: 'User',
        Limit: pageSize,
      };
      if (lastItem) {
        params.ExclusiveStartKey = { item_id: lastItem};
      }
      const response = await dynamoDb.scan(params).promise();
      return {
         items: response.Items,
         lastItem: response.LastEvaluatedKey
      }

    } catch (error) {
      throw error;
    }
person Nouman Dilshad    schedule 10.05.2019