PostgreSQL agus roghainnean cunbhalachd sgrìobhaidh sònraichte airson ceangal

Chaidh eadar-theangachadh an artaigil ullachadh gu sònraichte airson oileanaich a’ chùrsa "Stòr-dàta". A bheil ùidh agad ann an leasachadh a thaobh seo? Tha sinn a’ toirt cuireadh dhut Latha Fosgailte, far am bi sinn a’ bruidhinn gu mionaideach mun phrògram, feartan an cruth air-loidhne, comasan agus cothroman dreuchdail a tha a’ feitheamh ri ceumnaichean às deidh trèanadh.

PostgreSQL agus roghainnean cunbhalachd sgrìobhaidh sònraichte airson ceangal

PostgreSQL agus roghainnean cunbhalachd sgrìobhaidh sònraichte airson ceangal
Aig Compose, bidh sinn a’ dèiligeadh ri mòran stòran-dàta, a bheir dhuinn cothrom a bhith nas eòlaiche air an comas-gnìomh agus na h-uireasbhaidhean aca. Mar a bhios sinn ag ionnsachadh a bhith dèidheil air feartan stòran-dàta ùra, bidh sinn uaireannan a’ tòiseachadh a’ smaoineachadh dè cho math ‘s a bhiodh e nam biodh feartan coltach ris an làthair anns na h-innealan nas aibidh leis a bheil sinn air a bhith ag obair airson ùine mhòr. B ’e aon de na feartan ùra a bha mi airson fhaicinn ann am PostgreSQL cunbhalachd sgrìobhaidh gach ceangal thairis air a’ bhuidheann gu lèir. Agus mar a thionndaidh e, tha e againn mu thràth, agus an-diugh tha sinn airson fiosrachadh a roinn leat air mar as urrainn dhut a chleachdadh.

Carson a tha feum agam air?

Tha mar a bu chòir don bhuidheann a bhith gad ghiùlan fhèin an urra ris an tagradh agad. Gabh, mar eisimpleir, app pàighidh bile. Bidh feum agad air cunbhalachd XNUMX% thairis air a’ bhuidheann, agus mar sin feumaidh tu geallaidhean sioncronaich a chomasachadh gus am bi an stòr-dàta agad a’ feitheamh gus an tèid gach atharrachadh a dhèanamh. Ach, mas e lìonra sòisealta a tha a’ fàs gu luath a tha san tagradh agad, is dòcha gum b’ fheàrr leat freagairt luath thairis air cunbhalachd XNUMX%. Gus seo a choileanadh, faodaidh tu geallaidhean asyncronach a chleachdadh anns a’ bhuidheann agad.

Coinnich ri co-rèiteachadh

Feumaidh tu malairt a dhèanamh eadar cunbhalachd dàta agus coileanadh. Bidh PostgreSQL a’ gluasad air falbh bho sheasmhachd leis gu bheil an rèiteachadh bunaiteach an uairsin ro-innseach agus às aonais iongnadh ris nach robh dùil. A-nis leig dhuinn sùil a thoirt air na co-rèiteachaidhean.

Malairt 1: Coileanadh

Mura h-eil feum aig cruinneachadh PostgreSQL air cunbhalachd, faodaidh e ruith gu neo-chinnteach. Tha an sgrìobhadh air a dhèanamh gu stiùiriche a’ chnuasachd, agus thèid ùrachaidhean a chuir gu na mac-samhail aca beagan mhilleanan diog às deidh sin. Nuair a dh ’fheumas cruinneachadh PostgreSQL cunbhalachd, feumaidh e ruith gu sioncronaich. Thèid an sgrìobhadh a dhèanamh gu stiùiriche na buidhne, a chuireas fios às ùr gu na h-ath-ghinean agus a dh’ fheitheamh ri dearbhadh gu bheil gach fear air sgrìobhadh mus cuir iad dearbhadh chun neach-dèiligidh a thòisich an sgrìobhadh gu robh e soirbheachail. Is e an eadar-dhealachadh practaigeach eadar na dòighean-obrach sin gu bheil feum aig an dòigh asyncronach air dà hop lìonra, agus feumaidh an dòigh sioncronaich ceithir.

Malairt 2: Co-chòrdadh

Bidh an toradh ma dh’ fhàillig stiùiriche anns an dà dhòigh-obrach seo eadar-dhealaichte cuideachd. Ma thèid an obair a dhèanamh gu neo-chunbhalach, an uairsin ma thachras mearachd mar sin, cha tèid a h-uile clàr a dhèanamh leis na mac-samhail. Dè an ìre a thèid a chall? Tha e an urra ris an tagradh fhèin agus èifeachdas ath-riochdachadh. Cuiridh ath-riochdachadh sgrìobhte casg air mac-samhail bho bhith na stiùiriche ma tha an ìre de dh'fhiosrachadh a tha ann 1 MB nas lugha na anns an stiùiriche, is e sin, dh’ fhaodadh suas ri 1 MB de chlàran a bhith air an call aig àm obrachaidh asyncronach.

Chan eil seo a’ tachairt ann am modh sioncronaich. Ma dh’ fhailicheas an ceannard, thèid a h-uile mac-samhail ùrachadh, oir feumar sgrìobhadh sam bith a chaidh a dhearbhadh mun stiùiriche a dhearbhadh air na mac-samhail. Is e seo cunbhalachd.

Tha giùlan sioncronaich a’ dèanamh ciall ann an tagradh bileachaidh far a bheil buannachd shoilleir aig cunbhalachd anns a’ mhalairt eadar cunbhalachd agus coileanadh. Is e an rud as cudromaiche airson tagradh mar sin dàta dligheach. A-nis smaoinich air lìonra sòisealta anns a bheil am prìomh obair a 'cumail aire an neach-cleachdaidh le bhith a' freagairt iarrtasan cho luath 'sa ghabhas. Anns a’ chùis seo, bidh coileanadh le nas lugha de hopan lìonra agus nas lugha de dh’fheitheamh airson geallaidhean na phrìomhachas. Ach, chan e an malairt eadar coileanadh agus cunbhalachd an aon fhear air am feum thu smaoineachadh.

Malairt dheth 3: Tubaistean

Tha e glè chudromach tuigsinn mar a bhios buidheann gan giùlan fhèin nuair a tha fàilligeadh ann. Beachdaich air suidheachadh far a bheil mac-samhail no barrachd a’ fàiligeadh. Nuair a thèid geallaidhean a phròiseasadh gu neo-chunbhalach, cumaidh an stiùiriche ag obair, is e sin, gabhail ris agus pròiseas a’ sgrìobhadh, gun a bhith a’ feitheamh ri mac-samhail a tha a dhìth. Nuair a thilleas na mac-samhail dhan bhuidheann, glacaidh iad suas leis an stiùiriche. Le ath-riochdachadh sioncronaich, mura freagair na mac-samhail, cha bhi roghainn aig an stiùiriche agus cumaidh e orra a’ feitheamh ri dearbhadh gus an till am mac-samhail don bhuidheann agus gun urrainn dhaibh gabhail ris agus gealltainn an sgrìobhadh.

Aon cheangal gach gnothach?

Feumaidh gach tagradh measgachadh eadar-dhealaichte de sheasmhachd agus coileanadh. Mura h-eil, gu dearbh, is e an app pàighidh bhile againn, a tha sinn a’ smaoineachadh a bhith gu tur cunbhalach, no an app lìonra sòisealta againn a tha cha mhòr fad na h-ùine. Anns a h-uile cùis eile, bidh amannan ann nuair a dh’ fheumas cuid de dh’ obrachaidhean a bhith sioncronaich agus cuid a bhith asyncronach. Is dòcha nach eil thu airson gum fuirich an siostam gus an tèid teachdaireachd a chuir chun chat a ghealltainn, ach ma thèid pàigheadh ​​​​a phròiseasadh san aon iarrtas, feumaidh tu feitheamh.

Tha na co-dhùnaidhean sin uile, gu dearbh, air an dèanamh le leasaiche an tagraidh. Cuidichidh a bhith a’ dèanamh nan co-dhùnaidhean ceart a thaobh cuin a chleachdas tu gach dòigh thu thu a’ faighinn a’ chuid as fheàrr às do bhuidheann. Tha e cudromach gun urrainn don leasaiche gluasad eatorra aig ìre SQL airson ceanglaichean agus airson gnothaichean.

Dèanamh cinnteach à smachd ann an cleachdadh

Gu gnàthach, tha PostgreSQL a’ toirt seachad cunbhalachd. Tha seo fo smachd paramadair an fhrithealaiche synchronous_commit. Gu gnàthach tha e ann an suidheachadh on, ach tha trì roghainnean eile ann: local, remote_write no off.

Nuair a bhios tu a 'suidheachadh am paramadair gu off tha stad air a h-uile gealltanas sioncronaich, eadhon air an t-siostam ionadail. Tha am paramadair ionadail a’ sònrachadh modh sioncronaich airson an t-siostam ionadail, ach bidh e a’ sgrìobhadh gu mac-samhail air an coileanadh gu neo-chinnteach. Remote_write a’ dol nas fhaide buileach: bidh sgrìobhaidhean gu mac-samhail air an dèanamh gu h-annasach, ach air an tilleadh nuair a tha am mac-samhail air gabhail ris an sgrìobhadh ach nach eil e air a sgrìobhadh gu diosc.

Le bhith a’ beachdachadh air an raon de roghainnean a tha rim faighinn, bidh sinn a’ taghadh giùlan agus, a’ cumail sin nar cuimhne on - tha iad sin nan clàran sioncronaich, taghaidh sinn local airson geallaidhean asyncronach thairis air an lìonra, fhad ‘s a tha iad a’ fàgail geallaidhean ionadail sioncronaich.

A-nis, innsidh sinn dhut mar a chuireas tu seo air dòigh ann an tiota, ach smaoinich gun do shuidhich sinn synchronous_commit в local airson an fhrithealaiche. Bha sinn a’ faighneachd an robh e comasach am paramadair atharrachadh synchronous_commit air an itealan, agus thionndaidh e a-mach nach e a-mhàin gu bheil e comasach, gu bheil eadhon dà dhòigh air seo a dhèanamh. Is e a’ chiad fhear seisean a’ cheangail agad a shuidheachadh mar a leanas:

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

Aithnichidh a h-uile sgrìobhadh às deidh sin san t-seisean sgrìobhadh gu na mac-samhail mus till e toradh adhartach chun neach-dèiligidh ceangailte. Mura h-atharraich thu an suidheachadh gu dearbh synchronous_commit a-rithist. Faodaidh tu pàirt dheth fhàgail SESSION san àithne oir bidh e san luach bunaiteach.

Tha an dàrna dòigh math nuair a tha thu dìreach airson dèanamh cinnteach gum faigh thu ath-riochdachadh sioncronaich airson aon ghnothach. Ann am mòran de stòran-dàta ginealach NoSQL chan eil bun-bheachd ghnothaichean ann, ach tha e ann am PostgreSQL. Anns a 'chùis seo, bidh thu a' tòiseachadh air malairt agus an uairsin air a shuidheachadh synchronous_commit в on mus cuir thu a-steach an inntrig airson a’ ghnothaich. COMMIT geallaidh e an gnothach a’ cleachdadh luach paramadair sam bith synchronous_commit, a chaidh a shuidheachadh aig an àm, ged a tha e nas fheàrr an caochladair a shuidheachadh ro-làimh gus dèanamh cinnteach gu bheil luchd-leasachaidh eile a’ tuigsinn nach eil sgrìobhaidhean asyncronach.

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

Thèid a h-uile gealltanas malairt a dhearbhadh a-nis mar a chaidh a sgrìobhadh gu mac-samhail mus till an stòr-dàta freagairt dheimhinneach don neach-dèiligidh ceangailte.

A’ stèidheachadh PostgreSQL

Roimhe seo, smaoinich sinn air siostam PostgreSQL le synchronous_commit, air a chuir a-steach local. Gus seo a dhèanamh reusanta air taobh an fhrithealaiche, feumaidh tu dà roghainn rèiteachadh frithealaiche a shuidheachadh. Aon paramadair eile synchronous_standby_names thig e steach d'a fein an uair synchronous_commit bidh a-staigh on. Bidh e a’ dearbhadh dè na mac-samhail a tha airidh air geallaidhean sioncronaich, agus suidhichidh sinn e *, a bhios a 'ciallachadh gu bheil a h-uile mac-samhail an sàs. Tha na luachan sin mar as trice air an rèiteachadh ann an faidhle rèiteachaidh le bhith a’ cur ris:

synchronous_commit = local  
synchronous_standby_names='*'

Le bhith a 'suidheachadh am paramadair synchronous_commit ann an ciall local, bidh sinn a’ cruthachadh siostam far a bheil diosgan ionadail fhathast sioncronaich, ach tha mac-samhail lìonra a’ gealltainn a bhith neo-chinnteach gu bunaiteach. Mura co-dhùin sinn, gu dearbh, na geallaidhean sin a dhèanamh sioncronaich, mar a chithear gu h-àrd.

Ma tha thu air a bhith a’ leantainn an leasachaidh Pròiseact riaghladair, is dòcha gu bheil thu air mothachadh a dhèanamh air atharrachaidhean o chionn ghoirid (1, 2), a leig le luchd-cleachdaidh an Riaghladair na crìochan sin a dhearbhadh agus sùil a chumail air an cunbhalachd.

Beagan fhaclan eile ...

Dìreach seachdain air ais, bhithinn air innse dhut gu bheil e do-dhèanta PostgreSQL a ghleusadh cho grinn. Sin nuair a dh’ iarr Kurt, ball de sgioba àrd-ùrlar Compose, gu robh an leithid de chothrom ann. Shocraich e na gearanan agam agus lorg e ann an sgrìobhainnean PostgreSQL na leanas:

PostgreSQL agus roghainnean cunbhalachd sgrìobhaidh sònraichte airson ceangal

Faodar an suidheachadh seo atharrachadh aig àm sam bith. Tha an giùlan airson malairt sam bith air a dhearbhadh leis an t-suidheachadh a tha èifeachdach aig àm gealltanas. Mar sin, tha e comasach agus feumail do chuid de ghnothaichean gealltainn gu sioncronaich agus do chuid eile asyncronach. Mar eisimpleir, gus aon a sparradh multistatement malairt ri dhèanamh a’ gealltainn gu neo-chunbhalach nuair a tha luach bunaiteach a’ pharamadair mu choinneamh, suidhichte SET LOCAL synchronous_commit TO OFF ann an malairt.

Leis an atharrachadh beag seo air an fhaidhle rèiteachaidh, thug sinn smachd do luchd-cleachdaidh air an cunbhalachd agus an coileanadh.

Source: www.habr.com

Cuir beachd ann