Ke hobane'ng ha u hloka tšehetso ea lisebelisoa bakeng sa pagination ka linotlolo?

Lumelang bohle! Ke moqapi oa morao-rao ea ngolang li-microservices ho Java + Spring. Ke sebetsa ho e 'ngoe ea lihlopha tsa ka hare tsa nts'etsopele ea lihlahisoa tsa Tinkoff.

Ke hobane'ng ha u hloka tšehetso ea lisebelisoa bakeng sa pagination ka linotlolo?

Sehlopheng sa rona, hangata ho hlaha potso ea ho ntlafatsa lipotso ho DBMS. U lula u batla ho potlaka hanyane, empa u ke ke ua khona ho feta ka li-index tse entsoeng ka mokhoa o nahanelang - u tlameha ho batla li-workaround. Nakong e 'ngoe ea maeto ana a ho pota-pota marang-rang ho batla lintlafatso tse utloahalang ha ke sebetsa le li-database, ke fumane Marcus Wynand's blog e thusang ka ho sa feleng, sengoli sa SQL Performance Explained. Ona ke mofuta o sa tloaelehang oa blog oo ho oona o ka balang lingoliloeng tsohle ka tatellano.

Ke kopa ho fetolela sengoloa se sekhutšoane sa Marcus molemong oa hau. E ka bitsoa ho isa bohōleng bo itseng e leng manifesto e batlang ho lebisa tlhokomelo ho ea khale, empa e ntse e le bothata bo amanang le ts'ebetso ea ts'ebetso ea offset ho latela maemo a SQL.

Libakeng tse ling ke tla tlatsetsa mongoli ka litlhaloso le litlhaloso. Ke tla bitsa libaka tse joalo kaofela "approx." bakeng sa ho hlaka haholoanyane

Kenyelletso e nyane

Ke nahana hore batho ba bangata ba tseba hore na ho na le mathata le ho lieha ho sebetsa le leqephe le khethang ka offset. Na u ne u tseba hore e ka nkeloa sebaka habonolo ke moralo o sebetsang haholoanyane?

Kahoo, senotlolo sa offset se bolella database hore se tlole lirekoto tsa pele tsa kopo. Leha ho le joalo, database e ntse e hloka ho bala lirekoto tsena tsa pele ho tsoa ho disk, ka tatellano e fanoeng (hlokomela: sebelisa ho hlopha haeba ho boletsoe), 'me ke ka nako eo feela ho tla khonahala ho khutlisa lirekoto ho tloha n + 1 ho ea pele. Ntho e khahlisang haholo ke hore bothata ha bo ts'ebetsong e itseng ho DBMS, empa ka tlhaloso ea mantlha ho latela maemo:

... mela e hlophiswa pele ho ya ka ebe o fokotsoa ka ho theola palo ea mela e boletsoeng ho ho tloha qalong…
-SQL:2016, Karolo ea 2, 4.15.3 Litafole tse nkiloeng (hlokomela: maemo a sebelisoang ka ho fetisisa hajoale)

Ntlha ea bohlokoa mona ke hore offset e nka parameter e le 'ngoe - palo ea lirekoto tseo u lokelang ho li tlōla,' me ke eona. Ho latela tlhaloso ena, DBMS e ka fumana feela litlaleho tsohle ebe e lahla tse sa hlokahaleng. Ho hlakile hore tlhaloso ena ea offset e re qobella ho etsa mosebetsi o eketsehileng. Ebile ha ho na taba hore na ke SQL kapa NoSQL.

Bohloko bo seng kae feela

Mathata a offset ha a felle moo, 'me ke ka lebaka lena. Haeba, pakeng tsa ho bala maqephe a mabeli a data ho tswa ho disk, ts'ebetso e 'ngoe e kenya tlaleho e ncha, ho tla etsahala'ng tabeng ee?

Ke hobane'ng ha u hloka tšehetso ea lisebelisoa bakeng sa pagination ka linotlolo?

Ha offset e sebelisoa ho tlola lirekoto tse tsoang maqepheng a fetileng, maemong a ho kenyelletsa rekoto e ncha lipakeng tsa maqephe a fapaneng, o kanna oa fumana tse kopitsoang (hlokomela: sena se ka etsahala ha re bala leqephe ka leqephe re sebelisa taelo ka ho aha, ebe bohareng ba tlhahiso ea rona e ka fumana ho kena ho hocha).

Setšoantšo se bontša boemo bona ka ho hlaka. Motheo o bala lirekoto tsa pele tsa 10, ka mor'a moo tlaleho e ncha e kenngoa, e fokotsang litlaleho tsohle tse baloang ka 1. Joale setsi se nka leqephe le lecha ho tloha litlalehong tse latelang tsa 10 'me ha se qale ho tloha 11, joalokaha se lokela, empa ho tloha ho Ea bo10, ho qopitsa tlaleho ena. Ho na le lintho tse ling tse sa tloaelehang tse amanang le tšebeliso ea polelo ena, empa ena ke eona e atileng haholo.

Joalokaha re se re fumane, ana ha se mathata a DBMS e itseng kapa ts'ebetsong ea bona. Bothata ke ho hlalosa pagination ho latela maemo a SQL. Re bolella DBMS hore na u nke leqephe lefe kapa hore na u tlole lirekoto tse kae. Database ha e khone ho ntlafatsa kopo e joalo, kaha ho na le tlhahisoleseling e nyane haholo bakeng sa sena.

Ho bohlokoa hape ho hlakisa hore sena ha se bothata ka lentsoe le ikhethileng, empa ke bothata ba semantics ea potso. Ho na le li-syntaxes tse ling tse 'maloa tse tšoanang ka sebopeho sa tsona sa mathata:

  • Lentsoe la sehlooho la offset le boletsoe pejana.
  • Moeli oa mantsoe a mabeli a sehlooho [offset] (le hoja moeli ka boeona o se o mobe hakaalo).
  • Ho hlopha ka meeli e tlase, ho ipapisitsoe le linomoro tsa mela (mohlala, row_number(), rownum, joalo-joalo).

Lipolelo tsena kaofela li u bolella feela hore na u tlōle mela e kae, ha ho na lintlha tse ling kapa moelelo oa taba.

Hamorao sehloohong sena, lentsoe la sehlooho la offset le sebelisoa e le kakaretso ea likhetho tsena kaofela.

Bophelo ntle le OFFSET

Joale a re nahaneng hore na lefatše la rōna le ka be le le joang ntle le mathata ana ’ohle. Hoa etsahala hore bophelo bo se nang offset ha bo thata hakaalo: ka khetho u ka khetha feela mela eo re e-s'o e bone (hlokomela: ke hore, e neng e se leqepheng le fetileng), u sebelisa boemo moo.

Tabeng ena, re qala ho tloha tabeng ea hore likhetho li etsoa ka sete e laetsoeng (taelo e ntle ea khale ka). Kaha re na le sete e laetsoeng, re ka sebelisa filthara e bonolo ho fumana feela data e ka morao ho rekoto ea ho qetela ea leqephe le fetileng:

    SELECT ...
    FROM ...
    WHERE ...
    AND id < ?last_seen_id
    ORDER BY id DESC
    FETCH FIRST 10 ROWS ONLY

Ke eona molao-motheo oa mokhoa ona. Ehlile, lintho li ba monate le ho feta ha li hlopha ka litšiea tse ngata, empa mohopolo o ntse o tšoana. Ke habohlokoa ho hlokomela hore moralo ona o sebetsa ho ba bangata NoSQL-qeto.

Mokhoa ona o bitsoa search method kapa keyset pagination. E rarolla bothata ba sephetho se phaphametseng (hlokomela: boemo bo nang le mongolo pakeng tsa leqephe le baloang bo hlalositsoeng pejana) mme, ehlile, seo bohle re se ratang, se sebetsa ka potlako le ka mokhoa o tsitsitseng ho feta oa khale. Botsitso bo teng tabeng ea hore nako ea ho sebetsa ha kopo ha e eketsehe ho ea ka palo ea tafole e kōptjoang (hlokomela: haeba u batla ho ithuta haholoanyane ka mosebetsi oa mekhoa e fapaneng ea ho etsa bohetene, u ka khona. sheba ka har'a nehelano ea mongoli. U ka fumana li-benchmarks tsa papiso ea mekhoa e fapaneng moo).

E 'ngoe ea li-slide e bua ka seohore bohetene ka linotlolo, ha e le hantle, hase matla 'ohle - e na le mefokolo ea eona. Ntho ea bohlokoa ka ho fetisisa ke hore ha a na bokhoni ba ho bala maqephe a sa tloaelehang (hlokomela: ka mokhoa o sa tsitsang). Leha ho le joalo, nakong ea ho phenya ho sa feleng (hlokomela: ka pele), sena ha se bothata bo joalo. Ho hlakisa nomoro ea leqephe bakeng sa ho tobetsa ke qeto e mpe ho moralo oa UI leha ho le joalo (hlokomela: maikutlo a mongoli oa sengoloa).

Ho thoe'ng ka lisebelisoa?

Pagination ka linotlolo hangata ha e tšoanelehe ka lebaka la khaello ea ts'ehetso ea lisebelisoa bakeng sa mokhoa ona. Lisebelisoa tse ngata tsa nts'etsopele, ho kenyelletsa le meralo e fapaneng, ha li u lumelle ho khetha hantle hore na pagination e tla etsoa joang.

Boemo bo mpefatsoa ke taba ea hore mokhoa o hlalositsoeng o hloka tšehetso ea ho qetela ho ea ho qetela ho theknoloji e sebelisoang - ho tloha DBMS ho ea ho phethahatso ea kopo ea AJAX ho sebatli ka ho phalla ho sa feleng. Sebakeng sa ho hlakisa nomoro ea leqephe feela, joale u tlameha ho hlakisa lethathamo la linotlolo tsa maqephe ohle ka nako e le 'ngoe.

Leha ho le joalo, palo ea meralo e tšehetsang pagination ho linotlolo e ntse e hola butle-butle. Mona ke seo re nang le sona hajoale:

(Tlhokomeliso: lihokelo tse ling li ile tsa tlosoa ka lebaka la hore nakong ea phetolelo lilaebrari tse ling li ne li so ka li nchafatsoa ho tloha 2017-2018. Haeba u thahasella, u ka sheba mohloli oa pele.)

Ke nakong ena moo thuso ea hau e hlokahalang. Haeba u nts'etsapele kapa u ts'ehetsa moralo o sebelisang bohetene, joale kea botsa, kea u khothaletsa, ke u kopa hore u fane ka ts'ehetso ea matsoalloa bakeng sa pagination ho linotlolo. Haeba u na le lipotso kapa u hloka thuso, ke tla thabela ho u thusa (foramo, Twitter, foromo ea ho ikopanya) (hlokomela: ho latela phihlelo ea ka le Marcus, nka bolela hore o chesehela haholo ho jala sehlooho sena).

Haeba u sebelisa litharollo tse lokiselitsoeng tseo u nahanang hore li tšoaneloa ke ho ba le tšehetso bakeng sa pagination ka linotlolo, etsa kopo kapa u fane ka tharollo e lokiselitsoeng, ha ho khoneha. U ka boela ua hokahanya le sehlooho sena.

fihlela qeto e

Lebaka leo ka lona mokhoa o bonolo le o sebetsang joalo ka ho etsa bohetene ka linotlolo ha o atile ha se hore ho thata ho kenya ts'ebetsong ka botekgeniki kapa ho hloka boiteko bo boholo. Lebaka le ka sehloohong ke hore ba bangata ba tloaetse ho bona le ho sebetsa ka offset - mokhoa ona o laoloa ke tekanyetso ka boeona.

Ka lebaka leo, ke batho ba fokolang ba nahanang ka ho fetola mokhoa oa ho etsa bohetene, 'me ka lebaka la sena, tšehetso ea lisebelisoa ho tsoa ho meralo le lilaebraring e ntse e tsoela pele hampe. Ka hona, haeba mohopolo le sepheo sa bohetene ba mahala bo le haufi le uena, thusa ho bo jala!

Source: https://use-the-index-luke.com/no-offset
Mongoli: Markus Winand

Source: www.habr.com

Eketsa ka tlhaloso