鑰匙要點
分頁僅考慮記錄計數,而不是每個單獨的記錄 - 記錄使用總記錄計數分為頁面,並正常分頁。它沒有考慮每個記錄是否屬於分頁上的正確頁面。這可以導致記錄的多餘顯示。
>考慮到這些要點,很難用來默認分頁技術來處理實時數據。讓我們嘗試使用實際情況來識別問題。
假設我們最初有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中文網其他相關文章!