Carson a tha feum agad air taic ionnsramaid airson duilleagadh air iuchraichean?

Hi uile! Tha mi nam leasaiche backend a’ sgrìobhadh microservices ann an Java + Spring. Bidh mi ag obair ann an aon de na sgiobaidhean leasachadh toraidh a-staigh aig Tinkoff.

Carson a tha feum agad air taic ionnsramaid airson duilleagadh air iuchraichean?

Anns an sgioba againn, bidh a’ cheist mu bhith ag àrdachadh cheistean ann an DBMS gu tric ag èirigh. Bidh thu an-còmhnaidh ag iarraidh a bhith beagan nas luaithe, ach chan urrainn dhut an-còmhnaidh faighinn seachad le clàran-amais a tha air an togail gu smaoineachail - feumaidh tu coimhead airson cuid de dhòighean-obrach. Rè aon de na cuairtean sin timcheall air an lìon a’ lorg optimizations reusanta nuair a bha mi ag obair le stòran-dàta, lorg mi Blog air leth cuideachail Marcus Wynand, ùghdar SQL Performance air a mhìneachadh. Is e seo an seòrsa blog tearc sin anns an urrainn dhut na h-artaigilean gu lèir a leughadh ann an sreath.

Bu mhath leam artaigil goirid le Marcus eadar-theangachadh dhut. Faodar a ghairm gu ìre mar mhanifesto a tha ag amas air aire a tharraing chun an t-seann dhuilgheadas, ach a tha fhathast buntainneach, a thaobh coileanadh na h-obrach ath-chunntais a rèir inbhe SQL.

Ann an cuid de dh’àiteachan cuiridh mi mìneachaidhean agus beachdan ris an ùghdar. Bheir mi iomradh air a h-uile àite mar sin mar “approx.” airson barrachd soilleireachd

Ro-ràdh beag

Tha mi a 'smaoineachadh gu bheil fios aig mòran dhaoine cho duilich agus cho slaodach' sa tha obair le duilleagan taghte tro chothromachadh. An robh fios agad gum faodar dealbhadh nas èifeachdaiche a chuir na àite gu furasta?

Mar sin, tha am prìomh fhacal cuir an aghaidh ag iarraidh air an stòr-dàta leum air a’ chiad n clàran san iarrtas. Ach, feumaidh an stòr-dàta fhathast na ciad chlàran n seo a leughadh bhon diosc, san òrdugh a chaidh a thoirt seachad (nota: cuir a-steach seòrsachadh ma tha e air a shònrachadh), agus dìreach an uairsin bidh e comasach clàran a thilleadh bho n+1 air adhart. Is e an rud as inntinniche nach eil an duilgheadas anns a’ bhuileachadh sònraichte anns an DBMS, ach anns a’ mhìneachadh thùsail a rèir na h-ìre:

...tha na sreathan air an òrdachadh an toiseach a rèir an agus an uairsin air an cuingealachadh le bhith a’ leigeil sìos an àireamh de shreathan a tha air an sònrachadh anns a’ bhon toiseach…
-SQL: 2016, Pàirt 2, 4.15.3 Clàran toraidh (nota: an ìre as motha a thathas a’ cleachdadh an-dràsta)

Is e am prìomh phuing an seo gu bheil co-chothromachadh a’ toirt aon pharameter - an àireamh de chlàran ri leum, agus sin agad e. Às deidh a’ mhìneachaidh seo, chan urrainn don DBMS ach na clàran gu lèir fhaighinn air ais agus an fheadhainn nach eil riatanach a thilgeil air falbh. Gu follaiseach, tha am mìneachadh seo de chothromachadh a’ toirt oirnn obair a bharrachd a dhèanamh. Agus chan eil e gu diofar an e SQL no NoSQL a th’ ann.

Dìreach beagan a bharrachd pian

Chan eil na duilgheadasan le co-chothromachadh a’ tighinn gu crìch an sin, agus seo carson. Ma tha, eadar leughadh dà dhuilleag de dhàta bhon diosc, gu bheil gnìomhachd eile a’ cur a-steach clàr ùr, dè thachras sa chùis seo?

Carson a tha feum agad air taic ionnsramaid airson duilleagadh air iuchraichean?

Nuair a thèid co-chothromachadh a chleachdadh gus clàran bho dhuilleagan roimhe a sheachnadh, ann an suidheachadh clàr ùr a chur ris eadar leughaidhean de dhiofar dhuilleagan, is coltaiche gum faigh thu dùblaidhean (nota: tha seo comasach nuair a leughas sinn duilleag air duilleag a’ cleachdadh an òrdugh le togail, an uairsin ann am meadhan an toraidh againn is dòcha gum faigh e inntrigeadh ùr).

Tha an dealbh a’ sealltainn an t-suidheachaidh seo gu soilleir. Bidh am bonn a 'leughadh a' chiad 10 clàran, agus às dèidh sin tha clàr ùr air a chuir a-steach, a tha a 'toirt a-steach a h-uile clàr leughaidh le 1. An uairsin bidh am bonn a 'toirt duilleag ùr bho na clàran 10 a tha romhainn agus a' tòiseachadh chan ann bhon 11mh, mar a bu chòir, ach bhon chlàr. 10mh, a’ dùblachadh a’ chlàir seo. Tha neo-riaghailteachdan eile co-cheangailte ri cleachdadh an abairt seo, ach is e seo am fear as cumanta.

Mar a tha sinn air faighinn a-mach mar-thà, chan e duilgheadasan DBMS sònraichte no an cur an gnìomh a tha seo. Tha an duilgheadas ann a bhith a’ mìneachadh duilleag a rèir inbhe SQL. Innsidh sinn don DBMS dè an duilleag a gheibh thu no cia mheud clàr a bu chòir a sheachnadh. Gu sìmplidh chan urrainn don stòr-dàta iarrtas den t-seòrsa seo a bharrachadh, leis nach eil cus fiosrachaidh ann airson seo.

Is fhiach a shoilleireachadh cuideachd nach e duilgheadas a tha seo le prìomh fhacal sònraichte, ach le semantics na ceiste. Tha grunn cho-aontaran eile ann a tha co-ionann nan duilgheadas:

  • Tha am prìomh fhacal cuir dheth mar a chaidh ainmeachadh roimhe.
  • Togail de chrìochan dà phrìomh fhacal [coimeas] (ged nach eil crìoch fhèin cho dona).
  • A’ sìoladh le crìochan nas ìsle, stèidhichte air àireamh sreath (mar eisimpleir, row_number (), rownum, msaa).

Tha na h-abairtean sin uile dìreach ag innse dhut cia mheud loidhne a bu chòir a sheachnadh, gun fhiosrachadh no co-theacsa a bharrachd.

Nas fhaide air adhart san artaigil seo, thèid am prìomh fhacal cuir an aghaidh a chleachdadh mar gheàrr-chunntas de na roghainnean sin uile.

Beatha gun OFFSET

A-nis smaoinichidh sinn cò ris a bhiodh an saoghal againn coltach às aonais na duilgheadasan sin uile. Tha e a ’tionndadh a-mach nach eil beatha gun chothromachadh cho duilich: le taghadh, chan urrainn dhut ach na sreathan sin nach fhaca sinn fhathast fhaicinn a thaghadh (nota: is e sin, an fheadhainn nach robh air an duilleag roimhe), a’ cleachdadh suidheachadh far a bheil.

Anns a 'chùis seo, bidh sinn a' tòiseachadh bhon fhìrinn gu bheil taghaidhean air an cur gu bàs air seata òrdaichte (seann òrdugh math le). Leis gu bheil seata òrdaichte againn, is urrainn dhuinn criathrag gu math sìmplidh a chleachdadh gus dìreach an dàta a tha air cùl a’ chlàr mu dheireadh den duilleag roimhe fhaighinn:

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

Sin uile phrionnsabal an dòigh-obrach seo. Gu dearbh, bidh cùisean a’ faighinn barrachd spòrs nuair a bhios iad gan rèiteachadh le iomadh colbh, ach tha am beachd fhathast mar an ceudna. Tha e cudromach cuimhneachadh gu bheil an dealbhadh seo a 'buntainn ri mòran NoSQL- co-dhùnaidhean.

Canar dòigh sireadh no duilleag iuchraichean iuchraichean ris an dòigh-obrach seo. Bidh e a ’fuasgladh na duilgheadas toradh fleòdraidh (nota: tha an suidheachadh le sgrìobhadh eadar duilleag air a leughadh, air a mhìneachadh na bu thràithe) agus, gu dearbh, na tha sinn uile dèidheil air, bidh e ag obair nas luaithe agus nas seasmhaiche na an dreach clasaigeach. Tha seasmhachd na laighe leis nach eil an ùine giollachd iarrtasan a’ dol suas a rèir àireamh a’ bhùird a chaidh iarraidh (nota: ma tha thu airson barrachd ionnsachadh mu obair diofar dhòighean air duilleagachadh, faodaidh tu coimhead tro thaisbeanadh an ùghdair. Gheibh thu cuideachd slatan-tomhais coimeasach airson diofar dhòighean an sin).

Aon de na sleamhnagan a' bruidhinn air sinchan eil an duilleag sin le iuchraichean, gu dearbh, uile-chumhachdach - tha na crìochan aige. Is e an rud as cudromaiche nach eil comas aice duilleagan air thuaiream a leughadh (nota: gu neo-chunbhalach). Ach, ann an àm scrollaidh gun chrìoch (nota: air a’ cheann aghaidh), chan eil seo na dhuilgheadas. Is e droch cho-dhùnadh ann an dealbhadh UI co-dhiù a th’ ann a bhith a’ sònrachadh àireamh duilleag airson cliogadh (nota: beachd ùghdar an artaigil).

Dè mu dheidhinn na h-innealan?

Gu tric chan eil pagination air iuchraichean freagarrach air sgàth dìth taic ionnsramaid don dòigh seo. Cha leig a’ mhòr-chuid de dh’ innealan leasachaidh, a’ toirt a-steach diofar fhrèamaichean, dhut taghadh dìreach mar a thèid duilleagachadh a dhèanamh.

Tha an suidheachadh air a dhèanamh nas miosa leis gu bheil an dòigh a chaidh a mhìneachadh a’ feumachdainn taic deireadh-gu-deireadh anns na teicneòlasan a thathar a’ cleachdadh - bhon DBMS gu cur an gnìomh iarrtas AJAX sa bhrobhsair le scrollaidh gun chrìoch. An àite dìreach àireamh na duilleige a shònrachadh, feumaidh tu a-nis seata iuchraichean a shònrachadh airson a h-uile duilleag aig an aon àm.

Ach, tha an àireamh de fhrèaman a tha a 'toirt taic do dhuilleagadh air iuchraichean a' fàs mean air mhean. Seo na th’ againn an-dràsta:

(Thoir an aire: chaidh cuid de cheanglaichean a thoirt air falbh air sgàth 's nach robh cuid de leabharlannan air an ùrachadh bho 2017-2018 aig àm an eadar-theangachaidh. Ma tha ùidh agad, faodaidh tu coimhead air an tùs thùsail.)

Is ann aig an àm seo a tha feum air do chuideachadh. Ma leasaicheas tu no ma bheir thu taic do fhrèam a nì feum sam bith de dhuilleag, tha mi a’ faighneachd, tha mi a’ guidhe ort, tha mi a’ guidhe ort taic dhùthchasach a thoirt seachad airson duilleagachadh air iuchraichean. Ma tha ceistean agad no ma tha feum agad air cuideachadh, bidh mi toilichte do chuideachadh (am fòram, Twitter, foirm-conaltraidh) (nota: bhon eòlas agam le Marcus, is urrainn dhomh a ràdh gu bheil e fìor dhealasach mu bhith a’ sgaoileadh a’ chuspair seo).

Ma chleachdas tu fuasglaidhean deiseil a tha thu a’ smaoineachadh a tha airidh air taic fhaighinn airson duilleagachadh le iuchraichean, cruthaich iarrtas no eadhon tairgse fuasgladh deiseil, ma ghabhas sin dèanamh. Faodaidh tu cuideachd ceangal a dhèanamh ris an artaigil seo.

co-dhùnadh

Is e an adhbhar nach eil dòigh-obrach cho sìmplidh agus cho feumail ri duilleag le iuchraichean farsaing, gu bheil e duilich a chuir an gnìomh gu teicnigeach no gu bheil feum air oidhirp mhòr. Is e am prìomh adhbhar gu bheil mòran eòlach air a bhith a 'faicinn agus ag obair le co-chothromachadh - tha an dòigh-obrach seo air a dhearbhadh leis an ìre fhèin.

Mar thoradh air an sin, chan eil mòran dhaoine a 'smaoineachadh mu bhith ag atharrachadh an dòigh-obrach a thaobh duilleagachadh, agus air sgàth seo, tha taic ionnsramaid bho fhrèaman agus leabharlannan a' fàs gu dona. Mar sin, ma tha beachd agus amas duilleagachadh gun chothromachadh faisg ort, cuidich le bhith ga sgaoileadh!

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

Source: www.habr.com

Cuir beachd ann