Werengani chiwerengero cha mizere yogwirizana ndi zomwe mukufuna kufufuza - izi ndizofunikira kuti muwonetse masamba.
Tiyeni tiwone funso loyamba pogwiritsa ntchito database ya mayeso a MS SQL monga chitsanzo AdventureWorks kwa seva ya 2016. Pachifukwa ichi tidzagwiritsa ntchito tebulo la Sales.SalesOrderHeader:
SELECT * FROM Sales.SalesOrderHeader
ORDER BY OrderDate DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY
SELECT * FROM Sales.SalesOrderHeader
WHERE (OrderDate = '2014-06-29' AND SalesOrderID < 75074)
OR (OrderDate < '2014-06-29')
ORDER BY OrderDate DESC, SalesOrderID DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY
Izi zitha kugwira ntchito moyenera, koma nthawi zambiri zimakhala zovuta kukhathamiritsa popeza vutoli lili ndi OR wogwiritsa ntchito. Ngati mtengo wa kiyi yoyamba ukuwonjezeka pamene OrderDate ikuwonjezeka, ndiye kuti mkhalidwewo ukhoza kukhala wosavuta pongosiya fyuluta ndi SalesOrderID. Koma ngati palibe mgwirizano wokhazikika pakati pa zikhalidwe za kiyi yoyamba ndi gawo lomwe zotsatira zake zimasanjidwa, izi OR sizingapewedwe mu ma DBMS ambiri. Kupatulapo komwe ndikudziwa ndi PostgreSQL, yomwe imathandizira kufananitsa kwa tuple, ndipo zomwe zili pamwambapa zitha kulembedwa kuti "KULI (OrderDate, SalesOrderID) <('2014-06-29', 75074)". Popeza makiyi ophatikiza ndi magawo awiriwa, funso ngati ili liyenera kukhala losavuta.
Njira ina yachiwiri ingapezeke, mwachitsanzo, mu ElasticSearch scroll API kapena Cosmos DB - pamene pempho, kuwonjezera pa deta, limabweza chizindikiritso chapadera chomwe mungapeze gawo lotsatira la deta. Ngati chizindikiritsochi chili ndi moyo wopanda malire (monga mu Comsos DB), ndiye kuti iyi ndi njira yabwino yogwiritsira ntchito paging ndi kusintha kotsatizana pakati pamasamba (njira #2 yotchulidwa pamwambapa). Zoyipa zake zotheka: sizimathandizidwa mu DBMS zonse; chotsatira cha chunk chotsatira chikhoza kukhala ndi moyo wocheperako, womwe nthawi zambiri suli woyenera kukhazikitsa kulumikizana kwa ogwiritsa ntchito (monga ElasticSearch scroll API).
Zosefera zovuta
Tiyeni tiwunikire ntchitoyi. Tiyerekeze kuti pali chofunikira kuti mugwiritse ntchito zomwe zimatchedwa kusaka kwapadera, zomwe ndizodziwika bwino kwa aliyense kuchokera m'masitolo apaintaneti. Zitsanzo zomwe zili pamwambazi kutengera tebulo la maoda sizowonetsera kwambiri pankhaniyi, ndiye tiyeni tisinthe kupita ku tebulo la Product kuchokera ku database ya AdventureWorks:
Kodi maganizo okhudza kusaka mwachisawawa ndi chiyani? Chowonadi ndichakuti pagawo lililonse losefera kuchuluka kwa zolembedwa zomwe zimakwaniritsa mulingo uwu zimawonetsedwa potengera zosefera zomwe zasankhidwa m'magulu ena onse.
Mwachitsanzo, ngati tisankha gulu la Njinga ndi mtundu Wakuda mu chitsanzo ichi, tebulo limangowonetsa njinga zakuda, koma:
Pachiyeso chilichonse mu Gulu la Magulu, kuchuluka kwazinthu zochokera m'gululi kudzawonetsedwa zakuda.
Pachiyeso chilichonse cha gulu la "Colours", kuchuluka kwa njinga zamtundu uwu kudzawonetsedwa.
Nachi chitsanzo cha zotsatira za zinthu zotere:
Ngati muyang'ananso gulu la "Zovala", tebulo lidzawonetsanso zovala zakuda zomwe zili m'gulu. Chiwerengero cha zinthu zakuda mu gawo la "Mtundu" chidzawerengedwanso molingana ndi zikhalidwe zatsopano, pokhapokha mu gawo la "Categories" palibe chomwe chidzasinthe ...
Tsopano tiyeni tiyerekeze momwe izi zingagwiritsidwire ntchito pa ubale. Gulu lililonse lazinthu, monga Gulu ndi Mtundu, lidzafuna funso losiyana:
SELECT pc.ProductCategoryID, pc.Name, COUNT(1) FROM Production.Product p
INNER JOIN Production.ProductSubcategory ps ON p.ProductSubcategoryID = ps.ProductSubcategoryID
INNER JOIN Production.ProductCategory pc ON ps.ProductCategoryID = pc.ProductCategoryID
WHERE p.Color = 'Black'
GROUP BY pc.ProductCategoryID, pc.Name
ORDER BY COUNT(1) DESC
SELECT Color, COUNT(1) FROM Production.Product p
INNER JOIN Production.ProductSubcategory ps ON p.ProductSubcategoryID = ps.ProductSubcategoryID
WHERE ps.ProductCategoryID = 1 --Bikes
GROUP BY Color
ORDER BY COUNT(1) DESC
Kodi cholakwika ndi chiyani ndi yankho ili? Ndizosavuta - sizimakula bwino. Gawo lililonse losefera limafuna funso lapadera kuti liwerengere kuchuluka kwake, ndipo mafunsowa siwophweka. M'masitolo apaintaneti, magulu ena amatha kukhala ndi magawo khumi ndi awiri a zosefera, zomwe zitha kukhala vuto lalikulu.
Nthawi zambiri pambuyo pa mawu awa ndimapatsidwa mayankho, awa:
Phatikizani kuchuluka kwa kuchuluka kwa funso limodzi. Mwaukadaulo izi ndizotheka kugwiritsa ntchito mawu osakira a UNION, koma sizithandiza kugwira ntchito kwambiri - nkhokweyo iyenerabe kutulutsa chidutswa chilichonse kuyambira poyambira.
Cache kuchuluka. Izi zimaperekedwa kwa ine pafupifupi nthawi iliyonse ndikufotokozera vuto. Chenjezo ndilakuti nthawi zambiri izi sizingatheke. Tiyerekeze kuti tili ndi "mbali" 10, iliyonse ili ndi mfundo zisanu. Izi ndi "zodzichepetsa" kwambiri poyerekeza ndi zomwe zingawoneke m'masitolo omwewo pa intaneti. Kusankhidwa kwa gawo limodzi kumakhudza kuchuluka kwa 5 ena, mwa kuyankhula kwina, pazophatikizira zilizonse zomwe zingasiyane. Mu chitsanzo chathu, pali chiwerengero cha 9 zomwe wogwiritsa ntchito angasankhe, choncho, padzakhala kuphatikiza zotheka 50. Palibe kukumbukira kapena nthawi yokwanira yodzaza deta yotere. Apa mutha kutsutsa ndikunena kuti si zophatikizira zonse zomwe zili zenizeni ndipo wogwiritsa ntchito nthawi zambiri samasankha njira zopitilira 250-5. Inde, ndizotheka kutsitsa mwaulesi ndikusunga kuchuluka kwa zomwe zasankhidwa, koma kusankha kochulukira komwe kumakhalapo, kachesi ngati kameneka kamakhala kocheperako komanso kuwonekera kwambiri mavuto anthawi yoyankhira (makamaka ngati Seti ya data imasintha pafupipafupi).
Mwamwayi, vuto loterolo lakhala ndi mayankho ogwira mtima omwe amagwira ntchito molosera pazambiri zambiri. Pazilizonse mwazosankhazi, ndizomveka kugawaniza kuwerengeranso kwa mawonekedwe ndi kulandira tsamba lazotsatira kukhala mafoni awiri ofanana ndi seva ndikukonzekera mawonekedwe a ogwiritsa ntchito kuti kutsitsa deta ndi mawonekedwe "sikusokoneza" kuwonetsa zotsatira.
Itanani kuwerengeranso kwathunthu kwa "mbali" mosowa momwe mungathere. Mwachitsanzo, musawerengenso chilichonse nthawi iliyonse mukasintha njira zofufuzira, m'malo mwake pezani kuchuluka kwa zotsatira zomwe zikugwirizana ndi momwe zilili pano ndikupangitsa wogwiritsa ntchito kuti aziwonetsa - "1425 zolembedwa zapezeka, onetsani?" Wogwiritsa akhoza kupitiriza kusintha mawu osakira kapena dinani batani la "Show". Pokhapokha pazochitika zachiwiri pamene zopempha zonse zopezera zotsatira ndi kuwerengeranso kuchuluka kwa "mbali" zonse zidzachitidwa. Pankhaniyi, monga mukuwonera mosavuta, muyenera kuthana ndi pempho kuti mupeze kuchuluka kwazotsatira ndi kukhathamiritsa kwake. Njirayi imapezeka m'masitolo ambiri ang'onoang'ono pa intaneti. Mwachiwonekere, iyi si njira yothetsera vutoli, koma muzochitika zosavuta kungakhale kusagwirizana kwabwino.
Gwiritsani ntchito mainjini osakira kuti mupeze zotsatira ndikuwerengera magawo, monga Solr, ElasticSearch, Sphinx ndi ena. Zonsezi zidapangidwa kuti zizipanga "magawo" ndikuchita izi moyenera chifukwa cha index inverted. Momwe injini zosakira zimagwirira ntchito, chifukwa chake zimakhala zogwira mtima kwambiri kuposa nkhokwe zodziwika bwino, machitidwe ndi misampha yomwe ilipo - uwu ndi mutu wankhani ina. Apa ndikufuna ndikuwonetseni kuti injini yosakira siyingakhale m'malo mwazosungirako zazikulu; imagwiritsidwa ntchito ngati chowonjezera: zosintha zilizonse zomwe zili m'dawunilodi yayikulu zomwe zikuyenera kusaka zimalumikizidwa muzosaka; Makina osakira nthawi zambiri amangolumikizana ndi injini yosakira ndipo samapeza database yayikulu. Imodzi mwa mfundo zofunika kwambiri apa ndi momwe mungagwirizanitse izi modalirika. Zonse zimadalira zofuna za "nthawi yochitapo kanthu". Ngati nthawi yapakati pa kusintha kwa database yayikulu ndi "kuwonekera" kwake pakufufuza sikuli kofunikira, mutha kupanga ntchito yomwe imasaka zolemba zomwe zasinthidwa posachedwa mphindi zingapo zilizonse ndikuzilemba. Ngati mukufuna nthawi yayifupi kwambiri yoyankha, mutha kugwiritsa ntchito zina bokosi lotuluka kutumiza zosintha ku ntchito yosakira.
Ngati kulandira kusonkhanitsa kwathunthu kwa deta, poganizira nthawi ya seva ndi kutumiza kwa maukonde, kumagwirizana ndi zofunikira zogwirira ntchito nthawi zonse, palibe chifukwa chokhazikitsa paging pa mbali ya seva.
Pakhoza kukhala zochitika zomwe palibe mavuto omwe amayembekezeredwa posachedwa, popeza pali deta yochepa, koma kusonkhanitsa deta kumakula nthawi zonse. Ngati seti ina ya data m'tsogolomu sichingakhutiritsenso mfundo yapitayi, ndibwino kuti muyambe tsamba nthawi yomweyo.