PostgreSQL iyo habaynta qorista gaarka ah ee isku xidhka

Turjumaada maqaalka waxaa si gaar ah loogu diyaariyey ardayda koorsada "Database". Xiisaynaya horumarinta jihadan? Waanu kugu casuunay Maalinta Furan, halkaas oo aan si faahfaahsan uga hadalno barnaamijka, qaababka qaabka online-ka ah, kartida iyo rajada shaqo ee sugaya qalin-jabinta tababarka ka dib.

PostgreSQL iyo habaynta qorista gaarka ah ee isku xidhka

PostgreSQL iyo habaynta qorista gaarka ah ee isku xidhka
Haddaanu nahay Compose, waxaanu kula macaamilnaa xog-ururin badan, kaasoo na siinaya fursad aanu ku baran karno hawlahooda iyo cilladahooda. Markaan baraneyno inaan jecelnahay sifooyinka xog-ururinta cusub, waxaan mararka qaarkood bilaabeynaa inaan ka fikirno sida ay u fiicnaan lahayd haddii sifooyin la mid ah ay ku jiraan qalabyada qaangaarka ah ee aan la shaqeynay muddo dheer. Mid ka mid ah sifooyinka cusub ee aan rabay in aan ku arko PostgreSQL ayaa ahaa mid la isku hagaajin karo oo qorista isku xirka kooxda oo dhan. Oo sida ay soo baxday, waanu haysanay, maantana waxaan rabnaa inaan idinla wadaagno macluumaadka ku saabsan sida aad u isticmaali karto.

Maxaan ugu baahanahay?

Sida kooxdu u dhaqmayso waxay ku xidhan tahay codsigaaga. Qaado, tusaale ahaan, abka lacag bixinta biilka. Waxaad u baahan doontaa XNUMX% joogtaynta guud ahaan kutlada, marka waa inaad awood u yeelataa ballanqaadyo isku mid ah si ay xogtaadu u sugto dhammaan isbeddellada la sameeyo. Si kastaba ha noqotee, haddii codsigaagu yahay shabakad bulsho oo si degdeg ah u koraysa, markaa waxaad u badan tahay inaad doorbidayso jawaab celin degdeg ah XNUMX% joogta ah. Si taas loo gaaro, waxaad isticmaali kartaa asynchronous ballanqaadyada kutladaada.

La kulan tanaasul

Waa inaad samaysaa isweydaarsiyo u dhexeeya joogtaynta xogta iyo waxqabadka. PostgreSQL waxay ka guurtaa joogteynta sababtoo ah qaabka caadiga ah ayaa markaa la saadaalin karaa oo aan la fileynin lama filaan ah. Haddaba aan eegno tanaasulaadka.

Ganacsiga 1: Waxqabadka

Haddii kooxda PostgreSQL aysan u baahnayn joogtayn, waxay u socon kartaa si la mid ah. Qoraalka waxaa loo sameeyay hogaamiyaha kooxda, cusboonaysiinta waxaa loo diri doonaa nuqulkeeda dhowr millisekd ka dib. Marka kooxda PostgreSQL ay u baahan tahay joogtayn, waa inay si isku mid ah u shaqeyso. Qoraalka ayaa loo samayn doonaa hogaamiyaha kooxda, kaas oo u soo diri doona cusboonaysiinta nuqulada oo sugi doona xaqiijinta in mid walbaa qoray ka hor inta aan loo dirin xaqiijinta macmiilka bilaabay qoritaanka in uu guulaystay. Farqiga la taaban karo ee u dhexeeya hababkan ayaa ah in habka asynchronous uu u baahan yahay laba xabbo oo shabakadeed, halka habka isku midka ah uu u baahan yahay afar.

Ganacsiga 2: Joogteynta

Natiijadu haddii ay dhacdo in hoggaamiye ku guuldareysto labadan hab sidoo kale way ka duwanaan doontaa. Haddii shaqada loo qabto si isku mid ah, ka dib haddii qalad noocaas ahi dhaco, dhammaan diiwaanada laguma samayn doono nuqullada. Immisa ayaa lumaya? Waxay kuxirantahay codsiga laftiisa iyo hufnaanta ku-noqoshada. Samaynta ku celcelinta waxay ka ilaalinaysaa koobiga inuu noqdo hogaamiye haddii cadadka macluumaadka ku jira uu 1 MB ka yar yahay kan hogaamiyaha, taas oo ah, ilaa 1 MB ee diiwaanadu waxay suurtogal tahay inay lumin karaan inta lagu jiro hawlgalka is-daba jooga ah.

Tani kuma dhacdo qaab isku mid ah. Haddii hoggaamiyuhu guul-darraysto, dhammaan nuqullada waa la cusboonaysiiyaa, maadaama qoraal kasta oo lagu xaqiijiyey hoggaamiyaha waa in lagu xaqiijiyo nuqullada. Tani waa joogtayn.

Dabeecad isku mid ah ayaa macno ka samaynaysa codsiga biilka halkaas oo joogtayntu ay faa'iido cad u leedahay isdhaafsiga joogtada ah iyo waxqabadka. Waxa ugu muhiimsan ee codsigan oo kale ah waa xog sax ah. Hadda ka feker shabakad bulsheed oo hawsha ugu weyni ay tahay in la ilaaliyo dareenka isticmaalaha adigoo ka jawaabaya codsiyada sida ugu dhakhsaha badan. Xaaladdan oo kale, waxqabadka leh hops shabakad yar iyo sugitaan yar oo ballanqaad ayaa noqon doona mudnaan. Si kastaba ha ahaatee, is-dhaafsiga u dhexeeya waxqabadka iyo joogteynta ma aha ka kaliya ee aad u baahan tahay inaad ka fikirto.

Ganacsiga-off 3: Shilalka

Aad bay muhiim u tahay in la fahmo sida kooxdu u dhaqmo xilliga guuldarada. Tixgeli xaalad hal ama in ka badan oo nuqul ah ay ku guuldareystaan. Marka go'aannada si isku mid ah loo falanqeeyo, hoggaamiyuhu wuu sii wadi doonaa shaqadiisa, taas oo ah, aqbal oo habraacu wuu qoraa, iyada oo aan la sugin nuqullo maqan. Marka nuqulku ku soo noqdo kooxda, waxay la qabsadaan hogaamiyaha. Ku celcelinta isku midka ah, haddii nuqulku ka jawaabi waayo, markaa hoggaamiyuhu ma yeelan doono doorasho wuxuuna sii wadi doonaa inuu sugo xaqiijinta ilaa uu nuqulku ku soo noqdo kooxda oo uu aqbali karo oo qori karo.

Hal xiriir ganacsi kasta?

Codsi kastaa wuxuu u baahan yahay nooc ka duwan isku darka joogtada ah iyo waxqabadka. Ilaa, dabcan, uu yahay abkayaga biilka-bixinta ah, kaas oo aan u malaynayno inuu si buuxda u soconayo, ama abkayada xidhiidhka bulshada ee ku dhow. Dhammaan kiisaska kale, waxaa jiri doona waqtiyo ay tahay in hawlgallada qaar ay noqdaan kuwo isku mid ah oo qaarna ay noqdaan kuwo aan isku mid ahayn. Waxaa laga yaabaa inaadan rabin nidaamka inuu sugo ilaa fariinta loo soo diro sheekeysiga la go'aamiyo, laakiin haddii lacag bixinta lagu farsameeyo isla arjiga, markaa waa inaad sugtaa.

Dhammaan go'aamadan, dabcan, waxaa gaaray horumariyaha codsiga. Qaadashada go'aamada saxda ah ee ku saabsan goorta la isticmaalayo hab kasta waxay kaa caawin doontaa inaad ka faa'iidaysato kooxdaada. Waa muhiim in horumariyahu uu u kala bedeli karo iyaga oo ah heerka SQL isku xirka iyo wax kala iibsiga.

Xaqiijinta xakamaynta ficil ahaan

Sida caadiga ah, PostgreSQL waxay bixisaa joogtayn. Tan waxaa gacanta ku haya cabbirka server-ka synchronous_commit. Sida caadiga ah waxay ku jirtaa booska on, laakiin waxay leedahay saddex doorasho oo kale: local, remote_write ama off.

Markaad dejinayso cabbirka off Dhammaan falalka isku midka ah waa la joojiyaa, xitaa nidaamka deegaanka. Halbeegga maxalliga ahi wuxuu qeexayaa hab isku mid ah nidaamka maxalliga ah, laakiin wuxuu u qoraa nuqullada waxaa loo sameeyaa si isku mid ah. Remote_write xitaa aad u sii socota: u qorta nuqulada waxaa loo sameeyaa si isku mid ah, laakiin waxaa la soo celiyaa marka nuqulku aqbalo qoraalka laakiin uusan ku qorin saxanka.

Anagoo tixgalinayna fursadaha kala duwan ee jira, waxaan dooranaa dabeecad, iyadoo maskaxda lagu hayo taas on - kuwani waa cajalado isku mid ah, waanu dooran doonaa local Waayo, asynchronous wuxuu ku sameeyaa shabakada, marka uu ka tago maxalliga ah wuxuu samaynayaa isku mid ah.

Hadda, waxaan kuu sheegi doonaa sida tan loo dejiyo daqiiqad gudaheed, laakiin ka fikir inaan dejinay synchronous_commit Π² local loogu talagalay server-ka. Waxaan la yaabnay inay suurtagal tahay in la beddelo cabbirka synchronous_commit duulista, oo waxay soo baxday in aysan suurtagal ahayn oo kaliya, waxaa jira xitaa laba siyaabood oo tan loo sameeyo. Midda kowaad waa inaad u dejiso fadhiga xidhiidhkaaga sida soo socota:

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

Dhammaan qoraallada soo socda ee fadhiga waxay aqoonsan doonaan inay u qoraan nuqullada ka hor inta aan natiijo wanaagsan loogu celin macmiilka ku xidhan. Ilaa dabcan aad beddesho goobta synchronous_commit mar kale. Waxaad ka tagi kartaa qayb SESSION amarka sababtoo ah waxay ku jiri doontaa qiimaha caadiga ah.

Habka labaad waxa uu wanaagsan yahay marka aad rabto in aad hubiso in aad hesho ku celcelin isku mid ah hal macaamil ganacsi. Xog ururin badan oo jiilka NoSQL fikradda wax kala iibsiga ma jiraan, laakiin waxay ku dhex jirtaa PostgreSQL. Xaaladdan oo kale waxaad bilaabaysaa macaamil ganacsi ka dibna dejiso synchronous_commit Π² on ka hor inta aan la fulin gelitaanka macaamil ganacsi. COMMIT waxay samayn doontaa macaamil ganacsi iyadoo la isticmaalayo qiime kasta oo cabbir ah synchronous_commit, kaas oo la dejiyay wakhtigaas, in kasta oo ay fiican tahay in hore loo dhigo doorsoomayaasha si loo hubiyo in horumariyayaasha kale ay fahmaan in wax-qorayaashu aanay isku mid ahayn.

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

Dhammaan wax kala beddelashada hadda waxa loo xaqiijin doonaa sidii loogu qoray nuqullo ka hor inta aanay xog-ururinta ku soo celin jawaab-celin togan macmiilka ku xidhan.

Dejinta PostgreSQL

Taas ka hor, waxaan ku qiyaasnay ​​nidaamka PostgreSQL oo leh synchronous_commit, lagu rakibay local. Si aad tan uga dhigto mid macquul ah dhinaca server-ka, waxaad u baahan doontaa inaad dejiso laba ikhtiyaar oo qaabeynta server-ka. Halbeeg dheeri ah synchronous_standby_names soo geli doona keeda goorma synchronous_commit ku jiri doonaa on. Waxay go'aaminaysaa nuqullada u qalma fal-dambiyeedka isku midka ah, waananu dejin doonnaa *, taas oo macnaheedu yahay in dhammaan nuqullada ay ku lug leeyihiin. Qiimayaashan waxaa badanaa lagu habeeyaa gudaha faylka qaabeynta isagoo ku daray:

synchronous_commit = local  
synchronous_standby_names='*'

Adiga oo dejinaya cabbirka synchronous_commit macno ahaan local, Waxaan abuurnaa nidaam ay saxannada maxalliga ahi ay isku mid ahaanayaan, laakiin nuqul ka mid ah shabakadaha ayaa si toos ah u asynchronous ah. Ilaa, dabcan, aan go'aansanno inaan ka dhigno falalkan kuwo isku mid ah, sida kor ku cad.

Hadii aad la socon jirtay horumarka Mashruuca gudoomiyaha, waxaa laga yaabaa inaad dareentay isbedelada dhow (1, 2), taasoo u ogolaatay isticmaalayaasha Guddoomiyaha inay tijaabiyaan cabbirradan oo ay la socdaan joogtayntooda.

Dhowr eray oo kale...

Toddobaad ka hor, waxaan kuu sheegi lahaa inaanay suurtogal ahayn in si fiican loo hagaajiyo PostgreSQL. Taasi waa markii Kurt, oo xubin ka ah kooxda madal Compose, uu ku adkaystay inay jirto fursad noocaas ah. Wuu qaboojiyay diidmadaydii wuxuuna ka helay dukumeenti PostgreSQL soo socda:

PostgreSQL iyo habaynta qorista gaarka ah ee isku xidhka

Goobtan waa la bedeli karaa wakhti kasta. Dabeecada wax kala iibsi kasta waxa lagu go'aamiyaa goobta la dhaqan galiyay wakhtiga la samaynayo. Sidaa darteed, waxaa suurtogal ah oo faa'iido leh in macaamil ganacsiyada qaarkood ay u sameeyaan si isku mid ah iyo kuwa kale si aan isku mid ahayn. Tusaale ahaan, in lagu qasbo mid multistatement wax kala iibsiga si ay u sameeyaan asynchronously marka qiimaha caadiga ah ee parameter ka soo horjeeda, dhigay SET LOCAL synchronous_commit TO OFF macaamil ganacsi.

Wax ka beddelkan yar ee faylka qaabeynta, waxaanu siinay isticmaaleyaasha xakamaynta joogtaynta iyo waxqabadkooda.

Source: www.habr.com

Add a comment