An shirya fassarar labarin musamman ga ɗaliban kwas ɗin
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
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
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
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