我对后端开发和AWS都是陌生的,我正在练习使用AWS Lambda
和DynamoDB
构建api后端。基本上,客户端应该能够通过Lambda
向API Gateway
发出http请求,然后Lambda
会从DynamoDB
中获取记录或将记录插入其中。
所以我卡住的部分是分页。想象一下像StackOverflow这样的Web应用程序,人们可以在那里问问题。该Web应用程序的后端有一个数据库表Questions
,它看起来像这样:
现在我想拥有的是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页并返回最后一页。
从db返回的数据大小也有一定的限制,即1MB。这意味着,如果我在第一个数据库响应中找不到第5000页,则必须要求下一批。对于这样的通用功能,这似乎过于复杂,我觉得必须有更好的方法。
我对学习实际市场中针对上述问题的一般策略感兴趣。例如,StackOverflow实际上不需要花费任何时间就可以使用Java
标签来获取第100000页。它不仅知道每个标签的最后页码。任何人都可以提供可以处理此类查询的适当的lambda示例代码吗?