PostgreSQL u settings tal-konsistenza tal-kitba speċifiċi għall-konnessjoni

It-traduzzjoni tal-artiklu tħejjiet speċifikament għall-istudenti tal-kors "Database". Interessat li tiżviluppa f'din id-direzzjoni? Nistednuk biex Open Day, fejn nitkellmu fid-dettall dwar il-programm, karatteristiċi tal-format onlajn, kompetenzi u prospetti ta’ karriera li jistennew lill-gradwati wara t-taħriġ.

PostgreSQL u settings tal-konsistenza tal-kitba speċifiċi għall-konnessjoni

PostgreSQL u settings tal-konsistenza tal-kitba speċifiċi għall-konnessjoni
F'Compose, nittrattaw ħafna databases, li tagħtina l-opportunità li nsiru aktar familjari mal-funzjonalità u n-nuqqasijiet tagħhom. Hekk kif nitgħallmu nħobbu l-karatteristiċi ta’ databases ġodda, kultant nibdew naħsbu kemm ikun sabiħ kieku karatteristiċi simili kienu preżenti fl-għodod aktar maturi li ilna naħdmu magħhom għal żmien twil. Waħda mill-karatteristiċi ġodda li ridt nara f'PostgreSQL kienet konsistenza tal-kitba konfigurabbli għal kull konnessjoni madwar il-cluster kollu. U kif jirriżulta, diġà għandna, u llum irridu naqsmu magħkom informazzjoni dwar kif tista 'tużah.

Għaliex għandi bżonnha?

Kif għandu jġib ruħu l-cluster jiddependi fuq l-applikazzjoni tiegħek. Ħu, pereżempju, app għall-ħlas tal-kontijiet. Ikollok bżonn ta' konsistenza ta' XNUMX% madwar il-cluster, u għalhekk ikollok tippermetti kommessi sinkroniċi sabiex id-database tiegħek tistenna li jsiru l-bidliet kollha. Madankollu, jekk l-applikazzjoni tiegħek hija netwerk soċjali li qed jikber b'rata mgħaġġla, allura probabilment tippreferi rispons mgħaġġel fuq konsistenza ta 'XNUMX%. Biex tikseb dan, tista 'tuża impenji asinkroniċi fil-cluster tiegħek.

Iltaqa' mal-kompromess

Int trid tagħmel kompromessi bejn il-konsistenza tad-dejta u l-prestazzjoni. PostgreSQL jitbiegħed mill-konsistenza minħabba li l-konfigurazzjoni default hija mbagħad prevedibbli u mingħajr sorpriżi mhux mistennija. Issa ejja nħarsu lejn il-kompromessi.

Tradeoff 1: Prestazzjoni

Jekk il-cluster PostgreSQL ma jeħtieġx konsistenza, jista' jaħdem b'mod asinkroniku. Il-kitba ssir lill-mexxej tal-cluster, u l-aġġornamenti jintbagħtu lir-repliki tiegħu ftit millisekondi wara. Meta cluster PostgreSQL jeħtieġ konsistenza, għandu jaħdem b'mod sinkroniku. Il-kitba ssir lill-mexxej tal-cluster, li jibgħat aġġornament lir-repliki u jistenna l-konferma li kull wieħed ikun kiteb qabel ma jibgħat konferma lill-klijent li beda l-kitba li rnexxiet. Id-differenza prattika bejn dawn l-approċċi hija li l-metodu asinkroniku jeħtieġ żewġ ħops tan-netwerk, filwaqt li l-metodu sinkroniku jeħtieġ erbgħa.

Tradeoff 2: Konsistenza

Ir-riżultat f'każ ta' falliment tal-mexxej f'dawn iż-żewġ approċċi se jkun differenti wkoll. Jekk ix-xogħol jitwettaq b'mod mhux sinkroniku, allura jekk iseħħ żball bħal dan, mhux ir-rekords kollha jiġu impenjati mir-repliki. Kemm se jintilef? Jiddependi fuq l-applikazzjoni nnifisha u l-effiċjenza tar-replikazzjoni. Ir-replikazzjoni tal-komponimenti tipprevjeni replika milli ssir mexxej jekk l-ammont ta' informazzjoni fiha jkun 1 MB inqas milli fil-mexxej, jiġifieri, sa 1 MB ta' rekords jistgħu potenzjalment jintilfu waqt operazzjoni asinkronika.

Dan ma jseħħx fil-modalità sinkronika. Jekk il-mexxej jonqos, ir-repliki kollha jiġu aġġornati, peress li kull kitba konfermata fuq il-mexxej għandha tkun ikkonfermata fuq ir-repliki. Din hija konsistenza.

Imġieba sinkronika tagħmel sens f'applikazzjoni tal-kontijiet fejn il-konsistenza għandha vantaġġ ċar fil-kompromess bejn il-konsistenza u l-prestazzjoni. L-iktar ħaġa importanti għal applikazzjoni bħal din hija data valida. Issa aħseb dwar netwerk soċjali li fih il-kompitu ewlieni huwa li żżomm l-attenzjoni tal-utent billi twieġeb għat-talbiet kemm jista 'jkun malajr. F'dan il-każ, il-prestazzjoni b'inqas ħops tan-netwerk u inqas stennija għall-kommessi se tkun prijorità. Madankollu, il-kompromess bejn il-prestazzjoni u l-konsistenza mhuwiex l-uniku wieħed li għandek taħseb dwarha.

Kompromess 3: Ħbit

Huwa importanti ħafna li wieħed jifhem kif iġib ruħu cluster waqt falliment. Ikkunsidra sitwazzjoni fejn replika waħda jew aktar ifallu. Meta l-kommessi jiġu pproċessati b'mod asinkroniku, il-mexxej se jkompli jiffunzjona, jiġifieri, jaċċetta u jipproċessa l-kitbiet, mingħajr ma jistenna repliki neqsin. Meta r-repliki jirritornaw lejn il-grupp, ilaħħqu mal-mexxej. B'replikazzjoni sinkronika, jekk ir-repliki ma jirrispondux, allura l-mexxej ma jkollu l-ebda għażla u se jkompli jistenna l-konferma tal-kommit sakemm ir-replika terġa 'lura fil-cluster u tkun tista' taċċetta u tikkommetti l-kitba.

Konnessjoni waħda għal kull tranżazzjoni?

Kull applikazzjoni teħtieġ tip differenti ta 'kombinazzjoni ta' konsistenza u prestazzjoni. Sakemm, ovvjament, ma tkunx l-app tagħna li tħallas il-kontijiet, li nimmaġinaw li tkun konsistenti għal kollox, jew l-app tagħna tan-netwerking soċjali kważi effimeru. Fil-każijiet l-oħra kollha, se jkun hemm żminijiet meta xi operazzjonijiet iridu jkunu sinkroniċi u xi wħud iridu jkunu asinkroniċi. Forsi ma tridx li s-sistema tistenna sakemm jiġi kommess messaġġ mibgħut liċ-chat, iżda jekk ħlas jiġi pproċessat fl-istess applikazzjoni, allura jkollok tistenna.

Dawn id-deċiżjonijiet kollha, ovvjament, isiru mill-iżviluppatur tal-applikazzjoni. It-teħid tad-deċiżjonijiet it-tajba dwar meta tuża kull approċċ jgħinek tikseb l-aħjar mill-cluster tiegħek. Huwa importanti li l-iżviluppatur jista 'jaqleb bejniethom fil-livell SQL għall-konnessjonijiet u għat-tranżazzjonijiet.

L-iżgurar tal-kontroll fil-prattika

B'mod awtomatiku, PostgreSQL jipprovdi konsistenza. Dan huwa kkontrollat ​​mill-parametru tas-server synchronous_commit. B'mod awtomatiku huwa fil-pożizzjoni on, iżda għandha tliet għażliet oħra: local, remote_write jew off.

Meta tissettja l-parametru għal off il-kommits sinkroniċi kollha jitwaqqfu, anke fuq is-sistema lokali. Il-parametru lokali jispeċifika mod sinkroniku għas-sistema lokali, iżda l-kitba fir-repliki titwettaq b'mod asinkroniku. Remote_write imur lil hinn: il-kitba fir-repliki ssir b'mod asinkroniku, iżda jintbagħat lura meta r-replika tkun aċċettat il-kitba iżda ma kitbithiex fuq id-diska.

Billi nikkunsidraw il-firxa disponibbli ta 'għażliet, nagħżlu imġieba u, filwaqt li nżommu f'moħħna li on – dawn huma reġistrazzjonijiet sinkroniċi, aħna se nagħżlu local għal kommessi asinkroniċi fuq in-netwerk, filwaqt li jitħallew kommessi lokali sinkroniċi.

Issa, aħna ser ngħidulek kif twaqqaf dan f'mument, imma immaġina li aħna waqqafna synchronous_commit в local għas-server. Aħna staqsiet jekk kienx possibbli li jinbidel il-parametru synchronous_commit fuq il-fly, u rriżulta li mhux biss huwa possibbli, hemm anke żewġ modi kif tagħmel dan. L-ewwel huwa li tissettja s-sessjoni tal-konnessjoni tiegħek kif ġej:

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

Il-kitbiet sussegwenti kollha fis-sessjoni se jirrikonoxxu l-kitbiet lir-repliki qabel ma jirritornaw riżultat pożittiv lill-klijent konness. Sakemm ovvjament ma tibdel is-setting synchronous_commit mill-ġdid. Tista' tħalli barra parti SESSION fil-kmand għax se jkun fil-valur default.

It-tieni metodu huwa tajjeb meta trid biss tiżgura ruħek li tikseb replikazzjoni sinkronika għal tranżazzjoni waħda. F'ħafna databases tal-ġenerazzjoni NoSQL il-kunċett ta 'tranżazzjonijiet ma jeżistix, iżda jeżisti f'PostgreSQL. F'dan il-każ tibda tranżazzjoni u mbagħad issettja synchronous_commit в on qabel ma tesegwixxi d-dħul għat-tranżazzjoni. COMMIT se tikkommetti t-tranżazzjoni billi tuża kwalunkwe valur tal-parametru synchronous_commit, li kien stabbilit dak iż-żmien, għalkemm huwa aħjar li tissettja l-varjabbli bil-quddiem biex tiżgura li żviluppaturi oħra jifhmu li l-kitbiet mhumiex asinkroniċi.

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

L-impenji kollha tat-tranżazzjonijiet issa se jiġu kkonfermati kif miktuba fir-repliki qabel ma d-database tirritorna rispons pożittiv lill-klijent konness.

Twaqqif ta' PostgreSQL

Qabel dan, immaġinajna sistema PostgreSQL bi synchronous_commit, installat fi local. Biex tagħmel dan realistiku min-naħa tas-server, ser ikollok bżonn tissettja żewġ għażliet ta 'konfigurazzjoni tas-server. Parametru ieħor synchronous_standby_names se jidħol fih meta synchronous_commit se jkun on. Jiddetermina liema repliki huma eliġibbli għal impenji sinkroniċi, u aħna se nissettjawha *, li se jfisser li r-repliki kollha huma involuti. Dawn il-valuri huma ġeneralment ikkonfigurati fi fajl tal-konfigurazzjoni billi żżid:

synchronous_commit = local  
synchronous_standby_names='*'

Billi tistabbilixxi l-parametru synchronous_commit fis-sens local, noħolqu sistema fejn id-diski lokali jibqgħu sinkroniċi, iżda l-kommessi tar-replika tan-netwerk huma asinkroniċi awtomatikament. Sakemm, ovvjament, niddeċiedu li nagħmlu dawn l-impenji sinkroniċi, kif muri hawn fuq.

Jekk ġejt issegwi l-iżvilupp Proġett Gvernatur, jista' jkun li ndunajt xi bidliet riċenti (1, 2), li ppermetta lill-utenti tal-Gvernatur jittestjaw dawn il-parametri u jimmonitorjaw il-konsistenza tagħhom.

Ftit kliem ieħor...

Ġimgħa ilu biss, kont ngħidlek li huwa impossibbli li l-PostgreSQL jiġi rfinat daqshekk fin. Dan meta Kurt, membru tat-tim tal-pjattaforma Compose, insista li teżisti opportunità bħal din. Huwa kkalma l-oġġezzjonijiet tiegħi u sab fid-dokumentazzjoni PostgreSQL dan li ġej:

PostgreSQL u settings tal-konsistenza tal-kitba speċifiċi għall-konnessjoni

Dan is-setting jista' jinbidel fi kwalunkwe ħin. L-imġiba għal kwalunkwe tranżazzjoni hija ddeterminata mill-issettjar fis-seħħ fil-ħin tal-impenn. Għalhekk, huwa possibbli u utli għal xi tranżazzjonijiet li jikkommettu b'mod sinkroniku u għal oħrajn b'mod asinkroniku. Per eżempju, biex iġġiegħel wieħed multistatement transazzjoni biex tagħmel impenji b'mod asinkroniku meta l-valur default tal-parametru huwa oppost, issettjat SET LOCAL synchronous_commit TO OFF fi tranżazzjoni.

B'din il-modifika żgħira għall-fajl tal-konfigurazzjoni, tajna lill-utenti kontroll fuq il-konsistenza u l-prestazzjoni tagħhom.

Sors: www.habr.com

Żid kumment