Tha na làithean air falbh nuair nach fheumadh tu a bhith draghail mu bhith a’ dèanamh an fheum as fheàrr de choileanadh stòr-dàta. Chan eil ùine a 'seasamh fhathast. Tha a h-uile neach-tionnsgain teignigeach ag iarraidh an ath Facebook a chruthachadh, agus iad a’ feuchainn ris an dàta gu lèir a chruinneachadh a gheibh iad an làmhan. Feumaidh gnìomhachasan an dàta seo gus modalan a thrèanadh nas fheàrr a chuidicheas iad gus airgead a dhèanamh. Ann an leithid de shuidheachaidhean, feumaidh luchd-prògramaidh APIan a chruthachadh a leigeas leotha obrachadh gu luath agus gu earbsach le tòrr fiosrachaidh.
Ma tha thu air a bhith a’ dealbhadh cùl-fhiosrachaidhean tagraidh no stòr-dàta airson ùine sam bith, is dòcha gu bheil thu air còd a sgrìobhadh gus ceistean duilleag a ruith. Mar eisimpleir, mar seo:
SELECT * FROM table_name LIMIT 10 OFFSET 40
Mar a tha e?
Ach mas ann mar seo a rinn thu do dhuilleag, tha mi duilich a ràdh nach do rinn thu e anns an dòigh as èifeachdaiche.
A bheil thu airson a dhol na aghaidh?
Ainmich co-dhiù aon leasaiche backend nach do chleachd a-riamh OFFSET
и LIMIT
gus ceistean pagined a dhèanamh. Ann am MVP (Bathar Soirbheachail as ìsle) agus ann am pròiseactan far a bheilear a’ cleachdadh beagan dàta, tha an dòigh-obrach seo gu math iomchaidh. Tha e “dìreach ag obair,” mar sin a bhruidhinn.
Ach ma dh'fheumas tu siostaman earbsach is èifeachdach a chruthachadh bhon fhìor thoiseach, bu chòir dhut a bhith faiceallach ro làimh mu èifeachdas ceasnachadh nan stòran-dàta a thathar a 'cleachdadh ann an leithid de shiostaman.
An-diugh bruidhnidh sinn mu na duilgheadasan le gnìomhachadh àbhaisteach (ro dhona) de dh’ einnseanan ceiste duilleag, agus mar as urrainn dhut àrd-choileanadh a choileanadh nuair a bhios tu a ’dèanamh cheistean mar sin.
Dè tha ceàrr air OFFSET agus LIMIT?
Mar a chaidh a ràdh cheana, OFFSET
и LIMIT
Bidh iad a 'coileanadh gu math ann am pròiseactan nach fheum a bhith ag obair le tomhas mòr de dhàta.
Bidh an duilgheadas ag èirigh nuair a dh’fhàsas an stòr-dàta cho mòr is nach eil e a’ freagairt air cuimhne an fhrithealaiche tuilleadh. Ach, nuair a bhios tu ag obair leis an stòr-dàta seo, feumaidh tu ceistean le duilleagan a chleachdadh.
Airson an duilgheadas seo a nochdadh fhèin, feumaidh suidheachadh a bhith ann far am bi an DBMS a’ dol gu gnìomhachd neo-èifeachdach Scan Làn-bhòrd air gach ceist duilleagach (fhad ‘s a dh’ fhaodadh gnìomhachd cuir a-steach is cuir às, agus chan eil feum againn air dàta seann-fhasanta!).
Dè a th’ ann an “sgan làn-bhòrd” (no “sgan clàr sreathach”, Sgan Sequential)? Is e gnìomh a tha seo far am bi an DBMS a’ leughadh gach sreath den chlàr ann an sreath, is e sin, an dàta a tha na bhroinn, agus gan sgrùdadh airson gèilleadh ri cumha sònraichte. Tha fios gur e an seòrsa sgrùdadh bùird seo an fheadhainn as slaodaiche. Is e an fhìrinn, nuair a thèid a chuir gu bàs, gu bheil mòran obrachaidhean cuir a-steach / toraidh air an coileanadh a tha a’ toirt a-steach fo-shiostam diosc an fhrithealaiche. Tha an suidheachadh air a dhèanamh nas miosa leis an latency co-cheangailte ri bhith ag obair le dàta air a stòradh air diosgan, agus leis gu bheil gluasad dàta bho diosc gu cuimhne na ghnìomhachd dian-ghoireasan.
Mar eisimpleir, tha clàran agad de 100000000 neach-cleachdaidh agus bidh thu a’ ruith ceist leis an togalach OFFSET 50000000
. Tha seo a’ ciallachadh gum feum an DBMS na clàran sin uile a luchdachadh (agus chan eil eadhon feum againn orra!), Cuir mar chuimhneachan orra, agus às deidh sin gabh, can, 20 toradh air aithris ann an LIMIT
.
Canaidh sinn gur dòcha gum bi e a’ coimhead mar seo: “tagh sreathan bho 50000 gu 50020 bho 100000”. Is e sin, feumaidh an siostam an toiseach 50000 sreath a luchdachadh gus a’ cheist a chrìochnachadh. A bheil thu a’ faicinn na tha de dh’ obair neo-riatanach a bhios aice ri dhèanamh?
Mura h-eil thu gam chreidsinn, thoir sùil air an eisimpleir a chruthaich mi a’ cleachdadh nam feartan
Eisimpleir aig db-fiddle.com
An sin, air an taobh chlì, anns an raon Schema SQL
, tha còd ann a chuireas 100000 sreathan a-steach don stòr-dàta, agus air an taobh cheart, san raon Query SQL
, tha dà cheist air an sealltainn. Tha a’ chiad fhear, slaodach, a’ coimhead mar seo:
SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;
Agus tha an dàrna fear, a tha na fhuasgladh èifeachdach air an aon dhuilgheadas, mar seo:
SELECT *
FROM `docs`
WHERE id > 85000
LIMIT 10;
Gus na h-iarrtasan sin a choileanadh, dìreach cliog air a’ phutan Run
aig mullach na duilleige. An dèidh seo a dhèanamh, bidh sinn a’ dèanamh coimeas eadar fiosrachadh mu àm cur gu bàs na ceiste. Tha e coltach gu bheil e a’ toirt co-dhiù 30 tursan nas fhaide na bhith a’ cur an dàrna fear an gnìomh (bidh an turas seo ag atharrachadh bho ruith gu ruith; mar eisimpleir, faodaidh an siostam aithris gun tug a’ chiad cheist 37 ms airson a chrìochnachadh, ach chaidh an dàrna - 1 ms).
Agus ma tha barrachd dàta ann, bidh a h-uile dad a ’coimhead eadhon nas miosa (gus a bhith cinnteach mu dheidhinn seo, thoir sùil air mo chuid
Bu chòir na tha sinn air bruidhinn dìreach beagan sealladh a thoirt dhut air mar a tha ceistean stòr-dàta air an giullachd.
Thoir an aire gur ann as àirde a tha an luach OFFSET
- mar as fhaide a bheir e gus an t-iarrtas a chrìochnachadh.
Dè a bu chòir dhomh a chleachdadh an àite a bhith a’ measgachadh OFFSET agus LIMIT?
An àite measgachadh OFFSET
и LIMIT
Is fhiach a bhith a 'cleachdadh structar a chaidh a thogail a rèir an sgeama a leanas:
SELECT * FROM table_name WHERE id > 10 LIMIT 20
Is e seo cur an gnìomh ceiste le duilleag stèidhichte air cùrsair.
An àite an fheadhainn gnàthach a stòradh gu h-ionadail OFFSET
и LIMIT
agus cuir thairis iad le gach iarrtas, feumaidh tu an iuchair bun-sgoile mu dheireadh a fhuaireadh a stòradh (mar as trice is e seo ID
) agus LIMIT
, mar thoradh air an sin, gheibhear ceistean coltach ris na tha gu h-àrd.
Carson? Is e a’ phuing, le bhith a’ sònrachadh gu soilleir aithnichear na loidhne mu dheireadh a chaidh a leughadh, gun innis thu don DBMS agad far am feum e tòiseachadh a’ lorg an dàta riatanach. A bharrachd air an sin, thèid an sgrùdadh, mar thoradh air cleachdadh na h-iuchrach, a dhèanamh gu h-èifeachdach; cha bhith feum air an t-siostam a bhith air a tharraing le loidhnichean taobh a-muigh an raon ainmichte.
Bheir sinn sùil air a’ choimeas dèanadais a leanas de dhiofar cheistean. Seo ceist neo-èifeachdach.
Iarrtas slaodach
Agus seo dreach làn-leasaichte den iarrtas seo.
Iarrtas luath
Bidh an dà cheist a 'tilleadh dìreach an aon uiread de dhàta. Ach bheir a’ chiad fhear 12,80 diog airson a chrìochnachadh, agus bheir an dàrna fear 0,01 diogan. A bheil thu a’ faireachdainn an diofar?
Duilgheadasan a dh'fhaodadh a bhith ann
Airson an dòigh ceiste a thathar a’ moladh a bhith ag obair gu h-èifeachdach, feumaidh colbh (no colbhan) a bhith air a’ chlàr anns a bheil clàran-amais àraid, sreathach, leithid aithnichear slòigh. Ann an cuid de chùisean sònraichte, dh’ fhaodadh seo dearbhadh dè cho soirbheachail ‘s a tha cleachdadh cheistean mar sin gus astar obrachadh leis an stòr-dàta àrdachadh.
Gu nàdarra, nuair a bhios tu a 'togail cheistean, feumaidh tu aire a thoirt do ailtireachd sònraichte nan clàran agus tagh na h-innealan sin a bhios ag obair as fheàrr air na clàran a th' ann mar-thà. Mar eisimpleir, ma dh'fheumas tu a bhith ag obair ann an ceistean le meudan mòra de dhàta co-cheangailte, is dòcha gum bi e inntinneach dhut
Ma tha duilgheadas againn a bhith a’ call prìomh iuchair, mar eisimpleir, ma tha clàr againn le dàimh ioma-gu-mòran, an uairsin bidh an dòigh-obrach thraidiseanta a’ cleachdadh OFFSET
и LIMIT
, Tha e cinnteach gum bi e iomchaidh dhuinn. Ach dh’ fhaodadh a bhith ga chleachdadh ceistean a dh’ fhaodadh a bhith slaodach. Ann an leithid de shuidheachaidhean, bhithinn a’ moladh prìomh iuchair fèin-àrdachaidh a chleachdadh, eadhon ged nach eil feum air ach airson ceistean le duilleagan a làimhseachadh.
Ma tha ùidh agad sa chuspair seo -
Builean
Is e am prìomh cho-dhùnadh as urrainn dhuinn a tharraing, ge bith dè an ìre de stòran-dàta air a bheil sinn a’ bruidhinn, gu bheil e an-còmhnaidh riatanach sgrùdadh a dhèanamh air astar coileanadh ceist. An-diugh, tha scalability fuasglaidhean air leth cudromach, agus ma tha a h-uile càil air a dhealbhadh gu ceart bhon fhìor thoiseach a bhith ag obair air siostam sònraichte, faodaidh seo, san àm ri teachd, an leasaiche a shàbhaladh bho iomadh duilgheadas.
Ciamar a nì thu mion-sgrùdadh agus as fheàrr air ceistean stòr-dàta?
Source: www.habr.com