Me yasa kuke buƙatar goyan bayan kayan aiki don yin rubutu akan maɓalli?

Sannu duka! Ni mai haɓakawa ne na baya-bayan nan da ke rubuta microservices a Java + Spring. Ina aiki a cikin ɗayan ƙungiyoyin haɓaka samfuran ciki a Tinkoff.

Me yasa kuke buƙatar goyan bayan kayan aiki don yin rubutu akan maɓalli?

A cikin ƙungiyarmu, tambayar inganta tambayoyin a cikin DBMS sau da yawa tana tasowa. Koyaushe kuna son zama ɗan sauri, amma ba koyaushe za ku iya yin nasara tare da fihirisar da aka ƙera da tunani ba-dole ne ku nemi wasu hanyoyin warwarewa. Lokacin ɗaya daga cikin waɗannan yawo a cikin gidan yanar gizo don neman ingantaccen ingantawa lokacin aiki tare da bayanan bayanai, na samo Bulogin Marcus Wynand mai taimako mara iyaka, Mawallafin Ayyukan SQL Ya Bayyana. Wannan shine nau'in blog ɗin da ba kasafai ba wanda a cikinsa zaku iya karanta duk labaran a jere.

Ina so in fassara muku ɗan gajeren labari na Marcus. Ana iya kiran shi zuwa wani ɗan lokaci bayanin da ke neman jawo hankali ga tsohuwar, amma har yanzu matsalar da ta dace game da aiwatar da aikin kashewa bisa ga ma'aunin SQL.

A wasu wuraren zan kara wa marubucin bayani da sharhi. Zan koma ga duk irin waɗannan wurare kamar "kusanci." don ƙarin haske

Karamin gabatarwa

Ina tsammanin mutane da yawa sun san yadda matsala da jinkirin aiki tare da zaɓin shafi ta hanyar biya diyya yake. Shin, kun san cewa ana iya sauya shi cikin sauƙi da ƙira mafi inganci?

Don haka, kalmar kashewa tana gaya wa ma'ajin bayanai don tsallake bayanan n na farko a cikin buƙatun. Duk da haka, har yanzu ma'adanin yana buƙatar karanta waɗannan na farko n records daga faifai, a cikin tsari da aka bayar (bayanin kula: a shafi rarrabawa idan an ƙayyade), sannan kawai za'a iya dawo da bayanan daga n+1 zuwa gaba. Abu mafi ban sha'awa shine matsalar ba a cikin takamaiman aiwatarwa a cikin DBMS ba, amma a cikin ma'anar asali bisa ga ma'auni:

…an fara jera layuka bisa ga sannan ana iyakance ta ta hanyar sauke adadin layuka da aka kayyade a cikin daga farkon…
-SQL:2016, Sashe na 2, 4.15.3 Tables da aka samo (bayanin kula: a halin yanzu mafi yawan ma'auni)

Muhimmin batu anan shine kashewa yana ɗaukar siga guda ɗaya - adadin rikodin don tsallakewa, kuma shi ke nan. Bayan wannan ma'anar, DBMS na iya dawo da duk bayanan kawai sannan a watsar da waɗanda ba dole ba. Babu shakka, wannan ma'anar kashewa yana haifar da aikin da ba dole ba. Kuma ba kome ba ko SQL ne ko NoSQL.

Kawai dan karin zafi

Matsaloli tare da kashe kuɗi ba su ƙare a nan ba, kuma ga dalilin da ya sa. Idan, tsakanin karanta shafuka biyu na bayanai daga faifai, wani aiki ya sanya sabon rikodin, menene zai faru a wannan yanayin?

Me yasa kuke buƙatar goyan bayan kayan aiki don yin rubutu akan maɓalli?

Lokacin da aka yi amfani da kashe kuɗi don tsallake bayanan daga shafukan da suka gabata, a cikin yanayin ƙara sabon rikodin tsakanin karanta shafuka daban-daban, za ku iya samun kwafi (bayanin kula: wannan yana yiwuwa idan muka karanta shafi zuwa shafi ta amfani da tsari ta hanyar ginawa, sannan a tsakiyar fitowar mu yana iya samun sabon shigarwa).

Adadin ya nuna wannan yanayin a fili. Tushen yana karanta rikodin 10 na farko, bayan haka an saka sabon rikodin, wanda ke daidaita duk bayanan da aka karanta ta 1. Sannan tushe yana ɗaukar sabon shafi daga rikodin 10 na gaba kuma yana farawa ba daga na 11 ba, kamar yadda ya kamata, amma daga littafin. 10th, kwafi wannan rikodin. Akwai wasu abubuwan da ba su dace ba da ke da alaƙa da amfani da wannan magana, amma wannan shine ya fi yawa.

Kamar yadda muka riga muka gano, waɗannan ba matsalolin takamaiman DBMS ba ne ko aiwatar da su. Matsalar tana cikin ma'anar shafi bisa ma'aunin SQL. Muna gaya wa DBMS wane shafin da za a debo ko nawa za a tsallake. Rukunin bayanan ba zai iya inganta irin wannan buƙatar ba, tun da akwai ƙarancin bayanai don wannan.

Hakanan yana da kyau a fayyace cewa wannan ba matsala ce ta takamaiman kalma ba, a'a tare da ma'anar tambaya. Akwai wasu ƙarin kalmomi da yawa waɗanda suka yi daidai da yanayin matsalarsu:

  • Maɓallin maɓalli kamar yadda aka ambata a baya.
  • Ƙaddamar da ƙayyadaddun kalmomi guda biyu [ƙayyade] (ko da yake iyakar kanta ba ta da kyau).
  • Tace ta ƙananan iyakoki, dangane da lambobi (misali, layin_lamba(), layi, da sauransu).

Duk waɗannan maganganun suna gaya muku kawai layukan da za ku tsallake, babu ƙarin bayani ko mahallin.

Daga baya a cikin wannan labarin, ana amfani da kalmar kashewa azaman taƙaice duk waɗannan zaɓuɓɓuka.

Rayuwa ba tare da KYAUTA ba

Yanzu bari mu yi tunanin yadda duniyarmu za ta kasance ba tare da waɗannan matsalolin ba. Ya bayyana cewa rayuwa ba tare da biya ba ba ta da wahala sosai: tare da zaɓi, za ku iya zaɓar waɗancan layuka waɗanda ba mu taɓa gani ba (bayanin kula: wato waɗanda ba a shafi na baya ba), ta amfani da yanayin inda.

A wannan yanayin, zamu fara daga gaskiyar cewa ana aiwatar da zaɓaɓɓun akan tsarin da aka ba da umarni (tsohon oda mai kyau ta). Tun da muna da saitin da aka ba da oda, za mu iya amfani da tace mai sauƙi don samun kawai bayanan da ke bayan rikodin ƙarshe na shafin da ya gabata:

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

Wannan shi ne gaba daya ka'idar wannan hanya. Tabbas, abubuwa sun fi jin daɗi yayin da ake rarraba ta ginshiƙai da yawa, amma ra'ayin har yanzu iri ɗaya ne. Yana da mahimmanci a lura cewa wannan zane ya shafi mutane da yawa NoSQL- yanke shawara.

Ana kiran wannan hanyar neman hanyar neman ko saitin maɓalli. Yana warware matsalar sakamako mai iyo (bayanin kula: halin da ake ciki tare da rubuce-rubuce tsakanin shafi da aka bayyana a baya) kuma, ba shakka, abin da muke ƙauna, yana aiki da sauri da kwanciyar hankali fiye da na yau da kullum. Kwanciyar hankali ya ta'allaka ne a cikin gaskiyar cewa lokacin aiwatar da buƙatun baya haɓaka gwargwadon adadin teburin da ake buƙata (bayanin kula: idan kuna son ƙarin koyo game da aikin hanyoyin daban-daban zuwa pagination, zaku iya). duba ta gabatarwar marubucin. Hakanan zaka iya samun ma'auni na kwatanta don hanyoyi daban-daban a can).

Daya daga cikin nunin faifai yayi magana akan hakacewa pagination ta maɓalli, ba shakka, ba mai iko ba ne - yana da iyakokinsa. Mafi mahimmanci shi ne cewa ba ta da ikon karanta shafukan bazuwar (bayanin kula: rashin daidaituwa). Koyaya, a cikin zamanin gungurawa mara iyaka (bayanin kula: a ƙarshen gaba), wannan ba irin wannan matsala bane. Ƙayyade lambar shafi don danna mummunan yanke shawara ne a ƙirar UI ta wata hanya (bayanin kula: ra'ayi na marubucin labarin).

Me game da kayan aikin?

Maɓalli akan maɓalli sau da yawa ba su dace ba saboda rashin tallafin kayan aiki don wannan hanyar. Yawancin kayan aikin haɓakawa, gami da ginshiƙai daban-daban, ba sa ƙyale ku zaɓi daidai yadda za a yi fage.

Halin ya kara tsanantawa da gaskiyar cewa hanyar da aka kwatanta tana buƙatar goyon bayan ƙarshen-zuwa-ƙarshe a cikin fasahar da aka yi amfani da su - daga DBMS zuwa aiwatar da buƙatar AJAX a cikin mai bincike tare da gungura mara iyaka. Maimakon ƙididdige lambar shafin kawai, yanzu dole ne ka saka saitin maɓalli don duk shafuka a lokaci ɗaya.

Koyaya, adadin ginshiƙai waɗanda ke goyan bayan fage akan maɓalli suna girma a hankali. Ga abin da muke da shi a halin yanzu:

(Lura: an cire wasu hanyoyin haɗin gwiwa saboda gaskiyar cewa a lokacin fassarar wasu ɗakunan karatu ba a sabunta su ba tun daga 2017-2018. Idan kuna sha'awar, kuna iya duba tushen asali.)

A wannan lokacin ne ake buƙatar taimakon ku. Idan kun haɓaka ko goyan bayan tsarin da ke yin amfani da kowane nau'in rubutun, to ina tambaya, ina roƙon, ina roƙonku da ku ba da goyan baya na asali don rubutun kan maɓalli. Idan kuna da tambayoyi ko buƙatar taimako, zan yi farin cikin taimaka (taron, Twitter, hanyar sadarwa) (bayanin kula: daga kwarewata da Marcus, zan iya cewa yana da matukar sha'awar yada wannan batu).

Idan kun yi amfani da shirye-shiryen shirye-shiryen da kuke tsammanin sun cancanci samun goyon baya ga pagination ta maɓalli, ƙirƙira buƙatu ko ma bayar da mafita da aka shirya, idan zai yiwu. Hakanan zaka iya haɗawa zuwa wannan labarin.

ƙarshe

Dalilin da ya sa irin wannan hanya mai sauƙi kuma mai amfani a matsayin maɓalli ta maɓalli ba ya yadu ba shine yana da wuya a aiwatar da fasaha ba ko yana buƙatar wani babban ƙoƙari. Babban dalili shi ne cewa mutane da yawa sun saba da gani da aiki tare da kashewa - wannan tsarin yana da ƙayyadaddun tsari da kansa.

A sakamakon haka, mutane kaɗan suna tunanin canza hanyar zuwa pagination, kuma saboda wannan, tallafin kayan aiki daga tsarin da ɗakunan karatu yana tasowa mara kyau. Don haka, idan ra'ayin da burin fage na ba da kyauta yana kusa da ku, ku taimaka yada shi!

source: https://use-the-index-luke.com/no-offset
Marubuci: Markus Winand

source: www.habr.com

Add a comment