API做翻页的两种思路
在开发API的时候,有时候数据太多了,就需要分页读取。 基于偏移量的分页(Offset-based)这种方式就是会提供一个每页笔数(page size)来定义返回条目的最大数,提供一个页数(page number)来表示从哪里开始读取数据。 例如: SELECT * FROM "CampusResumes" ORDER BY "Name" DESC LIMIT 5 OFFSET 10; 这句话的意思就是从该表中读取数据,按照Name字段降序排序,从第10笔数据后开始读取,一共读取5笔(可能不足5笔)。 这就相当于page size = 5,page number = 3的分页读取。 ? Offset-based分页方式实现起来非常的简单,对用户来说体验也比较好。但是还有有一些劣势的:
总体来说,当允许结果出现误差的时候,Offset-based分页还是很好用的。 ? 基于游标的分页(Cursor-based)为了解决Offset-based分页的那些问题,可以采用Cursor-based分页。 这种方式是这样的:客户端首先发送请求,请求里提供所需数据的数量。然后服务器响应请求,返回这些数量的数据(如果有这么多数据的话),同时还会返回一个游标(Cursor)。在下一次请求中,客户端除了发送请求数据的数量之外,还把这个cursor也传送过去,这个cursor就表示这次所要读取的数据的开始位置。 这看起来和Offset-based分页差别不大,但是却更有效率。数据库里面的数据可以根据cursor值来获取。 例如: SELECT * FROM "CampusResumes" WHERE "Id" > 15 ORDER BY "Id" LIMIT 5; 这个例子里,上次请求返回的cursor(Id字段)值为15,这次要获取Id比15大的连续的5条数据。 这里的Id字段本身就是一个索引,所以查询起来非常快。 在这次请求的响应里,可以把本次结果的最后一条的Id作为cursor再返回去: 所以返回的cursor值为23,以供下次读取。 ? Cursor-based翻页的优点是:
Cursor-based翻页通常适用于大量和动态的数据集,但是它也有一些缺点:
对于Cursor字段的选择:
总体来说Cursor-based翻页还是更适合于高吞吐的应用,这种情况下客户端通常需要扫描整个数据集。 ? 翻页的最佳实践
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |