偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

現(xiàn)代應(yīng)用中基于偏移量和游標(biāo)分頁的高效數(shù)據(jù)管理

譯文
存儲 數(shù)據(jù)管理
本文探索與Jakarta Data、Quarkus和MongoDB集成的基于偏移量和游標(biāo)的分頁,強(qiáng)調(diào)它們在REST API中的優(yōu)勢和實(shí)際用途。

譯者 | 李睿

審校 | 重樓

在軟件開發(fā)中,有效地管理大型數(shù)據(jù)集至關(guān)重要。而檢索策略在提高性能和可擴(kuò)展性方面起著至關(guān)重要的作用,特別是在響應(yīng)時間非常關(guān)鍵的情況下。分頁是有效管理數(shù)據(jù)的一項(xiàng)核心技術(shù),它對于優(yōu)化性能和資源管理至關(guān)重要。本文將探討適用于不同場景和需求的兩種分頁策略:基于偏移量的分頁和基于游標(biāo)的分頁。這些策略將幫助用戶了解分頁的重要性,以及它們?nèi)绾问顾麄兊南到y(tǒng)受益。

利用Jakarta Data,本文將探索這些分頁技術(shù)集成到使用Quarkus和MongoDB開發(fā)的REST API中。這種組合展示了實(shí)際應(yīng)用的實(shí)現(xiàn),并突出了現(xiàn)代技術(shù)和先進(jìn)數(shù)據(jù)處理方法之間的協(xié)同作用。

本文旨在全面理解每種分頁方法的機(jī)制、優(yōu)點(diǎn)和權(quán)衡,使開發(fā)人員能夠做出適合復(fù)雜和高需求應(yīng)用程序的明智決策。

分頁:從古代卷軸到現(xiàn)代數(shù)據(jù)庫

分頁是數(shù)據(jù)組織中的一個重要概念,其根源可以追溯到最早的書面記錄形式。在現(xiàn)代應(yīng)用方法中,分頁將內(nèi)容劃分為離散的頁面,無論是印刷頁面還是數(shù)字頁面。通過使信息訪問易于管理和直觀,以及通過限制在任何時間加載或呈現(xiàn)的數(shù)據(jù)量來增強(qiáng)數(shù)據(jù)檢索系統(tǒng)的性能來改進(jìn)用戶體驗(yàn)。

有效數(shù)據(jù)組織的必要性是一個復(fù)雜的難題。像羅馬這樣的古代文明發(fā)展了早期管理大量書面信息的方法。盡管古羅馬人沒有像現(xiàn)代人所理解的那樣使用分頁——將文本劃分為頁面,但他們實(shí)施了預(yù)示著現(xiàn)代分頁系統(tǒng)的組織方法。

在羅馬,長文本通常寫在紙莎草或牛皮紙制成的卷軸上。這些卷軸很長,采用索引和標(biāo)記來導(dǎo)航。這種標(biāo)記的作用類似于現(xiàn)代目錄,引導(dǎo)讀者閱讀不同的文本部分。雖然按照當(dāng)今的標(biāo)準(zhǔn)來看,這種方法很簡陋,但它代表了一種早期的分頁形式,原因是它將信息組織成可以獨(dú)立訪問的片段。

此外,羅馬人還使用蠟板來記錄較短的文件。這些蠟板可以裝訂在一起,形成一種類似于當(dāng)今書籍的結(jié)構(gòu)——手抄本(codex)。手抄本的出現(xiàn)是文本組織的一次重大演變,使人們能夠更快、更有效地獲取信息。用戶可以翻頁,這顯然是當(dāng)前分頁系統(tǒng)的前身,顯著地提高了查看信息的速度和便利性。

在數(shù)字時代,分頁對于有效處理大型數(shù)據(jù)集至關(guān)重要。數(shù)字分頁通過分段交付內(nèi)容而不是要求同時加載整個數(shù)據(jù)集,有助于管理服務(wù)器負(fù)載并縮短響應(yīng)時間。它通過提供無縫的導(dǎo)航體驗(yàn)來節(jié)省資源,并改進(jìn)用戶與應(yīng)用程序的交互。

古羅馬的文本組織方法和現(xiàn)代數(shù)字分頁之間的相似之處突出了貫穿歷史的持續(xù)需求:有效地管理大量信息。無論是通過卷軸上的物理標(biāo)記、手抄本的開發(fā),還是復(fù)雜的數(shù)字分頁算法,其核心挑戰(zhàn)仍然是一樣的——使信息可訪問和可管理。

現(xiàn)代應(yīng)用中的分頁:必要性和策略

分頁是現(xiàn)代軟件應(yīng)用程序中的一個基本特性,它有助于將數(shù)據(jù)組織成可管理的部分。這種方法通過防止信息過載來增強(qiáng)用戶體驗(yàn),并通過減少后端系統(tǒng)的負(fù)載來優(yōu)化應(yīng)用程序性能。當(dāng)對數(shù)據(jù)進(jìn)行分頁時,系統(tǒng)一次只能查詢和呈現(xiàn)必要的數(shù)據(jù)子集,從而減少內(nèi)存使用并改善響應(yīng)時間。它在大型數(shù)據(jù)集或用戶高并發(fā)性應(yīng)用程序中尤其重要。在這些應(yīng)用程序中,高效的數(shù)據(jù)處理可以顯著提高可擴(kuò)展性和用戶滿意度。

分頁非常有用,但它也帶來了一些挑戰(zhàn)。開發(fā)人員需要仔細(xì)平衡用戶體驗(yàn)和服務(wù)器性能。實(shí)現(xiàn)分頁需要在客戶端和服務(wù)器端附加邏輯,這會使其開發(fā)變得更加復(fù)雜。雖然分頁可以通過只獲取部分?jǐn)?shù)據(jù)來減少初始加載時間,但它可能會增加用戶在多個頁面中導(dǎo)航時的總等待時間。而維護(hù)頁面之間的場景,例如排序和過濾器,也需要仔細(xì)的狀態(tài)管理,并增加了復(fù)雜性。

在現(xiàn)代網(wǎng)頁(Web)開發(fā)中,有兩種主要的分頁策略:基于偏移量的分頁和基于游標(biāo)的分頁。每種分頁策略都有優(yōu)點(diǎn)和缺點(diǎn),使其更適合不同的場景。

基于偏移量的分頁

基于偏移量的分頁是將數(shù)據(jù)劃分為可管理數(shù)據(jù)塊的傳統(tǒng)方法。在返回一定數(shù)量的記錄之前,跳過指定數(shù)量的記錄來訪問數(shù)據(jù)。這種技術(shù)經(jīng)常用于Web和數(shù)據(jù)庫應(yīng)用程序中,以便使用簡單的數(shù)字偏移量直接導(dǎo)航到特定的頁面。

圖1基于偏移量的分頁示意圖圖1基于偏移量的分頁示意圖

基于偏移量的分頁實(shí)現(xiàn)通常涉及數(shù)據(jù)庫查詢中的兩個關(guān)鍵參數(shù):

  • LIMIT:該參數(shù)指定在單個頁面中返回的最大記錄數(shù)。它定義了每個數(shù)據(jù)塊的大小,與分頁中的“頁面”概念保持一致。
  • OFFSET:該參數(shù)表示從數(shù)據(jù)集開頭跳過的記錄數(shù)。OFFSET的值通常計(jì)算為(頁面-1)*頁面大小,允許用戶直接跳轉(zhuǎn)到任何頁面的開頭。

基于偏移量的分頁因其簡單和直接的實(shí)現(xiàn)而備受青睞。在用戶可以直接跳轉(zhuǎn)到特定頁面,并且記錄總數(shù)已知且相對穩(wěn)定的應(yīng)用程序中,這種方法尤其有效。這使得它非常適合用戶友好的導(dǎo)航和簡單性至關(guān)重要的情況。

基于偏移量的分頁的主要限制是它在大型數(shù)據(jù)集上的可擴(kuò)展性。隨著數(shù)據(jù)集的增長和用戶請求的頁面數(shù)量的增加,跳過許多記錄的成本也會增加。這將導(dǎo)致查詢性能變慢,因?yàn)槊總€后續(xù)頁面都需要計(jì)數(shù)和跳過更多記錄才能到達(dá)所需頁面的起始點(diǎn)。

如果底層數(shù)據(jù)需要插入、刪除或修改,用戶在頁面之間導(dǎo)航時可能會遇到“幻讀”或跳過記錄。發(fā)生這種情況是因?yàn)槠屏繘]有考慮初始頁面加載后數(shù)據(jù)集大小或順序的變化。

基于偏移量的分頁由于其用戶友好的方法和易于實(shí)現(xiàn)的特點(diǎn),仍然是許多應(yīng)用程序的熱門選擇。然而,了解其局限性并正確規(guī)劃其使用對于確保系統(tǒng)在數(shù)據(jù)擴(kuò)展時保持響應(yīng)并提供良好的用戶體驗(yàn)至關(guān)重要。

基于游標(biāo)的分頁

基于游標(biāo)的分頁是在大型或動態(tài)更新的數(shù)據(jù)集中管理數(shù)據(jù)檢索的有效方法。它使用游標(biāo)(對數(shù)據(jù)集中特定點(diǎn)的引用)從游標(biāo)位置開始順序獲取數(shù)據(jù)。

圖2基于游標(biāo)的分頁示意圖圖2基于游標(biāo)的分頁示意圖

基于游標(biāo)的分頁依賴于游標(biāo)來指導(dǎo)數(shù)據(jù)獲取。游標(biāo)可以包含多個字段,以確保精確的數(shù)據(jù)檢索和維護(hù)排序順序。以下是它的結(jié)構(gòu):

(1)游標(biāo)字段

一個或多個字段唯一標(biāo)識數(shù)據(jù)集中每條記錄的位置。這些字段應(yīng)該是穩(wěn)定的(即設(shè)置之后不更改)和唯一的,以防止重復(fù)和確保數(shù)據(jù)完整性。常用的字段包括時間戳、唯一ID或多個字段的組合,以支持復(fù)雜的排序需求。

(2)查詢方向

這個指定數(shù)據(jù)檢索相對于游標(biāo)位置是向前移動還是向后移動。它在社交媒體訂閱源或日志監(jiān)控系統(tǒng)等可能感興趣的新條目或舊條目的應(yīng)用程序中非常有用。

(3)多個字段的使用

當(dāng)按多個條件排序時(例如,按creation_date和title對博客文章進(jìn)行排序),游標(biāo)可以包含這些字段,以確保分頁在查詢之間保持指定的排序順序。它對于一致性至關(guān)重要,特別是在數(shù)據(jù)集很大或經(jīng)常更新的情況下。

在分頁中使用游標(biāo)對于大型或頻繁更新的數(shù)據(jù)集特別有利,因?yàn)樗苊饬颂^記錄的性能開銷,并確保對數(shù)據(jù)的一致訪問。

雖然基于游標(biāo)的分頁提供了顯著的性能優(yōu)勢并增強(qiáng)了數(shù)據(jù)一致性,但其實(shí)現(xiàn)可能很復(fù)雜。它需要設(shè)置一個穩(wěn)定且唯一的游標(biāo),這可能具有挑戰(zhàn)性,特別是在沒有明顯唯一標(biāo)識符的數(shù)據(jù)集中。此外,它將用戶限制為順序?qū)Ш?,這在需要隨機(jī)訪問數(shù)據(jù)的用例中可能是一個限制。調(diào)整用戶界面以平滑地使用基于游標(biāo)的分頁,特別是在游標(biāo)中使用多個字段時,也會增加開發(fā)的復(fù)雜性。

在應(yīng)用程序中實(shí)現(xiàn)分頁時,開發(fā)人員通常必須在基于偏移量的分頁和基于游標(biāo)的分頁之間進(jìn)行選擇。每種方法都有不同的優(yōu)勢和挑戰(zhàn)。為了做出明智的決策,了解這些方法在各個方面的比較是至關(guān)重要的,例如實(shí)現(xiàn)的容易程度、性能、數(shù)據(jù)一致性和用戶導(dǎo)航。為了幫助確定最適合軟件開發(fā)中不同場景的分頁策略,下表提供了基于偏移量和基于游標(biāo)的分頁的全面比較,突出了關(guān)鍵特性和典型用例。此外,該表還考慮了可擴(kuò)展性。

功能

基于偏移量的分頁

基于游標(biāo)的分頁

描述

使用數(shù)字偏移量對數(shù)據(jù)進(jìn)行分頁,以便在返回下一組記錄之前跳過幾條記錄

使用游標(biāo)(通常是唯一標(biāo)識符)從指定位置按順序獲取數(shù)據(jù)

實(shí)施

使用LIMIT和OFFSET參數(shù)實(shí)現(xiàn)基本的SQL或NoSQL查詢很簡單

實(shí)現(xiàn)起來比較復(fù)雜,需要一個穩(wěn)定且唯一的字段作為游標(biāo)

最佳用例

非常適合中小型數(shù)據(jù)集和應(yīng)用程序,其中總數(shù)據(jù)計(jì)數(shù)和對任何頁面的直接訪問是有益的

非常適合大型或動態(tài)變化的數(shù)據(jù)集,其中性能和數(shù)據(jù)一致性至關(guān)重要

性能

性能隨著數(shù)據(jù)集大小的增加而下降,特別是當(dāng)訪問由于跳過記錄的負(fù)載增加而導(dǎo)致的更高頁碼時

始終如一的高性能,因?yàn)樗苊饬颂^記錄和直接從游標(biāo)位置開始訪問數(shù)據(jù)的開銷

數(shù)據(jù)一致性

如果底層數(shù)據(jù)發(fā)生變化,在分頁過程中容易出現(xiàn)幻讀或數(shù)據(jù)重復(fù)等問題

提供更好的一致性,因?yàn)槊總€頁面加載取決于游標(biāo)的位置,這可以適應(yīng)數(shù)據(jù)的變化

用戶導(dǎo)航

允許用戶直接跳轉(zhuǎn)到任何特定頁面,方便隨機(jī)訪問

通常將用戶限制為順序?qū)Ш?,這可能不適合所有應(yīng)用程序

查詢的復(fù)雜性

簡單的查詢,直接的分頁邏輯

查詢可能很復(fù)雜,特別是當(dāng)多個字段用作游標(biāo)以維護(hù)順序和唯一性時

可擴(kuò)展性

由于較高偏移量增加了查詢負(fù)載,因此在較大數(shù)據(jù)集的情況下可擴(kuò)展性較差

高度可擴(kuò)展,特別有效地處理龐大的數(shù)據(jù)集

在處理大型數(shù)據(jù)集時,了解分頁策略的效率和局限性至關(guān)重要?;谄屏康姆猪摰囊粋€主要挑戰(zhàn)是,隨著偏移量的增加,訪問數(shù)據(jù)變得更加困難,特別是在大型數(shù)據(jù)集中。例如,如果一個數(shù)據(jù)集有100萬條記錄,并被分成100個頁面,那么訪問最后一個頁面(第10000頁)將要求數(shù)據(jù)庫在傳遞最后100條記錄之前處理并丟棄最初的999,900條記錄。隨著數(shù)據(jù)集的增長,它可能導(dǎo)致更長的加載時間,使得基于偏移量的分頁在處理大量數(shù)據(jù)時不太實(shí)用。

與基于偏移量的分頁相比,基于游標(biāo)的分頁是管理廣泛數(shù)據(jù)集的更有效的解決方案。對于基于偏移量的分頁,高偏移量可能會導(dǎo)致性能問題,但是基于游標(biāo)的分頁通過使用游標(biāo)跟蹤最后獲取的記錄來避免這些缺陷。該方法允許后續(xù)查詢從最后一個查詢結(jié)束的地方開始,從而提高數(shù)據(jù)檢索速度。為了說明這一點(diǎn),本文附帶的圖表比較了基于偏移量的分頁和基于游標(biāo)的分頁在處理730萬條記錄的數(shù)據(jù)集時的性能,顯示了使用游標(biāo)進(jìn)行分頁的速度優(yōu)勢顯著。

這種可視化表示強(qiáng)調(diào)了在考慮數(shù)據(jù)集大小和訪問模式等因素的情況下選擇適當(dāng)分頁方法的戰(zhàn)略重要性。這確保了最佳的性能和用戶體驗(yàn),這是大規(guī)模數(shù)據(jù)處理的關(guān)鍵考慮因素。

圖3 MySQL中730萬條記錄的基于偏移量和游標(biāo)的分頁(來源)圖3 MySQL中730萬條記錄的基于偏移量和游標(biāo)的分頁(來源)

選擇基于偏移量的分頁還是基于游標(biāo)的分頁取決于應(yīng)用程序的特定需求?;谄屏康姆猪搶τ谳^小的數(shù)據(jù)集或需要直接頁面訪問時效果很好,而基于游標(biāo)的分頁更適合大型或動態(tài)數(shù)據(jù)集。接下來,將在一個示例應(yīng)用程序中演示這兩種方法,以展示每種方法的實(shí)際含義。

實(shí)用的分頁介紹

本節(jié)將從關(guān)于分頁的理論討論過渡到實(shí)際演示,重點(diǎn)介紹實(shí)現(xiàn)基于偏移量的分頁和基于游標(biāo)的分頁的不同方法。以下將探索這些概念,在與MongoDB配對的Quarkus應(yīng)用程序中使用Jakarta Data。這種設(shè)置能夠通過操作可管理的數(shù)據(jù)集來直接比較兩種分頁技術(shù)。

設(shè)定的目標(biāo)是提供一個清晰的示例,說明如何使用Jakarta Data無縫集成和管理這兩種分頁策略,這是Java應(yīng)用程序中用于數(shù)據(jù)處理的強(qiáng)大工具集。雖然這個演示的重點(diǎn)是一個只涉及10個元素的簡單場景,但重要的是要注意,所討論的原則和方法并不局限于小數(shù)據(jù)集。它們是可擴(kuò)展的,適用于更大的數(shù)據(jù)集,讓用戶有信心在現(xiàn)實(shí)場景中應(yīng)用這些策略。

此外,開發(fā)一個全面的REST API(包括使用查詢參數(shù)和實(shí)現(xiàn)用于分頁的HATEOAS(超媒體作為應(yīng)用程序狀態(tài)引擎))的更廣泛的場景值得進(jìn)行詳細(xì)的討論。設(shè)計(jì)此類API所涉及的復(fù)雜性以及有效合并分頁的策略是在這里不深入研究的重要主題。與其相反,這一演示旨在介紹使用Jakarta Data進(jìn)行分頁的核心概念,重點(diǎn)關(guān)注分頁機(jī)制的技術(shù)實(shí)現(xiàn),而不是REST API設(shè)計(jì)的復(fù)雜性。最后將在文章結(jié)尾處為那些有興趣深入探索REST API構(gòu)建的更廣泛背景和細(xì)節(jié)的人員提供參考。

本文專門討論了Jakarta Data中可用的分頁特性。但是,需要注意的是,Jakarta Data提供了廣泛的功能,旨在簡化Jakarta EE應(yīng)用程序的持久性集成。

Jakarta Data通過其API促進(jìn)分頁,在管理大型數(shù)據(jù)集或需要復(fù)雜查詢功能的應(yīng)用程序中實(shí)現(xiàn)高效的數(shù)據(jù)處理和檢索。兩個主要組件支持分頁功能:

1.創(chuàng)建PageRequest

Jakarta Data提供了PageRequest類來封裝分頁請求。以下是如何指定不同類型的分頁:

(1)基于偏移量的分頁

當(dāng)想要為數(shù)據(jù)檢索指定特定的頁面和大小時,使用這個方法。它很簡單,適合于已知項(xiàng)目總數(shù)的許多標(biāo)準(zhǔn)用例。

Java 
 PageRequest offSet = PageRequest.ofPage(1).size(10);

(2)基于游標(biāo)的分頁

這一方法用于處理連續(xù)數(shù)據(jù)流或數(shù)據(jù)集較大且經(jīng)常更新的情況。它允許從某一點(diǎn)連續(xù)獲取數(shù)據(jù),而無需重新查詢先前獲取的記錄。

Java 
 PageRequest cursor = PageRequest.ofSize(10).afterCursor(PageRequest.Cursor.forKey("key"));

這兩種方法都旨在通過限制每個查詢檢索的記錄數(shù)量來優(yōu)化數(shù)據(jù)獲取過程,從而提高性能和資源利用率。

2.特殊參數(shù)

Jakarta Data還允許使用特殊參數(shù)來增強(qiáng)存儲庫接口的功能。這些參數(shù)可用于進(jìn)一步優(yōu)化分頁策略,包括限制、排序和更復(fù)雜的分頁機(jī)制。

分頁查詢的標(biāo)準(zhǔn)返回結(jié)構(gòu)是頁面(Page)接口,它提供了一種處理分頁數(shù)據(jù)的簡單方法。Jakarta Data提供了一個名為CursoredPage的專門版本,用于基于游標(biāo)的分頁。這種結(jié)構(gòu)對于傳統(tǒng)的基于頁面的導(dǎo)航不足或不實(shí)用的場景是有益的。

實(shí)際的例子

根據(jù)之前關(guān)于Jakarta Data分頁特性的討論,希望通過一個實(shí)際示例展示如何在實(shí)際應(yīng)用程序中實(shí)現(xiàn)這些功能。所展示的示例將Jakarta Data與Eclipse JNoSQL、Quarkus和MongoDB結(jié)合使用,以展示Jakarta Data的靈活性和強(qiáng)大功能,特別是它如何通過Jakarta Persistence與NoSQL和關(guān)系數(shù)據(jù)庫進(jìn)行接口。

對于那些有興趣探索完整代碼并深入了解其功能的人,可以在這里找到樣例項(xiàng)目:Quarkus Pagination with JNoSQL and MongoDB.

示例中的FruitRepository擴(kuò)展了BasicRepository,利用Jakarta Data的功能以一種簡化的方式與數(shù)據(jù)庫進(jìn)行交互。這個存儲庫演示了Jakarta Data獲取和管理數(shù)據(jù)的三種主要方法:

(1)使用@Find注釋:通過允許直接基于注釋的查詢,簡化了查詢過程。

(2)使用Jakarta Query Language:支持類似于SQL的更復(fù)雜的查詢,適合高級數(shù)據(jù)操作。

(3)按查詢約定使用方法:促進(jìn)基于方法命名約定的查詢,使代碼更易于閱讀和維護(hù)。

在FruitRepository中,實(shí)現(xiàn)了兩個特定的方法來處理分頁:

Java 
 @Repository
 public interface FruitRepository extends BasicRepository<Fruit, String> {

 @Find
 CursoredPage<Fruit> cursor(PageRequest pageRequest, Sort<Fruit> order);

 @Find
 @OrderBy("name")
 Page<Fruit> offSet(PageRequest pageRequest);

 long countBy();
}
  • 基于游標(biāo)的分頁:它利用CursoredPage<Fruit>來有效地管理大型數(shù)據(jù)集。這種方法在數(shù)據(jù)不斷更新的應(yīng)用程序中特別有用,因?yàn)樗峁┝艘环N穩(wěn)定和高性能的方式來處理順序數(shù)據(jù)檢索。
  • 基于偏移量的分頁:它使用一個簡單的Page<Fruit>來以更傳統(tǒng)的逐頁方式訪問數(shù)據(jù)。這種方法簡單明了,許多開發(fā)人員都很熟悉,非常適合具有穩(wěn)定和可預(yù)測數(shù)據(jù)集的應(yīng)用程序。

這些示例說明了Jakarta Data在處理不同分頁策略方面的多功能性,為開發(fā)人員提供了基于其特定應(yīng)用程序需求的強(qiáng)大選項(xiàng)。這種方法不僅強(qiáng)調(diào)了Jakarta Data的實(shí)際應(yīng)用,而且強(qiáng)調(diào)了它在不同類型的數(shù)據(jù)庫和數(shù)據(jù)管理策略之間的適應(yīng)性。

在使用Jakarta Data的實(shí)際實(shí)現(xiàn)的基礎(chǔ)上,Quarkus應(yīng)用程序中的FruitResource類為基于偏移量的分頁和基于游標(biāo)的分頁方法提供REST端點(diǎn)。這個設(shè)置有效地展示了這兩種策略之間的細(xì)微差別,以及如何將它們應(yīng)用于RESTful數(shù)據(jù)服務(wù)。

在FruitResource類中,為不同的分頁策略定義了兩個不同的REST端點(diǎn)。

這個端點(diǎn)演示偏移分頁,其中客戶端可以將頁面和大小指定為查詢參數(shù)。它很簡單,允許用戶直接跳轉(zhuǎn)到特定的頁面。這種方法對于總大小已知且需要在頁面之間進(jìn)行可預(yù)測導(dǎo)航的數(shù)據(jù)集特別有效。

Java 
 @Path("/offset")
 @GET
 @Produces(MediaType.APPLICATION_JSON)
 public Iterable<Fruit> hello(@QueryParam("page") @DefaultValue("1") long page,
 @QueryParam("size") @DefaultValue("2") int size) {
 var pageRequest = PageRequest.ofPage(page).size(size);
 return fruitRepository.offSet(pageRequest).content();
 }

這個端點(diǎn)滿足了基于游標(biāo)的分頁,這對于處理大型或頻繁更新的數(shù)據(jù)集至關(guān)重要。游標(biāo)充當(dāng)指針,便于連續(xù)獲取記錄,而不會跳過之前的數(shù)據(jù)。這種方法確保了效率和一致性,特別是在處理實(shí)時數(shù)據(jù)流時??蛻舳丝梢愿鶕?jù)需要的導(dǎo)航方向提供前后游標(biāo)。

兩個端點(diǎn)都使用定義為ASC或DESC的Sort<Fruit>來確定獲取記錄的順序。通過確保數(shù)據(jù)按邏輯順序呈現(xiàn),這種排序順序增強(qiáng)了分頁的可用性。

Java 
 @Path("/cursor")
 @GET
 @Produces(MediaType.APPLICATION_JSON)
 public Iterable<Fruit> cursor (@QueryParam("after") @DefaultValue("") String after,
   @QueryParam("before") @DefaultValue("") String before,
 @QueryParam("size") @DefaultValue("2") int size) {
 if (!after.isBlank()) {
 var pageRequest = PageRequest.ofSize(size).afterCursor(PageRequest.Cursor.forKey(after));
 return fruitRepository.cursor(pageRequest, ASC).content();
 } else if (!before.isBlank()) {
 var pageRequest = PageRequest.ofSize(size).beforeCursor(PageRequest.Cursor.forKey(before));
 return fruitRepository.cursor(pageRequest, DESC).stream().toList();
 }
 var pageRequest = PageRequest.ofSize(size).size(size);
 return fruitRepository.cursor(pageRequest, ASC).content();
}

FruitResource類設(shè)計(jì)是一個很好的例子,說明了如何定制不同的分頁方法以適應(yīng)特定的應(yīng)用程序需求。通過在單個應(yīng)用程序中比較這兩種方法,開發(fā)人員可以獲得基于其數(shù)據(jù)特征和用戶需求選擇和實(shí)現(xiàn)最合適分頁策略的實(shí)際見解。這種方法不僅展示了Jakarta Data在使用Quarkus和MongoDB的微服務(wù)架構(gòu)中的能力,還增強(qiáng)了對RESTful服務(wù)設(shè)計(jì)和數(shù)據(jù)管理的理解。

結(jié)論

當(dāng)在Quarkus和MongoDB環(huán)境中使用Jakarta Data應(yīng)用基于偏移量的分頁和基于游標(biāo)的分頁的復(fù)雜性時,已經(jīng)實(shí)現(xiàn)了Jakarta Data在管理數(shù)據(jù)檢索過程中的適應(yīng)性和有效性。這種探索提供了實(shí)際的用例,并強(qiáng)調(diào)了每種分頁方法的戰(zhàn)略優(yōu)勢,使開發(fā)人員能夠根據(jù)他們的應(yīng)用程序需求做出明智的決策。

本文為進(jìn)一步探索Jakarta Data的功能及其與Quarkus等現(xiàn)代應(yīng)用程序框架的集成提供了基礎(chǔ)。通過理解這些分頁技術(shù),開發(fā)人員將能夠更好地構(gòu)建可擴(kuò)展且高效的應(yīng)用程序,這些應(yīng)用程序可以輕松地處理大型數(shù)據(jù)集。而在將來,選擇和實(shí)現(xiàn)最合適的分頁策略對于優(yōu)化應(yīng)用程序性能和增強(qiáng)用戶體驗(yàn)至關(guān)重要。

參考文獻(xiàn)

原文標(biāo)題:Efficient Data Management With Offset and Cursor-Based Pagination in Modern Applications,作者:Otavio Santana




責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2023-08-07 09:18:32

Golang偏移量接口

2024-03-21 07:08:53

AIntervalCronPython

2024-10-12 09:58:21

2016-02-25 14:40:01

云數(shù)據(jù)中心

2023-10-30 10:34:20

Golang數(shù)據(jù)庫

2021-02-02 10:24:57

CIO數(shù)據(jù)管理IT

2024-12-12 16:21:16

2024-05-10 13:01:49

2022-04-02 10:42:04

數(shù)據(jù)管理數(shù)據(jù)管理現(xiàn)代化CIO

2022-08-15 10:45:34

RocketMQ消息隊(duì)列

2019-11-11 14:28:11

云計(jì)算數(shù)據(jù)IT

2024-02-26 09:15:05

2021-12-03 14:52:46

Commvault

2020-04-18 11:15:38

云計(jì)算數(shù)據(jù)安全

2024-07-09 11:48:47

2012-09-18 09:39:57

Linq項(xiàng)目高效

2021-08-18 09:40:55

數(shù)據(jù)管理云原生Kubernetes

2023-09-20 14:54:17

MySQL

2024-04-23 14:47:46

2020-04-08 16:23:56

戴爾
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號