首页 > 后端开发 > php教程 > 用基于光标的分页登录实时数据

用基于光标的分页登录实时数据

Jennifer Aniston
发布: 2025-02-20 08:42:10
原创
989 人浏览过

用基于光标的分页登录实时数据

分页是一种将大型记录集分解为称为页面的较小部分的技术。作为开发人员,您应该熟悉实施分页,但是即使对于经验丰富的开发人员来说,为实时数据实施分页可能会变得棘手。在本教程中,我们将讨论实时数据分页和基于光标的分页的实际用例和解决方案。

钥匙要点

分页是一种用于将大记录集分为较小的部分(称为页面)的方法。由于频繁更新,在添加或删除数据时实施分页可能会具有挑战性。

>
    >各种社交网站,例如Twitter和Facebook,已成功实施了实时数据分页。他们使用基于光标的分页,该分页依赖于唯一的标识符(光标),而不是分页的记录计数。 基于光标的分页需要至少一个具有唯一顺序值的列,类似于Twitter的MAX_ID参数或参数后的Facebook。它还需要一个计数参数来过滤有限数量的结果,以及下一个和上一个URL才能浏览数据。 基于光标的分页通常比基于偏移的分页更有效,更可靠,尤其是用于实时数据或大型数据集。它减少了服务器上的负载,并使分页过程更快,更高效。
  • >
  • >实现基于光标的分页涉及几个步骤,包括确定用作光标的唯一标识符,修改数据库查询以基于此光标获取记录,并更新应用程序的UI以处理流行的数据并允许用户来处理用户浏览页面。
  • 实时数据分页
  • 中识别问题 Wikipedia将实时数据定义为收集后立即提供的信息。提供的信息的及时性没有延迟。 在这样的应用程序中,由于频繁更新,很难提供准确的分页数据。让我们看一下在管理实时数据时使用标准分页的问题。
  • >
  • >
  • 假定数据是静态的,并且不经常变化 - 在默认分页中,检索到的记录集被分为许多页面。由于数据并不经常更改,用户觉得分页正常工作,但是在添加新数据或删除现有数据时,分页的结果变得不准确。
>

>

分页仅考虑记录计数,而不是每个单独的记录 - 记录使用总记录计数分为页面,并正常分页。它没有考虑每个记录是否属于分页上的正确页面。这可以导致记录的多余显示。

>

考虑到这些要点,很难用来默认分页技术来处理实时数据。让我们尝试使用实际情况来识别问题。

假设我们最初有20个记录,并且我们使用10个记录作为将记录分解为页面的极限。下图显示了如何将记录分成页面。

>

用基于光标的分页登录实时数据

>现在假设在我们在第一页上时,结果集由五个新记录更新。下图显示了当前方案。

用基于光标的分页登录实时数据

>现在我们导航到第二页。根据我们的第一张图像,它应从1-10中检索记录。但是,将检索具有数字15-6的记录。您可以清楚地看到,第一页以及第二页都显示了记录数字15-11。

实时数据分页的实际用例

我们都知道,重新发明车轮不是开发人员应该做的。我们应该研究在考虑建立自己的问题之前解决这些问题的现有网页技术。许多社交网站(例如Twitter和Facebook)在其用户配置文件中提供了实时数据。在本节中,我们将使用一些最受欢迎的网站来研究实时数据分页的实际用例。

> Twitter API光标的分页

Twitter用户配置文件经常用新的推文填充,因此Twitter时间行数据检索机制应该是实时数据供稿中识别分页技术的良好开始。让我们看看它是如何使用Twitter API方法的工作方式的。

以下内容包含对Twitter API搜索推文方法的示例请求。

在上述URL中,我们请求包含“ PHP”一词的最新推文,并使用计数参数将结果设置为10块。这是偏移分页的典型行为,我们根据记录计数回复。但是在这里,我们可以看到两个距离ind_id和max_id的其他参数,这使基于光标的分页构成。让我们来看看基于光标的分页如何使用我们的早期示例。

>

>我们将20个记录分为2页,并假设我们在第一页上。 5个新记录被添加到列表的顶部。以下图像预览了当前方案。

https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
登录后复制
登录后复制
登录后复制

现在,让我们看一下Twitter搜索请求的第一页生成的响应的一部分。您可以在此处查看完整的响应格式。

https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
登录后复制
登录后复制
登录后复制
如您所见,

> search_metadata部分提供了有关结果的详细信息。如果有更多记录可以分页,它将生成Next_Results URL。我们主要使用max_id参数进行分页。对于每个响应,我们将检索max_id参数,我们可以使用它来生成下一个结果集。我们使用MAX_ID参数接收比给定ID的更古老的结果。

>

在我们的示例中,在显示记录20-11时,我们应该将MAX_ID参数作为记录11检索。然后,我们将MAX_ID传递以生成下一个结果集。因此,我们将获得准确的结果,如下图所示。

用基于光标的分页登录实时数据

如您所见,我们可以通过消除顶部15个记录而不是基于偏移的分页上的15个记录来获得第二页的准确结果。在基于光标的分页中,我们无法考虑页面的概念,因为它会迅速变化,因此结果将被视为上一个或下一个。通常,MAX_ID足够有效地产生准确的结果,但是在某些情况下,自_ID以来也是必不可少的,而来回访问。您可以查看在Twitter的开发人员部分上同时使用MAX_ID和afta后的_ID的更高级的示例。

基于Facebook API光标的分页

> 与Twitter相比,Facebook的API实现略有不同,即使两个API都使用相同的理论。让我们看一下示例Facebook API请求的响应。

>

如您所见,Facebook使用两个基于字符串的光标,以进行分页,而不是aft_id and max_id。在Facebook中,前光标将指向页面的开始,而后光标指向页面末尾。

大多数API具有实时数据使用此机制,可以通过其结果准确地划分。作为开发人员,我们需要了解基于光标的分页背后的理论,以便使用现有的API并在必要时创建自己的理论。
"search_metadata": {
  "max_id": 250126199840518145,
  "since_id": 24012619984051000,
  "refresh_url": "?since_id=250126199840518145&q=php&result_type=recent&include_entities=1",

  "next_results": "?max_id=249279667666817023&q=php&count=10&include_entities=1&result_type=recent",

  "count": 10,
  "completed_in": 0.035,
  "since_id_str": "24012619984051000",
  "query": "php",
  "max_id_str": "250126199840518145"
}
登录后复制
实时数据建立分页的基础

实施实时数据分页是本教程范围之外的复杂任务,因此我们将研究基本需求和创建简单的分页机制以了解基于光标的分页的过程。

让我们使用先前讨论的示例来确定基于光标的分页的基本组成部分。

光标 - 我们需要至少具有一个具有唯一顺序值的列来实现基于光标的分页。这可能类似于Twitter的MAX_ID参数或参数后的Facebook。

    计数 - 我们需要计数参数,就像基于偏移的分页一样,在光标之前或之后过滤有限数量的结果。
  • >

    下一个URL - 如果我们通过API提供分页,则需要。用户需要知道下一页是否可用以及如何获取下一个数据集。

  • 上一个URL - 如果我们通过API提供分页,则需要。用户需要知道上一页是否可用以及如何获取下一个数据集。
  • 这些是基于光标的分页的基本需求。开发人员经常与基于偏移的分页合作,很少有机会与基于光标的分页合作,因此在适当的情况下确定每种技术的差异和好处很重要。

    >>>>>>
  • 在偏移分页中,我们可以按任何列进行排序并分配结果,而基于光标的分页则取决于唯一光标列的分类。

偏移分页还包含页码,除了下一个链接和上一个链接。但是由于数据的高度动态性质,我们无法为基于光标的分页提供页码。

    通常,偏移分页允许我们在两个方向上导航,而基于光标的分页大多用于向前导航。
  • 到目前为止,我们研究了基于光标的分页的基本需求和差异。现在,我们可以进入示例实现以确定其工作原理。

    实现基于光标的分页

  • 首先,我们使用PDO创建数据库连接。然后,我们执行句柄汇轮函数来插入结果。 然后,我们检查MAX_ID或MIN_ID参数是否可在URL中使用。 MAX_ID与Facebook的参数相似,并用于向前导航。 MIN_ID与Facebook的参数相似,并用于向后导航。另外,我们设置了导航方向,使用max_id或min_id和分类顺序的Where子句。

    > 然后,我们执行查询以获取完整的结果计数,然后进行相同的查询,并带有限制性语句以缩小结果。
  • >
  • 如果我们朝着先前的方向进行遍历,则必须将排序更改为ASC。否则,它将检索最新记录,而不是上一页。我们扭转了数组中的记录以显示它们为下降。 然后,我们循环通过结果。循环时,我们将第一个记录的ID分配为MIN_ID,最后记录为MAX_ID。这些光标值用于通过消除重复来过滤准确的数据。 最后,我们可以查看用于实现分页链接的Paginator函数。

  • 以下代码包含本节中生成的分页的初始化代码。
https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
登录后复制
登录后复制
登录后复制

>现在我们有了一个简单的数据分页示例,以了解实时数据分页的工作方式。使用此代码并通过结果分页。在登机时,在表末尾添加一些记录以实时。然后向后和向后铺设以检查页面中的数据重复。在基于偏移的分页上做同样的事情以了解差异。

结论

在本教程中,我们通过基于光标的分页了解了实时数据分页背后的理论。让我们在下面的评论中知道您的想法和经验! 基于光标的分页

的常见问题(常见问题解答)

>基于偏移量和基于光标的分页之间的主要区别是什么?

基于偏移的分页涉及从一开始就跳过一定数量的记录,然后获取设定的记录。但是,如果在分页上添加或删除了数据,此方法可能会导致重复记录等问题。另一方面,基于光标的分页使用从最后一个获取的记录中使用唯一的标识符(光标)来检索下一组记录。此方法更有效,避免了与基于偏移的分页相关的问题,使其非常适合实时数据。

>

>基于光标的分页如何处理实时数据?基于基于的分页对于实时数据特别有效,因为它使用了最后一个获取的记录中使用唯一的标识符(光标)来检索下一组记录。这意味着,即使添加了新数据或在分页过程中删除了现有数据,光标仍将指向正确的下一个记录,以确保不会错过或重复记录。可以与任何类型的数据一起使用?但是,对于效率至关重要的实时数据或大型数据集特别有效。光标可以是任何唯一的标识符,例如时间戳或唯一的ID,可用于获取下一组记录。

>基于光标的分页如何改善性能?基于光标的分页通过减少需要立即处理的数据量来提高性能。基于光标的分页只能获取所有记录,而是跳过一定数字,而只能根据光标获取下一组记录。这样可以减少服务器上的负载,并使分页过程更快,更高效。

>

>如何在我的应用程序中实现基于光标的分页?首先,您需要确定用作光标的唯一标识符。这可能是时间戳,独特的ID或任何其他独特的值。接下来,您需要修改数据库查询以根据此光标获取记录。最后,您需要更新应用程序的UI来处理分页的数据并允许用户在页面上导航。

基于Cursor的基于Cursor的分页的潜在缺陷是什么?分页比基于偏移的分页更有效和可靠,它确实具有一些潜在的缺点。例如,实施可能更复杂,尤其是如果您的数据没有明确的唯一标识符作为光标。此外,它可能不适用于所有用例,例如当您需要跳到特定的页码时。

>可以将基于光标的分页用于GraphQl?

是的,是的,Cursor基于GraphQl可以使用基于基础的分页。实际上,GraphQL通过中继规范对基于光标的分页有内置支持。这使您可以轻松地在GraphQl应用程序中实现高效,可靠的分页。

>

>基于光标的分页如何使用MySQL?标识符,例如时间戳或独特的ID,作为光标。然后,您可以使用“ where”和“ limit”子句来修改SQL查询以根据此光标获取记录,以指定以获取的记录范围。

>如何在其中使用Slack Slack使用基于光标的分页。 API?

Slack在其API中使用基于光标的分页有效获取大量数据。他们使用唯一的标识符作为光标,并在API响应中提供此光标,以允许客户端获取下一组记录。这使他们可以处理具有高性能和可靠性的大型数据集。

>基于光标的分页的JSON API规范是什么?标识符是光标,并将此光标包括在API响应的“链接”对象中。这使客户可以通过遵循提供的链接轻松获取下一组记录。该规范提供了一种在JSON API中实现基于光标的分页的标准,一致的方法。

以上是用基于光标的分页登录实时数据的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板