Shu*_*ava 45
让我们首先理解为什么偏移分页对于具有示例的大型数据集失败.
客户端为结果数和偏移量以及页面偏移量提供两个参数限制.例如,当offset = 40,limit = 20时,我们可以告诉数据库返回接下来的20个项目,跳过前40个项目.
缺点:
游标如何解决这个问题?
基于游标的分页通过返回指向数据集中特定项的指针来工作.在后续请求中,服务器返回给定指针后的结果.
在这种情况下,我们将使用参数next_cursor和limit作为客户端提供的参数.
假设我们想要从最近的用户分页到最老的用户.当客户端第一次请求时,假设我们通过查询选择第一页:
SELECT * FROM users
WHERE team_id = %team_id
ORDER BY id DESC
LIMIT %limit
Run Code Online (Sandbox Code Playgroud)
其中limit等于limit加1,以获取比客户端指定的计数多一个结果.额外的结果不会在结果集中返回,但我们使用值的ID作为next_cursor.
服务器的响应是:
{
"users": [...],
"next_cursor": "1234", # the user id of the extra result
}
Run Code Online (Sandbox Code Playgroud)
然后,客户端将在第二个请求中提供next_cursor作为游标.
SELECT * FROM users
WHERE team_id = %team_id
AND id <= %cursor
ORDER BY id DESC
LIMIT %limit
Run Code Online (Sandbox Code Playgroud)
有了这个,我们已经解决了基于偏移的分页的缺点:
Muk*_*dir -8
某些 Graph API 连接默认使用游标。您可以在调用中使用“limit”和“before”/“after”参数。如果你还不清楚,你可以在这里发布你的代码,我可以用它来解释。