Я новичок в разработке бэкэндов и в AWS, и я практикую создание API-интерфейсов API с использованием AWS Lambda
и DynamoDB
. По сути, клиенты должны иметь возможность отправлять http запросы от Lambda
до API Gateway
, тогда Lambda
получит / вставит записи из / в DynamoDB
.
Итак, часть, которую я застрял, - это нумерация страниц. Представьте себе веб-приложение, такое как StackOverflow, куда люди могут заходить и задавать вопросы. Это веб-приложение имеет таблицу базы данных Questions
в бэкэнде и выглядит так:
- QuestionId (String): случайный хеш, ключ раздела
- Tag (String): для простоты предположим, что у каждого вопроса может быть только один тег
- Название (String)
- Content (String)
- CreatedAt (Number): ключ сортировки, время создания в миллисекундах с начала эпохи.
Теперь мне нужна поддержка GET
с нумерацией страниц. API должен быть в состоянии обработать запрос GET в этой форме:
GET http://www.example.com/questions?tag=trees&page=21&pagesize=15
Это должно вернуть список вопросов о деревьях на 21-й странице, где каждая страница содержит не более 15 записей.
Так же, как нумерация страниц StackOverflow:
https://stackoverflow.com/questions/tagged/amazon-web-services?sort=newest&page=21&pagesize=15
Если бы это была таблица SQL, я бы сделал что-то вроде этого:
SELECT * FROM Questions WHERE Tag=trees ORDER BY CreatedAt LIMIT 15 OFFSET (15*20)
Из этого урока, документации и т. Д. Я узнал, что DynamoDB
не совсем так работает. Похоже, что если запрос запрашивает, скажем, 5000-ю страницу, Lambda
необходимо извлечь все 5000 страниц из БД и только отбросить первые 4999 страниц и вернуть последнюю.
Кроме того, существует определенный предел, 1 МБ, в размере данных, возвращаемых из дБ. Это означает, что если я не могу найти 5000-ую страницу в первом ответе БД, я должен запросить следующую партию. Это кажется слишком сложным для такой общей черты, и я чувствовал, что должен быть лучший подход.
Я заинтересован в изучении общих стратегий, которые используются на реальном рынке для вышеуказанных проблем. Например, StackOverflow буквально не тратит время на получение 100000-й страницы с тегом Java
. Мало того, что он даже знает номер последней страницы для каждого тега. Может ли кто-нибудь предоставить подходящий пример лямбда-кода, который может обрабатывать такие запросы?