PostgreSQL da ƙayyadaddun saitunan daidaitawa na rubutu

An shirya fassarar labarin musamman ga ɗaliban kwas ɗin "Database". Kuna sha'awar haɓaka ta wannan hanyar? Muna gayyatar ku zuwa Ranar Budewa, Inda muke magana daki-daki game da shirin, fasali na tsarin kan layi, cancanta da kuma tsammanin aiki waɗanda ke jiran masu digiri bayan horo.

PostgreSQL da ƙayyadaddun saitunan daidaitawa na rubutu

PostgreSQL da ƙayyadaddun saitunan daidaitawa na rubutu
A Rubuce-rubucen, muna mu'amala da ma'ajin bayanai da yawa, waɗanda ke ba mu damar sanin ayyukansu da gazawarsu. Yayin da muke koyon son fasalulluka na sabbin bayanan bayanai, wani lokaci mukan fara tunanin yadda zai yi kyau idan akwai irin wannan fasali a cikin manyan kayan aikin da muka daɗe muna aiki da su. Ɗaya daga cikin sababbin abubuwan da nake so in gani a cikin PostgreSQL shine daidaitacce rubuta daidaito ta hanyar haɗi a cikin dukan tari. Kuma kamar yadda ya bayyana, muna da shi, kuma a yau muna so mu raba tare da ku bayani game da yadda za ku iya amfani da shi.

Me yasa nake bukata?

Yadda ya kamata gungu ya kasance ya dogara da aikace-aikacen ku. Ɗauki, misali, ƙa'idar biyan kuɗi. Kuna buƙatar daidaito XNUMX% a cikin gungu, don haka dole ne ku kunna ayyukan aiki tare ta yadda bayananku ya jira a yi duk canje-canje. Koyaya, idan aikace-aikacen ku cibiyar sadarwar zamantakewa ce mai saurin girma, to tabbas za ku fi son amsa cikin sauri sama da daidaiton XNUMX%. Don cimma wannan, zaku iya amfani da ayyukan asynchronous a cikin tarin ku.

Haɗu da sulhu

Dole ne ku yi ciniki tsakanin daidaiton bayanai da aiki. PostgreSQL yana motsawa daga daidaito saboda tsarin tsoho yana iya tsinkaya kuma ba tare da abubuwan mamaki ba. Yanzu bari mu dubi sasantawa.

Ciniki 1: Aiki

Idan gungu na PostgreSQL baya buƙatar daidaito, yana iya aiki asynchronously. Ana rubutawa ga shugaban tari, kuma za a aika sabuntawa zuwa kwafinsa bayan 'yan millisecons kaɗan. Lokacin da tarin PostgreSQL yana buƙatar daidaito, dole ne ya yi aiki tare. Za a yi rubutun ga shugaban gungu, wanda zai aika sabuntawa zuwa kwafin kuma jira tabbatarwa cewa kowannensu ya rubuta kafin aika tabbaci ga abokin ciniki wanda ya fara rubuta cewa ya yi nasara. Bambanci mai amfani tsakanin waɗannan hanyoyin shine hanyar asynchronous tana buƙatar hops na cibiyar sadarwa guda biyu, yayin da hanyar daidaitawa tana buƙatar huɗu.

Ciniki 2: daidaito

Sakamakon gazawar jagora a cikin wadannan hanyoyi guda biyu kuma zai bambanta. Idan an yi aikin asynchronously, to, idan irin wannan kuskuren ya faru, ba duk bayanan za a yi ta kwafi ba. Nawa ne za a yi asara? Ya dogara da aikace-aikacen kanta da ingancin kwafi. Rubuta kwafin zai hana kwafi daga zama jagora idan adadin bayanan da ke cikinsa bai kai 1 MB kasa da na jagora ba, wato, har zuwa 1 MB na bayanan za a iya yin hasarar a lokacin aiki na asynchronous.

Wannan baya faruwa a yanayin aiki tare. Idan jagora ya gaza, ana sabunta duk kwafi, tunda duk wani rubutu da aka tabbatar akan jagora dole ne a tabbatar da shi akan kwafin. Wannan daidaito ne.

Halin aiki tare yana da ma'ana a aikace-aikacen lissafin kuɗi inda daidaito yana da fa'ida bayyananne a cikin cinikin tsakanin daidaito da aiki. Abu mafi mahimmanci ga irin wannan aikace-aikacen shine ingantaccen bayanai. Yanzu tunani game da hanyar sadarwar zamantakewa wanda babban aikin shine kiyaye hankalin mai amfani ta hanyar amsa buƙatun da sauri. A wannan yanayin, yin aiki tare da ƙananan hops na cibiyar sadarwa da ƙarancin jira don ƙaddamarwa zai zama fifiko. Duk da haka, cinikin tsakanin aiki da daidaito ba shine kawai abin da za ku yi tunani akai ba.

Ciniki na 3: Haɗuwa

Yana da matukar muhimmanci a fahimci yadda tari ke aiki yayin gazawar. Yi la'akari da yanayin da ɗaya ko fiye da kwafi ya kasa. Lokacin da aka aiwatar da ayyukan asynchronously, jagora zai ci gaba da aiki, wato karba da aiwatarwa yana rubutawa, ba tare da jiran kwafin da ya ɓace ba. Lokacin da kwafi suka koma gungu, sai su kama shugaban. Tare da kwafin aiki tare, idan kwafin bai amsa ba, to jagora ba zai da wani zaɓi kuma zai ci gaba da jira don tabbatarwa har sai kwafin ya dawo gungu kuma zai iya karɓa ya rubuta.

Haɗi ɗaya a kowace ciniki?

Kowane aikace-aikacen yana buƙatar nau'in nau'in haɗuwa daban-daban na daidaito da aiki. Sai dai idan, ba shakka, app ɗinmu ne mai biyan lissafin, wanda muke tunanin zai zama daidai, ko kuma kusan ƙa'idar sadarwar zamantakewar mu. A duk sauran lokuta, za a sami lokacin da wasu ayyuka dole ne su kasance tare da juna wasu kuma su kasance asynchronous. Wataƙila ba za ku so tsarin ya jira har sai an ƙaddamar da saƙon da aka aika zuwa tattaunawar ba, amma idan an aiwatar da biyan kuɗi a cikin aikace-aikacen guda ɗaya, to dole ku jira.

Duk waɗannan yanke shawara, ba shakka, masu haɓaka aikace-aikacen ne suka yanke su. Yin yanke shawara mai kyau game da lokacin amfani da kowace hanya zai taimaka muku samun mafi kyawun tarin ku. Yana da mahimmanci cewa mai haɓakawa zai iya canzawa tsakanin su a matakin SQL don haɗi da ma'amaloli.

Tabbatar da sarrafawa a aikace

Ta hanyar tsoho, PostgreSQL yana ba da daidaito. Ana sarrafa wannan ta hanyar sigar uwar garken synchronous_commit. Ta hanyar tsoho yana cikin matsayi on, amma yana da wasu zaɓuɓɓuka guda uku: local, remote_write ko off.

Lokacin saita siga zuwa off Ana dakatar da duk ayyukan daidaitawa, har ma da tsarin gida. Ma'auni na gida yana ƙayyadaddun yanayin aiki tare don tsarin gida, amma rubuta zuwa kwafi ana yin su a daidaita. Remote_write ya ci gaba da gaba: ya rubuta zuwa kwafi ana yin su a daidaita, amma ana mayar da su lokacin da kwafin ya karɓi rubutun amma bai rubuta shi a faifai ba.

Ta yin la'akari da kewayon zaɓuɓɓukan da ke akwai, za mu zaɓi ɗabi'a kuma, la'akari da hakan on – Waɗannan rikodi ne na aiki tare, za mu zaɓa local don aikata asynchronous akan hanyar sadarwa, yayin barin gida yana yin aiki tare.

Yanzu, za mu gaya muku yadda ake saita wannan a cikin ɗan lokaci, amma ku yi tunanin cewa mun saita synchronous_commit в local don uwar garken. Mun yi mamaki ko zai yiwu a canza siga synchronous_commit a kan gardama, kuma ya juya cewa ba kawai zai yiwu ba, akwai ma hanyoyi guda biyu don yin wannan. Na farko shine saita zaman haɗin gwiwar ku kamar haka:

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

Duk rubuce-rubucen da ke gaba a cikin zaman za su amince da rubutawa zuwa kwafi kafin a mayar da kyakkyawan sakamako ga abokin ciniki da aka haɗa. Sai dai idan ba shakka kun canza saitin synchronous_commit sake. Kuna iya barin sashi SESSION a cikin umarnin saboda zai kasance a cikin ƙimar tsoho.

Hanya ta biyu tana da kyau lokacin da kawai kake son tabbatar da samun kwafin aiki tare don ma'amala ɗaya. A yawancin bayanan ƙarni na NoSQL manufar ma'amala ba ta wanzu, amma tana cikin PostgreSQL. A wannan yanayin kun fara ciniki sannan ku saita synchronous_commit в on kafin aiwatar da shigarwa don ma'amala. COMMIT zai yi ma'amala ta amfani da kowace siga synchronous_commit, wanda aka saita a lokacin, ko da yake yana da kyau a saita masu canji a gaba don tabbatar da cewa sauran masu haɓakawa sun fahimci cewa rubutun ba asynchronous ba ne.

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

Yanzu za a tabbatar da duk ayyukan ma'amala kamar yadda aka rubuta zuwa kwafi kafin bayanan bayanan ya dawo da kyakkyawar amsa ga abokin ciniki da aka haɗa.

Saita PostgreSQL

Kafin wannan, mun yi tunanin tsarin PostgreSQL tare da synchronous_commit, shigar a ciki local. Don tabbatar da wannan haƙiƙa a gefen uwar garken, kuna buƙatar saita zaɓuɓɓukan daidaitawar uwar garken guda biyu. Karin siga guda synchronous_standby_names zai shigo cikin nasa lokacin synchronous_commit zai kasance on. Yana ƙayyade waɗanne kwafitocin ne suka cancanci aikata ayyukan aiki tare, kuma za mu saita shi zuwa *, wanda ke nufin cewa duk kwafi suna da hannu. Waɗannan ƙimar yawanci ana saita su a ciki fayil ɗin sanyi ta hanyar ƙara:

synchronous_commit = local  
synchronous_standby_names='*'

Ta hanyar saita siga synchronous_commit cikin ma'ana local, mun ƙirƙiri tsarin inda diski na gida ya kasance suna aiki tare, amma kwafin hanyar sadarwa ba su da alaƙa ta tsohuwa. Sai dai idan, ba shakka, mun yanke shawarar sanya waɗannan ayyukan su yi aiki tare, kamar yadda aka nuna a sama.

Idan kun kasance kuna bin ci gaban Gwamna aikin, mai yiwuwa kun lura da wasu canje-canje na kwanan nan (1, 2), wanda ya ba masu amfani da Gwamna damar gwada waɗannan sigogi da kuma lura da daidaito.

Karin wasu kalmomi...

Mako guda da ya gabata, da na gaya muku cewa ba shi yiwuwa a daidaita PostgreSQL da kyau sosai. Wannan shine lokacin da Kurt, memba na ƙungiyar dandali na Compose, ya nace cewa irin wannan dama ta wanzu. Ya kwantar da hankalina kuma ya samo a cikin takardun PostgreSQL mai zuwa:

PostgreSQL da ƙayyadaddun saitunan daidaitawa na rubutu

Ana iya canza wannan saitin a kowane lokaci. Halayyar kowane ma'amala an ƙaddara ta wurin saitin da ke aiki a lokacin aikatawa. Don haka, yana yiwuwa kuma yana da amfani ga wasu ma'amaloli su yi aiki tare da wasu kuma ba tare da ɓata lokaci ba. Misali, don tilasta daya multistatement ma'amala don yin yana aikata asynchronously lokacin da tsohuwar ƙimar siga ta saba, saita SET LOCAL synchronous_commit TO OFF a cikin ciniki.

Tare da wannan ƙaramin gyare-gyare ga fayil ɗin sanyi, mun ba masu amfani iko akan daidaito da aikin su.

source: www.habr.com

Add a comment