Я столкнулся с подобной проблемой.
Общий подход к разбиению на страницы заключается в использовании «начального индекса» или «начальной страницы» и «длины страницы».
Подход, основанный на "ExclusiveStartKey" и "LastEvaluatedKey", очень специфичен для DynamoDB.
Мне кажется, что эта специфическая реализация DynamoDB для нумерации страниц должна быть скрыта от клиентского / пользовательского интерфейса API.
Кроме того, в случае, если приложение является безсерверным, с использованием сервиса, такого как Lambda, будет невозможно поддерживать состояние на сервере. Другая сторона - реализация клиента станет очень сложной.
Я пришел с другим подходом, который, я думаю, является общим (и не специфичным для DynamoDB)
Когда клиент API указывает начальный индекс, извлеките все ключи из
таблицу и сохранить его в массив.
Узнайте ключ для начального индекса из массива, который
указано клиентом.
Используйте ExclusiveStartKey и извлеките количество записей, как
указано в длине страницы.
Если параметр индекса запуска отсутствует, вышеуказанные шаги не выполняются
необходимо, нам не нужно указывать ExclusiveStartKey в проверке
работа.
У этого решения есть некоторые недостатки -
Нам нужно будет извлечь все ключи, когда пользователю нужно разбить на страницы
Начальный индекс.
Нам понадобится дополнительная память для хранения идентификаторов и индексов.
Дополнительные операции сканирования базы данных (одна или несколько для извлечения
ключи)
Но я чувствую, что это будет очень легкий подход для клиентов, которые используют наши API. Обратное сканирование будет работать без проблем. Если пользователь хочет видеть «n-ую» страницу, это будет возможно.