Itumọ nkan naa ti pese ni pataki fun awọn ọmọ ile-iwe ti iṣẹ-ẹkọ naa . Ṣe o nifẹ si idagbasoke ni itọsọna yii? A pe o lati , nibiti a ti sọrọ ni awọn alaye nipa eto naa, awọn ẹya ti ọna kika ori ayelujara, awọn agbara ati awọn ireti iṣẹ ti o duro de awọn ọmọ ile-iwe giga lẹhin ikẹkọ.

PostgreSQL ati asopọ-pato kikọ awọn eto aitasera
Ni Compose, a ṣe pẹlu ọpọlọpọ awọn apoti isura data, eyiti o fun wa ni aye lati ni imọ siwaju sii pẹlu iṣẹ ṣiṣe ati awọn ailagbara wọn. Bi a ṣe kọ ẹkọ lati nifẹ awọn ẹya ti awọn apoti isura infomesonu tuntun, nigbami a bẹrẹ lati ronu bawo ni yoo ṣe dara ti awọn ẹya kanna ba wa ninu awọn irinṣẹ ogbo diẹ sii ti a ti n ṣiṣẹ pẹlu igba pipẹ. Ọkan ninu awọn ẹya tuntun ti Mo fẹ lati rii ni PostgreSQL jẹ atunto kikọ aitasera fun asopọ kọja gbogbo iṣupọ. Ati bi o ti wa ni jade, a ti ni tẹlẹ, ati loni a fẹ lati pin pẹlu rẹ alaye lori bi o ṣe le lo.
Kini idi ti MO nilo rẹ?
Bii iṣupọ yẹ ki o huwa da lori ohun elo rẹ. Mu, fun apẹẹrẹ, ohun elo isanwo owo kan. Iwọ yoo nilo aitasera 100% kọja iṣupọ naa, nitorinaa o ni lati mu awọn iṣẹ amuṣiṣẹpọ ṣiṣẹ ki data data rẹ duro de gbogbo awọn ayipada lati ṣee. Bibẹẹkọ, ti ohun elo rẹ ba jẹ nẹtiwọọki awujọ ti n dagba ni iyara, lẹhinna o ṣee ṣe yoo fẹran idahun iyara ju aitasera 100%. Lati ṣaṣeyọri eyi, o le lo awọn adehun asynchronous ninu iṣupọ rẹ.
Pade adehun
O ni lati ṣe awọn iṣowo laarin aitasera data ati iṣẹ ṣiṣe. PostgreSQL n lọ kuro ni aitasera nitori iṣeto aiyipada lẹhinna jẹ asọtẹlẹ ati laisi awọn iyanilẹnu airotẹlẹ. Bayi jẹ ki ká wo ni compromises.
Tradeoff 1: išẹ
Ti iṣupọ PostgreSQL ko nilo aitasera, o le ṣiṣẹ ni asynchronously. A kọ iwe naa si adari iṣupọ, ati pe awọn imudojuiwọn yoo firanṣẹ si awọn ẹda rẹ ni awọn milliseconds diẹ lẹhinna. Nigba ti iṣupọ PostgreSQL kan nilo aitasera, o gbọdọ ṣiṣẹ ni amuṣiṣẹpọ. Ikọwe naa yoo ṣee ṣe si oludari iṣupọ, eyiti yoo fi imudojuiwọn ranṣẹ si awọn ẹda ati duro fun ijẹrisi ti ọkọọkan ti kọ ṣaaju fifiranṣẹ ijẹrisi si alabara ti o bẹrẹ kikọ pe o ṣaṣeyọri. Iyatọ ti o wulo laarin awọn ọna wọnyi ni pe ọna asynchronous nilo awọn hops nẹtiwọki meji, lakoko ti ọna amuṣiṣẹpọ nilo mẹrin.
Iṣowo 2: Iduroṣinṣin
Abajade ninu iṣẹlẹ ti ikuna olori ni awọn ọna meji wọnyi yoo tun yatọ. Ti iṣẹ naa ba ṣe ni asynchronously, lẹhinna ti iru aṣiṣe kan ba waye, kii ṣe gbogbo awọn igbasilẹ ni yoo ṣe nipasẹ awọn ẹda. Elo ni yoo padanu? Da lori ohun elo funrararẹ ati ṣiṣe ti ẹda. Ṣiṣepọ ẹda yoo ṣe idiwọ ẹda kan lati di adari ti iye alaye ti o wa ninu rẹ ba kere si 1 MB ti oludari, iyẹn ni, to 1 MB ti awọn igbasilẹ le ṣee padanu lakoko iṣẹ asynchronous.
Eyi ko ṣẹlẹ ni ipo amuṣiṣẹpọ. Ti adari ba kuna, gbogbo awọn ẹda ti wa ni imudojuiwọn, niwọn igba ti eyikeyi kikọ timo lori adari gbọdọ jẹrisi lori awọn ẹda. Eleyi jẹ aitasera.
Iwa amuṣiṣẹpọ jẹ oye ni ohun elo ìdíyelé nibiti aitasera ni anfani ti o han gbangba ninu iṣowo-pipa laarin aitasera ati iṣẹ. Ohun pataki julọ fun iru ohun elo jẹ data to wulo. Bayi ronu nipa nẹtiwọọki awujọ kan ninu eyiti iṣẹ akọkọ ni lati tọju akiyesi olumulo nipa didahun si awọn ibeere ni yarayara bi o ti ṣee. Ni ọran yii, iṣẹ ṣiṣe pẹlu awọn hops nẹtiwọọki diẹ ati idaduro diẹ fun awọn iṣẹ yoo jẹ pataki. Sibẹsibẹ, iṣowo laarin iṣẹ ati aitasera kii ṣe ọkan nikan ti o ni lati ronu nipa.
Iṣowo-pipa 3: Awọn ipadanu
O ṣe pataki pupọ lati ni oye bii iṣupọ kan ṣe huwa lakoko ikuna. Wo ipo kan nibiti ọkan tabi diẹ ẹ sii awọn ẹda ti kuna. Nigbati awọn iṣẹ ṣiṣe ba ṣiṣẹ ni asynchronously, adari yoo tẹsiwaju lati ṣiṣẹ, iyẹn ni, gba ati ilana kikọ, laisi iduro fun awọn ẹda ti o padanu. Nigbati awọn ẹda ba pada si iṣupọ, wọn wa pẹlu olori. Pẹlu atunwi amuṣiṣẹpọ, ti awọn ẹda ko ba dahun, lẹhinna adari kii yoo ni yiyan ati pe yoo tẹsiwaju lati duro fun ijẹrisi ifẹsẹmulẹ titi ajọra yoo pada si iṣupọ ati pe o le gba ati kọ kikọ naa.
Ọkan asopọ fun idunadura?
Gbogbo ohun elo nilo oriṣiriṣi oriṣi apapo ti aitasera ati iṣẹ. Ayafi, nitorinaa, o jẹ ohun elo isanwo-owo wa, eyiti a ro pe o wa ni ibamu patapata, tabi ohun elo Nẹtiwọọki awujọ ti o fẹrẹẹ jẹ aipe. Ni gbogbo awọn ọran miiran, awọn akoko yoo wa nigbati diẹ ninu awọn iṣẹ gbọdọ jẹ amuṣiṣẹpọ ati diẹ ninu gbọdọ jẹ asynchronous. O le ma fẹ ki eto naa duro titi ti ifiranṣẹ ti o fi ranṣẹ si iwiregbe yoo jẹ, ṣugbọn ti o ba ti ni ilọsiwaju isanwo ni ohun elo kanna, lẹhinna o ni lati duro.
Gbogbo awọn ipinnu wọnyi, dajudaju, jẹ ṣiṣe nipasẹ olupilẹṣẹ ohun elo. Ṣiṣe awọn ipinnu ti o tọ nipa igba ti o lo ọna kọọkan yoo ṣe iranlọwọ fun ọ lati ni anfani pupọ julọ ninu iṣupọ rẹ. O ṣe pataki ki olupilẹṣẹ le yipada laarin wọn ni ipele SQL fun awọn asopọ ati fun awọn iṣowo.
Aridaju Iṣakoso ni iwa
Nipa aiyipada, PostgreSQL n pese aitasera. Eyi ni iṣakoso nipasẹ paramita olupin synchronous_commit. Nipa aiyipada o wa ni ipo onṣugbọn o ni awọn aṣayan miiran mẹta: local, remote_write tabi off.
Nigbati o ba ṣeto paramita si off gbogbo awọn iṣẹ amuṣiṣẹpọ ti duro, paapaa lori eto agbegbe. Paramita agbegbe n ṣalaye ipo amuṣiṣẹpọ fun eto agbegbe, ṣugbọn kikọ si awọn ẹda a ṣe ni asynchronously. Remote_write lọ paapaa siwaju: kọwe si awọn ẹda ni a ṣe asynchronously, ṣugbọn a pada nigbati ẹda ti gba kikọ ṣugbọn ko kọ si disk.
Nipa considering awọn wa ibiti o ti awọn aṣayan, a yan a ihuwasi ati, fifi ni lokan pe on - iwọnyi jẹ awọn gbigbasilẹ amuṣiṣẹpọ, a yoo yan local fun awọn iṣẹ asynchronous lori nẹtiwọọki, lakoko ti o nlọ awọn iṣẹ amuṣiṣẹpọ agbegbe.
Bayi, a yoo sọ fun ọ bi o ṣe le ṣeto eyi ni iṣẹju kan, ṣugbọn fojuinu pe a ṣeto synchronous_commit в local fun olupin. A ṣe akiyesi boya o ṣee ṣe lati yi paramita naa pada synchronous_commit lori fo, ati pe o wa ni pe ko ṣee ṣe nikan, awọn ọna meji paapaa wa lati ṣe eyi. Ohun akọkọ ni lati ṣeto igba asopọ rẹ gẹgẹbi atẹle:
SET SESSION synchronous_commit TO ON;
// Your writes go hereGbogbo awọn kikọ ti o tẹle ni igba yoo jẹwọ awọn kikọ si awọn ẹda ṣaaju ki o to da abajade rere pada si alabara ti o sopọ. Ayafi ti dajudaju o ba yi eto pada synchronous_commit lẹẹkansi. O le fi apakan silẹ SESSION ninu aṣẹ nitori pe yoo wa ni iye aiyipada.
Ọna keji dara nigbati o kan fẹ lati rii daju pe o gba atunwi amuṣiṣẹpọ fun idunadura kan. Ninu ọpọlọpọ awọn data data iran NoSQL ero ti awọn iṣowo ko si, ṣugbọn o ṣe ni PostgreSQL. Ni idi eyi o bẹrẹ idunadura kan lẹhinna ṣeto synchronous_commit в on ṣaaju ṣiṣe titẹ sii fun idunadura naa. COMMIT yoo ṣe idunadura naa nipa lilo eyikeyi iye paramita synchronous_commit, eyiti a ṣeto ni akoko yẹn, botilẹjẹpe o dara julọ lati ṣeto oniyipada ni iwaju lati rii daju pe awọn olupilẹṣẹ miiran loye pe awọn kikọ kii ṣe asynchronous.
BEGIN;
SET LOCAL synchronous_commit TO ON;
// Your writes go here
COMMIT; Gbogbo awọn adehun iṣowo ni yoo jẹrisi ni bayi bi kikọ si awọn ẹda ṣaaju ki data data da esi rere pada si alabara ti o sopọ.
Ṣiṣeto PostgreSQL
Ṣaaju eyi, a fojuinu eto PostgreSQL pẹlu synchronous_commit, fi sori ẹrọ ni local. Lati jẹ ki eyi jẹ ojulowo ni ẹgbẹ olupin, iwọ yoo nilo lati ṣeto awọn aṣayan iṣeto olupin meji. Ọkan diẹ paramita synchronous_standby_names yoo wa sinu awọn oniwe-ara nigbati synchronous_commit yoo wa ninu on. O pinnu iru awọn ẹda ti o yẹ fun awọn iṣẹ amuṣiṣẹpọ, ati pe a yoo ṣeto si *, eyi ti yoo tunmọ si wipe gbogbo replicas ti wa ni lowo. Awọn iye wọnyi nigbagbogbo ni tunto sinu nipa fifi:
synchronous_commit = local
synchronous_standby_names='*'Nipa ṣeto paramita synchronous_commit sinu itumo local, a ṣẹda eto kan nibiti awọn disiki agbegbe wa ni amuṣiṣẹpọ, ṣugbọn awọn iṣẹ ẹda nẹtiwọọki jẹ aiṣiṣẹpọ nipasẹ aiyipada. Ayafi, nitorinaa, a pinnu lati jẹ ki awọn iṣe wọnyi ṣiṣẹpọ, bi a ṣe han loke.
Ti o ba ti tẹle awọn idagbasoke , o le ti ṣe akiyesi diẹ ninu awọn ayipada aipẹ (, ), eyiti o fun laaye awọn olumulo Gomina lati ṣe idanwo awọn paramita wọnyi ati ṣe atẹle aitasera wọn.
Awọn ọrọ diẹ diẹ sii ...
Ni ọsẹ kan sẹyin, Emi yoo ti sọ fun ọ pe ko ṣee ṣe lati ṣatunṣe PostgreSQL daradara daradara. Iyẹn ni Kurt, ọmọ ẹgbẹ ti ẹgbẹ Syeed Compose, tẹnumọ pe iru aye wa. O tunu awọn atako mi o si rii ninu iwe PostgreSQL :

Eto yii le yipada nigbakugba. Awọn ihuwasi fun eyikeyi idunadura ti wa ni ṣiṣe nipasẹ awọn eto ni ipa ni akoko ti ifaramo. Nitorinaa, o ṣee ṣe ati wulo fun diẹ ninu awọn iṣowo lati ṣe ni iṣọkan ati fun awọn miiran ni asynchronously. Fun apẹẹrẹ, lati fi ipa mu ọkan multistatement idunadura lati ṣe ṣe asynchronously nigbati awọn aiyipada iye ti paramita ni idakeji, ṣeto SET LOCAL synchronous_commit TO OFF ni idunadura.
Pẹlu iyipada kekere yii si faili iṣeto, a fun awọn olumulo ni iṣakoso lori aitasera ati iṣẹ wọn.
orisun: www.habr.com
