这类似于这个没有任何答案的问题。我已经阅读了所有关于如何在twitter、facebook和Disqs api中使用游标的内容,以及这篇关于Disqs通常如何构建游标的文章,但我似乎仍然无法理解它们是如何工作的,以及如何在我自己的项目中实现类似的解决方案。有人能具体解释他们背后的不同技术和概念吗?
通常,您应该将请求中的当前项目或页码作为参数传递。其他常用参数是页面的批处理大小。然后在服务器端后端选择并返回适当的数据集,例如SQL查询。
下面是一篇关于分页的文章:基于光标的实时数据分页
游标–我们需要至少有一列具有唯一的顺序值,以实现基于游标的分页。这可能类似于Twitter的max\u id参数或Facebook的after参数。
让我们首先通过一个示例了解为什么偏移分页对于大型数据集失败。
客户端为结果数和偏移量以及页面偏移量提供两个参数限制。例如,如果偏移量=40,限制=20,我们可以告诉数据库返回接下来的20个项目,跳过前40个。
缺点:
光标如何解决这个问题?
基于光标的分页通过返回指向数据集中特定项的指针来工作。在后续请求中,服务器将在给定指针之后返回结果。
在这种情况下,我们将使用参数next\u cursor和limit作为客户端提供的参数。
让我们假设要从最新的用户分页到最老的用户。当客户端第一次请求时,假设我们通过查询选择第一个页面:
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
}
然后,客户端将在第二个请求中提供下一个\u游标作为游标。
SELECT * FROM users
WHERE team_id = %team_id
AND id <= %cursor
ORDER BY id DESC
LIMIT %limit
通过这种方式,我们解决了基于偏移量分页的缺点:
有关详细说明,您可以从slack访问这篇精彩的工程文章!
问题内容: 我是ReactJS的新手,正在其中创建一个简单的TODO应用程序。实际上,这是一个非常基本的应用程序,没有数据库连接,任务存储在数组中。我现在想添加分页功能,并添加了“编辑和删除”功能。如何实施?任何帮助将不胜感激。谢谢…!! 问题答案: 我最近在纯React JS中实现了分页。这是一个工作示例:http : //codepen.io/PiotrBerebecki/pen/pEYPbY
如何在Struts 2中为客户端显示实现分页,并将Hibernate作为持久层。 以下是我迄今为止完成的代码: 有没有办法在没有标签的情况下实现这一点?
问题内容: Spring MVC中是否有任何现成的,易于实现的标准分页组件/ tag-lib或代码示例可用于分页? 问题答案: 有关示例,请参见样本中的JPetstore,例如
问题内容: 是否有任何可用于实现列表分页的库? 假设我有10行的空间,并且用户可以选择是否要按页面向前或向后滚动(因此+-10个项目)。这可能例如由来控制。 要构建一个类,以防止在没有足够的项目可显示时向后/向前滚动,以及自我保存用户当前在哪个页面上的状态,这可能是一项艰巨的工作。 那有什么事吗 问题答案: 我之前已经解决了。我做了一个静态的getPages方法,该方法将通用集合分解为页面列表(也
问题内容: 我知道使用这种方法来实现分页是一种不好的做法,因为当数据变大时,这会消耗大量内存。解决此问题的一种方法是按字段使用自然顺序: 问题是-我是mongo的新手,不知道什么是最好的方式 问题答案: 您正在谈论的概念可以称为“转发分页”。这有一个很好的理由,与使用和修饰符不同,它不能用于“返回”上一页或实际上“跳”至特定页面。至少不需要花费很多精力来存储“可见的”或“发现的”页面,因此,如果您
问题内容: 我不是在寻找Hibernate / JPA / JDBC实现,而是在寻求一种通用的设计模式。 谷歌搜索“分页”为我提供了大量信息,许多有趣的文章解释了如何在UI上实现分页以及各种或多或少都执行相同操作的实现。 简单的bean: 一个简单的DAO界面: 和hibernate实现 现在,我在考虑是否必须在所有接口中都包含相似的参数,那么这里确实有问题。我可以将请求包装在请求bean对象中,