PostgreSQL ndi makonda olembera okhazikika

Kumasulira kwa nkhaniyi kunakonzedwa makamaka kwa ophunzira a maphunzirowo "Database". Kodi mukufuna kupanga mbali iyi? Tikukuitanani Tsiku Lotsegula, pomwe timalankhula mwatsatanetsatane za pulogalamuyi, mawonekedwe amtundu wapaintaneti, luso komanso chiyembekezo chantchito chomwe chikuyembekezera omaliza maphunziro akamaliza maphunziro.

PostgreSQL ndi makonda olembera okhazikika

PostgreSQL ndi makonda olembera okhazikika
Pa Compose, timachita ndi nkhokwe zambiri, zomwe zimatipatsa mwayi wodziwa bwino magwiridwe antchito ndi zofooka zawo. Pamene tikuphunzira kukonda mawonekedwe a nkhokwe zatsopano, nthawi zina timayamba kuganiza momwe zingakhalire zabwino ngati zinthu zofananazo zikanapezeka mu zida zokhwima zomwe takhala tikugwira nazo ntchito kwa nthawi yayitali. Chimodzi mwazinthu zatsopano zomwe ndimafuna kuwona mu PostgreSQL zinali zosinthika zolembera pamalumikizidwe pagulu lonse. Ndipo momwe zikuwonekera, tili nazo kale, ndipo lero tikufuna kugawana nanu zambiri za momwe mungagwiritsire ntchito.

Chifukwa chiyani ndikuchifuna?

Momwe gulu liyenera kukhalira zimatengera ntchito yanu. Tengani, mwachitsanzo, pulogalamu yolipira mabilu. Mufunika kusasinthika kwa XNUMX% pagulu lonselo, chifukwa chake muyenera kuloleza ma synchronous commits kuti database yanu idikire kuti zonse zisinthe. Komabe, ngati pulogalamu yanu ndi malo ochezera omwe akukula mwachangu, ndiye kuti mungakonde kuyankha mwachangu kuposa kusasinthika kwa XNUMX%. Kuti muchite izi, mutha kugwiritsa ntchito ma asynchronous commits mgulu lanu.

Kukumana ndi kunyengerera

Muyenera kupanga tradeoffs pakati pa kusasinthika kwa data ndi magwiridwe antchito. PostgreSQL imachoka ku kusasinthasintha chifukwa kusinthika kosasintha kumakhala kodziwikiratu komanso popanda zodabwitsa zosayembekezereka. Tsopano tiyeni tione kusagwirizana.

Tradeoff 1: Kuchita

Ngati gulu la PostgreSQL silikufuna kusasinthika, limatha kuyenda mosiyanasiyana. Zolembazo zimapangidwira mtsogoleri wamagulu, ndipo zosintha zidzatumizidwa ku zolemba zake ma milliseconds angapo pambuyo pake. Pamene gulu la PostgreSQL likufuna kusasinthasintha, liyenera kuyenda mofanana. Zolembazo zidzapangidwa kwa mtsogoleri wamagulu, omwe adzatumiza zosintha kwa zofananirazo ndikudikirira chitsimikiziro chomwe aliyense adalemba asanatumize chitsimikiziro kwa kasitomala yemwe adayambitsa kulemba kuti adapambana. Kusiyanitsa kothandiza pakati pa njirazi ndikuti njira ya asynchronous imafuna ma hop awiri apakompyuta, pomwe njira yolumikizirana imafuna zinayi.

Tradeoff 2: Kusasinthasintha

Chotsatira ngati mtsogoleri alephera mu njira ziwirizi zidzakhalanso zosiyana. Ngati ntchitoyi ikuchitika mwachisawawa, ndiye kuti ngati cholakwikacho chichitika, si zolemba zonse zomwe zidzachitike ndi zolembazo. Zidzatayika zingati? Zimatengera ntchito palokha ndi dzuwa la kubwerezabwereza. Kupanga kubwereza kudzalepheretsa chofananira kukhala mtsogoleri ngati kuchuluka kwa chidziwitso chomwe chilimo ndi 1 MB kuchepera kwa mtsogoleri, ndiye kuti, mpaka 1 MB ya zolemba zitha kutayika panthawi yogwira ntchito mosagwirizana.

Izi sizichitika mumayendedwe osakanikirana. Ngati mtsogoleri alephera, zofananira zonse zimasinthidwa, popeza zolemba zilizonse zotsimikiziridwa pa mtsogoleri ziyenera kutsimikiziridwa pazifanizirozo. Izi ndizosasinthasintha.

Makhalidwe a Synchronous amamveka bwino pakugwiritsa ntchito bili pomwe kusasinthasintha kuli ndi mwayi wowonekera pakugulitsa pakati pa kusasinthika ndi magwiridwe antchito. Chofunika kwambiri pakugwiritsa ntchito koteroko ndi deta yovomerezeka. Tsopano ganizirani za malo ochezera a pa Intaneti omwe ntchito yaikulu ndi kusunga chidwi cha wogwiritsa ntchito poyankha zopempha mwamsanga. Pamenepa, kugwira ntchito ndi ma hop ochepa a netiweki komanso kudikirira pang'ono kuchita kumakhala kofunikira. Komabe, tradeoff pakati pa magwiridwe antchito ndi kusasinthika sizomwe muyenera kuziganizira.

Kusinthana 3: Zowonongeka

Ndikofunikira kwambiri kumvetsetsa momwe masango amachitira pakalephera. Ganizirani zochitika zomwe zofananira chimodzi kapena zingapo zalephera. Zochita zikakonzedwa mwachisawawa, mtsogoleriyo apitiliza kugwira ntchito, ndiye kuti, kuvomereza ndikulemba zolemba, osadikirira zofananira zomwe zikusowa. Zofananirazo zikabwerera ku tsango, zimapeza mtsogoleri. Ndi kubwereza kofananira, ngati zofananirazo sizikuyankha, ndiye kuti mtsogoleriyo sangachitire mwina ndipo apitiliza kudikirira kuti atsimikizidwe mpaka chofananiracho chibwerere kugululo ndikuvomereza ndikulemba.

Kulumikizana kumodzi pazochitika zonse?

Ntchito iliyonse imafunikira mtundu wosiyanasiyana wosakanikirana ndi magwiridwe antchito. Pokhapokha, ndi pulogalamu yathu yolipira bilu, yomwe timaganiza kuti ndiyokhazikika, kapena pulogalamu yathu yapaintaneti yocheperako. Muzochitika zina zonse, padzakhala nthawi zomwe ntchito zina ziyenera kukhala zofanana ndipo zina ziyenera kukhala zofanana. Mwina simungafune kuti dongosololi lidikire mpaka uthenga womwe watumizidwa kumachezawo waperekedwa, koma ngati malipiro asinthidwa muzolemba zomwezo, ndiye kuti muyenera kuyembekezera.

Zosankha zonsezi, zachidziwikire, zimapangidwa ndi wopanga mapulogalamu. Kupanga zisankho zoyenera za nthawi yogwiritsira ntchito njira iliyonse kudzakuthandizani kuti mupindule kwambiri ndi gulu lanu. Ndikofunikira kuti wopanga mapulogalamuwo asinthe pakati pawo pamlingo wa SQL kuti alumikizane ndi ma transaction.

Kuonetsetsa kulamulira muzochita

Mwachikhazikitso, PostgreSQL imapereka kusasinthika. Izi zimayendetsedwa ndi parameter ya seva synchronous_commit. Mwachikhazikitso ili pamalo on, koma ili ndi njira zina zitatu: local, remote_write kapena off.

Pokhazikitsa parameter kuti off ntchito zonse zolumikizana zimayimitsidwa, ngakhale pamakina akomweko. Zoyimira zakomweko zimatchula njira yolumikizirana pamakina akomweko, koma zolembera zofananira zimachitidwa mwachisawawa. Remote_write zimapitanso patsogolo: zolembera ku replicas zimapangidwa mwachisawawa, koma zimabwezedwa pomwe chofanizira chavomereza kulemba koma sichinalembe ku diski.

Poganizira njira zomwe zilipo, timasankha khalidwe ndikukumbukira kuti on - awa ndi ma synchronous rekodi, tidzasankha local chifukwa cha ma asynchronous pa netiweki, ndikusiya zochita zapafupi.

Tsopano, tikuwuzani momwe mungakhazikitsire izi pakamphindi, koma taganizirani kuti takhazikitsa synchronous_commit Π² local kwa seva. Tinadabwa ngati n'zotheka kusintha parameter synchronous_commit pa ntchentche, ndipo kunapezeka kuti sizingatheke, palinso njira ziwiri zochitira izi. Choyamba ndikukhazikitsa gawo la kulumikizana kwanu motere:

SET SESSION synchronous_commit TO ON;  
// Your writes go here

Zolemba zonse zotsatila mu gawoli zidzavomereza zolembera ku replicas musanabweretse zotsatira zabwino kwa kasitomala wolumikizidwa. Pokhapokha mutasintha zoikamo synchronous_commit kachiwiri. Mutha kusiya gawo SESSION mu lamulo chifukwa lidzakhala mu mtengo wosasintha.

Njira yachiwiri ndi yabwino mukangofuna kuonetsetsa kuti mwapeza kubwereza kofananira pakuchitako kamodzi. M'malo ambiri am'badwo wa NoSQL lingaliro la zochitika kulibe, koma limakhala mu PostgreSQL. Pankhaniyi, mumayamba kugulitsa ndikukhazikitsa synchronous_commit Π² on musanapereke cholowa cha transaction. COMMIT adzachita malondawo pogwiritsa ntchito mtengo uliwonse synchronous_commit, zomwe zinakhazikitsidwa panthawiyo, ngakhale kuti ndibwino kuti muyike zosinthika kutsogolo kuti muwonetsetse kuti otukula ena amvetsetsa kuti kulemba sikuli kofanana.

BEGIN;  
SET LOCAL synchronous_commit TO ON;  
// Your writes go here
COMMIT;  

Zonse zomwe zachitika tsopano zidzatsimikiziridwa monga zalembedwera ku replicas database isanabweretse yankho labwino kwa kasitomala wolumikizidwa.

Kupanga PostgreSQL

Izi zisanachitike, tidaganizira dongosolo la PostgreSQL ndi synchronous_commit, yaikidwa mu local. Kuti izi zitheke kumbali ya seva, muyenera kukhazikitsa njira ziwiri zosinthira seva. Mmodzi winanso parameter synchronous_standby_names idzafika mu nthawi yake synchronous_commit adzalowa on. Imatsimikizira kuti ndi zofananira ziti zomwe zili zoyenera kuchita ndi ma synchronous, ndipo tidzakhazikitsa *, zomwe zikutanthauza kuti zofananira zonse zikuphatikizidwa. Makhalidwe awa nthawi zambiri amasinthidwa mkati configuration file powonjezera:

synchronous_commit = local  
synchronous_standby_names='*'

Pokhazikitsa parameter synchronous_commit mu mtengo local, timapanga kachitidwe komwe ma disks am'deralo amakhalabe ofanana, koma ma network replica commits amakhala asynchronous mwachisawawa. Pokhapokha, taganiza zopanga izi kukhala zogwirizana, monga tawonera pamwambapa.

Ngati mwakhala mukutsatira chitukuko Pulojekiti ya bwanamkubwa, mwina mwawona zosintha zaposachedwa (1, 2), zomwe zinalola ogwiritsa ntchito a Bwanamkubwa kuyesa magawowa ndikuwunika kusasinthika kwawo.

Mawu enanso ...

Sabata yapitayo, ndikadakuuzani kuti ndizosatheka kuyika bwino PostgreSQL bwino. Apa m’pamene Kurt, membala wa gulu la pulatifomu ya Compose, anaumirira kuti mwayi wotero ulipo. Adandikhazika mtima pansi zotsutsa zanga ndikupeza zolemba za PostgreSQL zotsatirazi:

PostgreSQL ndi makonda olembera okhazikika

Zokonda izi zitha kusinthidwa nthawi iliyonse. Khalidwe la zochitika zilizonse zimatsimikiziridwa ndi zomwe zikuchitika panthawi yochita. Chifukwa chake, ndizotheka komanso zothandiza kuti zochitika zina zizichitika mwachisawawa komanso zina mosagwirizana. Mwachitsanzo, kukakamiza mmodzi multistatement transaction kuti apange asynchronously pamene mtengo wokhazikika wa parameter ndi wosiyana, set SET LOCAL synchronous_commit TO OFF mu malonda.

Ndi kusintha kwakung'ono kwa fayilo yosinthira, tidapatsa ogwiritsa ntchito kuwongolera kusinthasintha kwawo ndi magwiridwe antchito.

Source: www.habr.com

Kuwonjezera ndemanga