钥匙要点
分页仅考虑记录计数,而不是每个单独的记录 - 记录使用总记录计数分为页面,并正常分页。它没有考虑每个记录是否属于分页上的正确页面。这可以导致记录的多余显示。
>考虑到这些要点,很难用来默认分页技术来处理实时数据。让我们尝试使用实际情况来识别问题。
假设我们最初有20个记录,并且我们使用10个记录作为将记录分解为页面的极限。下图显示了如何将记录分成页面。
>
>现在假设在我们在第一页上时,结果集由五个新记录更新。下图显示了当前方案。
>现在我们导航到第二页。根据我们的第一张图像,它应从1-10中检索记录。但是,将检索具有数字15-6的记录。您可以清楚地看到,第一页以及第二页都显示了记录数字15-11。
实时数据分页的实际用例> Twitter API光标的分页
Twitter用户配置文件经常用新的推文填充,因此Twitter时间行数据检索机制应该是实时数据供稿中识别分页技术的良好开始。让我们看看它是如何使用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传递以生成下一个结果集。因此,我们将获得准确的结果,如下图所示。
。
基于Facebook API光标的分页
> 与Twitter相比,Facebook的API实现略有不同,即使两个API都使用相同的理论。让我们看一下示例Facebook API请求的响应。大多数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提供分页,则需要。用户需要知道下一页是否可用以及如何获取下一个数据集。
这些是基于光标的分页的基本需求。开发人员经常与基于偏移的分页合作,很少有机会与基于光标的分页合作,因此在适当的情况下确定每种技术的差异和好处很重要。
>>>>>>偏移分页还包含页码,除了下一个链接和上一个链接。但是由于数据的高度动态性质,我们无法为基于光标的分页提供页码。
实现基于光标的分页
https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
>现在我们有了一个简单的数据分页示例,以了解实时数据分页的工作方式。使用此代码并通过结果分页。在登机时,在表末尾添加一些记录以实时。然后向后和向后铺设以检查页面中的数据重复。在基于偏移的分页上做同样的事情以了解差异。
的常见问题(常见问题解答)
基于偏移的分页涉及从一开始就跳过一定数量的记录,然后获取设定的记录。但是,如果在分页上添加或删除了数据,此方法可能会导致重复记录等问题。另一方面,基于光标的分页使用从最后一个获取的记录中使用唯一的标识符(光标)来检索下一组记录。此方法更有效,避免了与基于偏移的分页相关的问题,使其非常适合实时数据。
>>基于光标的分页如何改善性能?基于光标的分页通过减少需要立即处理的数据量来提高性能。基于光标的分页只能获取所有记录,而是跳过一定数字,而只能根据光标获取下一组记录。这样可以减少服务器上的负载,并使分页过程更快,更高效。
>基于Cursor的基于Cursor的分页的潜在缺陷是什么?分页比基于偏移的分页更有效和可靠,它确实具有一些潜在的缺点。例如,实施可能更复杂,尤其是如果您的数据没有明确的唯一标识符作为光标。此外,它可能不适用于所有用例,例如当您需要跳到特定的页码时。
>
>基于光标的分页如何使用MySQL?标识符,例如时间戳或独特的ID,作为光标。然后,您可以使用“ where”和“ limit”子句来修改SQL查询以根据此光标获取记录,以指定以获取的记录范围。Slack在其API中使用基于光标的分页有效获取大量数据。他们使用唯一的标识符作为光标,并在API响应中提供此光标,以允许客户端获取下一组记录。这使他们可以处理具有高性能和可靠性的大型数据集。
以上是用基于光标的分页登录实时数据的详细内容。更多信息请关注PHP中文网其他相关文章!