这类似于没有任何答案的this question。我已经阅读了关于如何使用twitter,facebook和disqus api以及this article关于disqus如何通常构建其游标的游标的所有内容,但我仍然无法使用似乎很好地理解了它们如何工作以及如何在我自己的项目中实现类似的解决方案。有人可以具体解释它们背后的不同技术和概念吗?
答案 0 :(得分:33)
让我们首先了解为什么偏移分页对于带有示例的大型数据集失败。
客户端为结果数量和 偏移量 以及页面偏移量提供两个 限制 参数。 例如,当offset = 40,limit = 20时,我们可以告诉数据库返回接下来的20个项目,跳过前40个项目。
缺点:
游标如何解决这个问题?
基于游标的分页通过返回指向数据集中特定项目的指针来工作。在后续请求中,服务器返回给定指针后的结果。
在这种情况下,我们将使用参数 next_cursor 以及 limit 作为客户端提供的参数。< / p>
假设我们想要从最近的用户分页到最老的用户。当客户端第一次请求时,假设我们通过查询选择第一页:
SELECT * FROM users
WHERE team_id = %team_id
ORDER BY id DESC
LIMIT %limit
限制 等于限制加一,以获取比客户端指定的计数多一个结果。额外结果不会在结果集中返回,但我们使用值的ID作为 next_cursor 。
服务器的响应是:
{
"users": [...],
"next_cursor": "1234", # the user id of the extra result
}
然后客户端会在第二个请求中提供 next_cursor 作为游标。
SELECT * FROM users
WHERE team_id = %team_id
AND id <= %cursor
ORDER BY id DESC
LIMIT %limit
有了这个,我们已经解决了基于偏移的分页的缺点:
答案 1 :(得分:1)
通常,您应该将请求中的当前项目或页码作为参数传递。其他常见的参数是页面的批量大小。然后在服务器端后端选择并返回正确的数据集,例如SQL查询。
答案 2 :(得分:1)
以下是有关分页的文章:paginating-real-time-data-cursor-based-pagination
游标–我们至少需要有一列具有唯一顺序值的列,才能实现基于游标的分页。这可能类似于Twitter的max_id参数或Facebook的after参数。
答案 3 :(得分:-5)
默认情况下,某些Graph API连接使用游标。您可以使用&#39;限制&#39; &#39;之前&#39;&#39;之后&#39;你的电话中的参数。如果您仍然不清楚,可以在此处发布您的代码,我可以用它来解释。