Maxaad ugu baahan tahay taageerada qalabka si aad u qorto furayaasha?

Salaamu calaykum! Waxaan ahay horumariye dhabarka ah oo ku qoraya adeeg-yaraha Java + Guga. Waxaan ka shaqeeyaa mid ka mid ah kooxaha horumarinta alaabta gudaha ee Tinkoff.

Maxaad ugu baahan tahay taageerada qalabka si aad u qorto furayaasha?

Kooxdayada, su'aasha hagaajinta weydiimaha DBMS inta badan way soo baxdaa. Had iyo jeer waxaad rabtaa inaad xoogaa dhaqso u ahaato, laakiin had iyo jeer kuma heli kartid tusmooyin si fikir leh loo dhisay β€” waa inaad raadisaa xalal. Inta lagu guda jiro mid ka mid ah kuwan wareegaya hareeraha shabakada raadinta hagaajinta macquulka ah marka la shaqeynayo xogta macluumaadka, waan helay Marcus Wynand boggiisa waxtarka leh ee aan dhammaadka lahayn, qoraaga SQL Performance Sharaxay. Kani waa blog-kaas naadir ah oo aad ku akhrin karto dhammaan maqaallada isku xigta.

Waxaan jeclaan lahaa inaan kuu turjumo maqaal gaaban oo uu qoray Marcus. Waxa ilaa xad loogu yeedhi karaa muujinta doonaysa in ay dareenka hore u soo jeediso, balse weli mushkiladda la xidhiidha hawl-qabadka hawl-gabka si waafaqsan heerka SQL.

Meelaha qaar waxaan qoraaga ku kaabi doonaa sharraxaad iyo faallooyin. Waxaan tixraaci doonaa dhammaan meelahaas sida "qiyaastii." si loo caddeeyo

Hordhac yar

Waxaan u maleynayaa in dad badani og yihiin sida dhibka iyo gaabis u leh ku shaqeynta bogga lagu doorto iyada oo loo marayo offset. Ma ogtahay in si fudud loogu badali karo naqshad ka hufan?

Marka, ereyga fur-fudud wuxuu u sheegaa kaydka xogta inay ka boodaan diiwaanka n ugu horreeya ee codsiga. Si kastaba ha ahaatee, keydka xogta ayaa wali u baahan in uu akhriyo diiwaanadan ugu horreeya ee n ka soo baxa diskka, sida ay u kala horreeyaan (xusuus: codso kala-soocidda haddii la cayimay), ka dibna kaliya ayaa suurtagal noqon doonta in dib loo soo celiyo diiwaannada n+1 wixii ka dambeeya. Waxa ugu xiisaha badan ayaa ah in dhibaatadu aysan ku jirin hirgelinta gaarka ah ee DBMS, laakiin qeexida asalka ah sida waafaqsan heerka:

... safafka marka hore waxaa loo kala soocaa si waafaqsan ka dibna la xaddido iyadoo la tuurayo tirada safafka lagu cayimay bilowgii…
-SQL:2016, Qaybta 2, 4.15.3 Shaxda la soo saaray (xusuus: hadda heerka ugu isticmaalka badan)

Qodobka muhiimka ah ee halkan ku yaal ayaa ah in dhimistu ay qaadato halbeeg kaliya - tirada diiwaannada lagu boodo, waana taas. Iyadoo la raacayo qeexitaankan, DBMS waxay soo ceshan kartaa kaliya dhammaan diiwaannada ka dibna way tuuri kartaa kuwa aan loo baahnayn. Sida cad, qeexitaankan ka-kabashada ayaa nagu qasbaysa inaan qabanno shaqo dheeraad ah. Xitaa dhib ma laha haddii ay tahay SQL ama NoSQL.

In yar oo xanuun badan

Dhibaatooyinka ka-kabashada halkaas kuma eka, waana tan sababta. Haddii, inta u dhaxaysa akhrinta laba bog oo xogta ah ee diskka, hawlgal kale ayaa gelinaya rikoor cusub, maxaa dhici doona kiiskan?

Maxaad ugu baahan tahay taageerada qalabka si aad u qorto furayaasha?

Marka offset loo isticmaalo in lagu dhaafo diiwaanada bogag hore, xaalada lagu daro rikoodh cusub oo u dhexeeya akhrinta bogag kala duwan, waxaad u badan tahay inaad hesho nuqulo (xusuusnow: tani waxay suurtogal tahay marka aan akhrino bog-bog iyadoo la adeegsanayo amarka dhismaha, ka dibna) dhexda wax-soo-saarkayaga waxaa laga yaabaa inuu galo cusub).

Sawirku wuxuu si cad u muujinayaa xaaladdan. Saldhiggu wuxuu akhriyaa 10-ka diiwaan ee ugu horreeya, ka dib waxaa la geliyaa rikoor cusub, kaasoo ka dhigaya dhammaan diiwaannada la akhriyay 1. Kadibna saldhigga wuxuu ka qaadanayaa bog cusub 10-ka diiwaan ee soo socda oo aan ka bilaabanin 11-aad, sida la rabo, laakiin wuxuu ka bilaabmaa 10-ka diiwaan. XNUMXaad, nuqul ka samaynta rikoorkan. Waxa jira cillado kale oo la xidhiidha isticmaalka odhaahdan, laakiin tani waa tan ugu badan.

Sida aan horay u ogaanay, kuwani maaha dhibaatooyin DBMS gaar ah ama hirgelintooda. Dhibaatadu waxay tahay qeexida bogga sida waafaqsan heerka SQL. Waxaan u sheegnaa DBMS boggee la keenayo ama inta diiwaan ee la boodo. Xog-ururinta si fudud ma awoodo in ay wanaajiso codsigan oo kale, maadaama ay jirto macluumaad aad u yar oo tan ah.

Waxa kale oo ay mudan tahay in la caddeeyo in tani aanay dhib ku ahayn kelmad gaar ah, balse ay ku jirto macnaha guud ee weydiinta. Waxa jira dhawr eray oo kale oo la mid ah dabeecadahooda dhibaatada leh:

  • Ereyga fur-fududku waa sidii hore loo sheegay.
  • Dhismaha laba erey oo muhiim ah ayaa xaddidaya [offset] (in kasta oo xaddidaadda lafteedu aysan ahayn mid aad u xun).
  • Ku shaandhaynta xudduudaha hoose, oo ku salaysan lambaraynta safka (tusaale, saf_number(), laynka, iwm.).

Dhammaan tibaaxahani waxay si fudud kuu sheegaan inta xariiq ee aad ka boodaan, ma jiraan macluumaad dheeraad ah ama macnaha guud.

Maqaalkan dambe, ereyga fur-fudud waxa loo isticmaalaa soo koobida dhammaan xulashooyinkan.

Nolosha bilaa OFFSET

Hadda aan qiyaasno sida adduunkeenu noqon lahaa dhibaatooyinkan oo dhan la'aantood. Waxaa soo baxday in nolosha oo aan la dhimin aysan ahayn mid aad u adag: xulashada, waxaad dooran kartaa oo kaliya kuwa safafka ah oo aan weli arag (xusuus: taas oo ah, kuwa aan ku jirin boggii hore), adoo isticmaalaya xaalad meesha.

Xaaladdan oo kale, waxaan ka bilaabeynaa xaqiiqda ah in xulashada lagu fuliyo go'an la amray (amarka hore ee wanaagsan). Maadaama aanu haysano hab la dalbaday, waxaan isticmaali karnaa shaandheyn fudud si aan u helno kaliya xogta ka dambeysa rikoorkii u dambeeyay ee boggii hore:

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

Taasi waa dhammaan mabda'a habkan. Dabcan, arrimuhu waxay helayaan madadaalo badan marka la kala saaro tiirar badan, laakiin fikradda weli waa isku mid. Waxaa muhiim ah in la ogaado in naqshadani ay khuseyso qaar badan NoSQL-go'aamo.

Habkan waxaa loo yaqaan habka raadinta ama furaha furaha. Waxay xallisaa dhibaatada natiijada sabayn (xusuusnow: xaaladda qoraal inta u dhaxaysa bogga akhriyey hore lagu sifeeyay) iyo, dabcan, waxa aan dhammaanteen jecel yihiin, waxa ay u shaqeysaa si degdeg ah oo ka xasilloon marka loo eego deminta caadiga ah. Xasiloonidu waxay ku jirtaa xaqiiqda ah in wakhtiga ka-hortagga codsigu aanu kordhinin saamiga tirada miiska la codsaday (xusuusnow: haddii aad rabto in aad wax badan ka barato shaqada hababka kala duwan ee pagination, waxaad awoodi kartaa bal ka fiirso bandhigga qoraaga. Waxa kale oo aad ka heli kartaa halbeegyada isbarbardhigga ee hababka kala duwan halkaas).

Mid ka mid ah sawirada oo ka hadlaya arrintaasin pagination by furayaasha, dabcan, ma aha wax kasta oo awood leh - waxay leedahay xaddidaaddeeda. Tan ugu muhiimsan waa inaysan lahayn awood ay ku akhrido bogag random ah (xusuus: si aan joogto ahayn). Si kastaba ha noqotee, xilliga duubista aan dhamaadka lahayn (xusuusnow: dhamaadka hore), tani maahan dhibaato. Cadaynta lambarka bogga ee gujinta waa go'aan xun xagga naqshadaynta UI si kastaba (xusuusnow: ra'yiga qoraaga maqaalka).

Ka warran qalabka?

Bogagga furayaasha badanaa kuma habboona sababtoo ah la'aanta taageerada qalabka ee habkan. Inta badan qalabka horumarinta, oo ay ku jiraan qaabab kala duwan, kuma oggola inaad doorato sida saxda ah ee bogga loo samayn doono.

Xaaladdu waxay sii xumaynaysaa xaqiiqda ah in habka lagu sharraxay uu u baahan yahay taageerada dhammaadka-ilaa-dhamaadka ee tignoolajiyada loo isticmaalo - laga bilaabo DBMS ilaa fulinta codsiga AJAX ee browserka oo leh wareegyo aan dhammaad lahayn. Halkii aad ka sheegi lahayd lambarka bogga, hadda waa inaad caddaysaa furayaasha boggaga oo dhan hal mar.

Si kastaba ha ahaatee, tirada qaab-dhismeedka ee taageera qorista furayaasha ayaa si tartiib tartiib ah u koraya. Waa kuwan waxa aan hadda haysanno:

(Fiiro gaar ah: xiriiriyeyaasha qaarkood ayaa meesha laga saaray sababtoo ah waqtiga tarjumaada maktabadaha qaar aan la cusboonaysiin tan iyo 2017-2018. Haddii aad xiisaynayso, waxaad eegi kartaa isha asalka ah.)

Waa wakhtigan in gargaarkaaga loo baahan yahay. Haddii aad horumariso ama taageerto qaab-dhismeedka samaynta wax kasta oo isticmaalka pagination, markaas waxaan ku weydiin, waxaan ku boorinayaa, waxaan kaa baryayaa inaad bixiso taageero hooyo pagination on furayaasha. Haddii aad qabtid su'aalo ama aad u baahan tahay caawimaad, waan ku farxi doonaa inaan ku caawiyo (kulanka, Twitter, foomka xiriirka(xusuusin: waayo-aragnimadayda Marcus, waxaan dhihi karaa inuu runtii aad ugu faraxsan yahay faafinta mawduucan).

Haddii aad isticmaasho xalal diyaarsan oo aad u malaynayso inay mudan yihiin in lagu taageero furayaasha furayaasha, samee codsi ama xitaa bixi xal diyaar ah, haddii ay suurtagal tahay. Waxaad sidoo kale ku xidhi kartaa maqaalkan.

gunaanad

Sababta habkan fudud oo faa'iido leh sida pagination by furayaasha maaha mid baahsan ma aha inay adagtahay in la hirgeliyo farsamo ahaan ama u baahan dadaal weyn. Sababta ugu weyn ayaa ah in qaar badan oo ka mid ah ay caadeysteen in ay arkaan oo ay ka shaqeeyaan offset - habkan waxaa faraya halbeegga laftiisa.

Natiijo ahaan, dad yar ayaa ka fekeraya beddelka habka loo maro boggaga, taas awgeed, taageerada qalabka ee qaab-dhismeedka iyo maktabadaha ayaa si liidata u koraya. Sidaa darteed, haddii fikradda iyo yoolka bog-ururinta-free-offset-ku kuugu dhow yahay, ka caawi faafinta!

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

Source: www.habr.com

Add a comment