Прямая и обратная нумерация страниц в DynamoDB - PullRequest
1 голос
/ 24 апреля 2020

Я использую DynamoDB и NodeJS для включения некоторых объектов в пользовательский интерфейс. Список длинный, и так как DynamoDB может сканировать / запрашивать не более 1 МБ данных за раз, я решил использовать нумерацию страниц, поэтому на внешнем интерфейсе у меня есть кнопки Previous и Next для разбиения на страницы назад и вперед от текущая страница.

Моя проблема в том, что я хочу получить 20 элементов одновременно из Table X, используя функцию DynamoDB Query на основе выбранного DynamoDB Index.
Допустим, я только что получил первые 20 результатов (0-20), поэтому при нажатии следующей кнопки я хочу получить результаты: 21-40 и так далее. Кроме того, я хочу включить разбивку на страницы в обратном порядке, поэтому, когда я нахожусь на странице, которая показывает результаты: 41-60, кнопка Back снова получит результаты: 21-40.
Насколько я понимаю, DynamoDB не делает поддержка числового смещения.

Как мне реализовать назад и вперед нумерацию страниц? Я новичок ie в DynamoDB, пожалуйста, помогите мне.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Функция нумерации страниц в DynamoDB использует LastEvaluatedKey. Вы должны иметь возможность делать то, что вы хотите с этим, и использовать размер страницы, чтобы всегда быть 20 пунктов. Это просто будет числовое смещение само по себе.

0 голосов
/ 27 апреля 2020

Хотя DynamoDB будет разбивать ваши данные на страницы только в прямом направлении, вам придется иметь дело с обратным разбиением на страницы в Front End .

Для больших Tables ( размером более 1 МБ ), что делает DynamoDB:

  1. Сканирование или запросы размером до 1 МБ.
  2. Возвращает LastEvaluatedKey для получения следующего набора данных или Следующая страница . Это значение используется как Ключ нумерации страниц в Front End для пагинации назад и вперед.

LastEvaluatedKey содержит значение последнего объекта извлекается из DynamoDB во время Scan или Query.

Что нужно сделать (в Back End ):

  1. Использовать LIMIT свойство DynamoDB Query, чтобы указать, что вы хотите только 20 элементов.
  2. Используйте ExclusiveStartKey свойство DynamoDB Query, чтобы указать, что следующий набор данных будет начинаться с указанного значения этого свойства.

Что нужно сделать (в Front End ):

  1. Сохранить массив объектов arr[] для размещения ключей пагинации .

  2. Сохранить переменную page, инициализированную в -1, значение которой будет указывать на текущую страницу пользователя.

  3. Загрузить начальную страницу списка в пользовательский интерфейс. Теперь вместе с данными, если у вас есть LastEvaluatedKey, pu sh в arr и увеличение page.

Теперь у вас есть одна страница и page означает, что вы находитесь на Страница 0 , а arr содержит Ключ страницы следующей страницы.

Код Next Кнопка должна следовать за логикой c:

Запросить ваш сервер для получения следующей страницы, используя ExclusiveStartKey = arr [page]

Когда появятся результаты следующей страницы, у вас снова будет еще один LastEvaluatedKey, поэтому снова вставьте *1019* в arr и увеличьте page. Таким образом, вы получите изображение здесь, как мы сохраняем Page Keys .

Код Back Кнопка должна следовать логике c:

Поскольку переменная page указывает Текущая страница , поэтому page - 1 будет указывать на предыдущую страницу. Итак:
if (page-1> = 0) Запросить ваш сервер для загрузки следующей страницы, используя ExclusiveStartKey = arr [page - 1]

Вам придется управлять, когда Back & Next Кнопки доступны для нажатия с помощью переменных arr[] и page после каждой загрузки страницы.

...