PostgreSQL ak paramèt konsistans ekri espesifik koneksyon

Tradiksyon atik la te prepare espesyalman pou elèv yo nan kou a "Baz done". Èske w enterese devlope nan direksyon sa a? Nou envite w Jounen Ouvè, kote nou pale an detay sou pwogram nan, karakteristik nan fòma sou entènèt la, konpetans ak kandida karyè ki ap tann gradye apre fòmasyon.

PostgreSQL ak paramèt konsistans ekri espesifik koneksyon

PostgreSQL ak paramèt konsistans ekri espesifik koneksyon
Nan Compose, nou fè fas ak anpil baz done, ki ba nou opòtinite pou vin pi abitye ak fonksyonalite yo ak enpèfeksyon yo. Pandan n ap aprann renmen karakteristik nouvo baz done yo, pafwa nou kòmanse panse ki jan li ta bèl si karakteristik menm jan an te prezan nan zouti ki pi matirite nou t ap travay avèk yo depi lontan. Youn nan karakteristik yo nouvo ke mwen te vle wè nan PostgreSQL te configurable ekri konsistans pou yon koneksyon atravè tout gwoup la. Epi kòm li vire soti, nou deja genyen li, e jodi a nou vle pataje avèk ou enfòmasyon sou fason ou ka itilize li.

Poukisa mwen bezwen li?

Ki jan gwoup la ta dwe konpòte depann de aplikasyon w lan. Pran, pou egzanp, yon aplikasyon pou peman bòdwo. Ou pral bezwen konsistans XNUMX% atravè gwoup la, kidonk w ap gen pou pèmèt komèt synchrone pou baz done ou a ap tann pou tout chanjman yo fèt. Sepandan, si aplikasyon w lan se yon rezo sosyal k ap grandi byen vit, Lè sa a, ou pral pwobableman prefere repons rapid sou konsistans XNUMX%. Pou reyalize sa, ou ka itilize asynchrone commits nan gwoup ou a.

Rankontre konpwomi

Ou dwe fè konpwomi ant konsistans done ak pèfòmans. PostgreSQL deplase lwen konsistans paske konfigirasyon default la previzib epi san sipriz inatandi. Koulye a, ann gade nan konpwomi yo.

Konpwomi 1: Pèfòmans

Si gwoup PostgreSQL la pa mande konsistans, li ka kouri asynchrone. Ekri a fèt bay lidè gwoup la, epi yo pral voye mizajou nan kopi li yo kèk milisgond pita. Lè yon gwoup PostgreSQL mande konsistans, li dwe kouri synchrone. Ekri a pral fè bay lidè gwoup la, ki pral voye yon ajou nan kopi yo epi tann pou konfimasyon ke chak te ekri anvan yo voye konfimasyon nan kliyan an ki inisye ekri a ke li te reyisi. Diferans pratik ant apwòch sa yo se ke metòd asynchrone a mande pou de rezo hop, pandan y ap metòd synchrone a mande kat.

Konpwomi 2: Konsistans

Rezilta a nan evènman an nan yon echèk lidè nan de apwòch sa yo pral tou diferan. Si travay la fèt asynchrone, Lè sa a, si yon erè konsa rive, se pa tout dosye yo pral komèt pa kopi yo. Konbyen yo pral pèdi? Tou depan de aplikasyon an tèt li ak efikasite nan replikasyon. Replikasyon konpoze ap anpeche yon kopi vin yon lidè si kantite enfòmasyon ki ladan l la se 1 MB mwens pase nan lidè a, sa vle di, jiska 1 MB dosye yo kapab pèdi pandan operasyon asynchrone.

Sa a pa rive nan mòd synchrone. Si lidè a echwe, tout kopi yo mete ajou, paske nenpòt ki ekri konfime sou lidè a dwe konfime sou kopi yo. Sa a se konsistans.

Konpòtman synchrone fè sans nan yon aplikasyon peman bòdwo kote konsistans gen yon avantaj klè nan komès ki genyen ant konsistans ak pèfòmans. Bagay ki pi enpòtan pou yon aplikasyon konsa se done ki valab. Koulye a, reflechi sou yon rezo sosyal kote travay prensipal la se kenbe atansyon itilizatè a pa reponn a demann pi vit ke posib. Nan ka sa a, pèfòmans ki gen mwens hop rezo ak mwens tann pou komite yo pral yon priyorite. Sepandan, konpwomi ki genyen ant pèfòmans ak konsistans se pa youn nan sèlman ou dwe reflechi sou.

Echanj 3: Aksidan

Li trè enpòtan pou w konprann ki jan yon gwoup konpòte pandan yon echèk. Konsidere yon sitiyasyon kote youn oswa plizyè kopi echwe. Lè komèt yo trete asynchrone, lidè a ap kontinye fonksyone, se sa ki, aksepte ak trete ekri, san yo pa tann kopi ki manke. Lè kopi yo retounen nan gwoup la, yo ratrape lidè a. Avèk replikasyon synchrone, si kopi yo pa reponn, alò lidè a p ap gen okenn chwa epi li pral kontinye tann konfimasyon konfimasyon jiskaske kopi a retounen nan gwoup la epi li ka aksepte ak komèt ekri a.

Yon koneksyon pou chak tranzaksyon?

Chak aplikasyon bezwen yon kalite diferan nan konbinezon konsistans ak pèfòmans. Sòf si, nan kou, se aplikasyon pou peye bòdwo nou an, ke nou imajine yo dwe konplètman konsistan, oswa aplikasyon rezo sosyal prèske efemèr nou an. Nan tout lòt ka yo, pral gen fwa lè kèk operasyon yo dwe synchrone ak kèk dwe asynchrone. Ou ka pa vle sistèm nan rete tann jiskaske yon mesaj voye bay chat la komèt, men si yon peman trete nan menm aplikasyon an, Lè sa a, ou pral oblije rete tann.

Tout desizyon sa yo, nan kou, yo pran pa devlopè aplikasyon an. Lè w pran bon desizyon sou ki lè pou w itilize chak apwòch, sa ap ede w jwenn pi plis nan gwoup ou a. Li enpòtan ke pwomotè a ka chanje ant yo nan nivo SQL pou koneksyon ak pou tranzaksyon yo.

Asire kontwòl nan pratik

Pa default, PostgreSQL bay konsistans. Sa a se kontwole pa paramèt sèvè a synchronous_commit. Pa default li se nan pozisyon on, men li gen twa lòt opsyon: local, remote_write oswa off.

Lè w ap mete paramèt la off tout komite synchrone yo sispann, menm sou sistèm lokal la. Paramèt lokal la espesifye mòd synchrone pou sistèm lokal la, men ekri nan kopi yo fèt asynchrone. Remote_write ale menm pi lwen: ekri nan kopi yo fèt asynchrone, men yo retounen lè kopi a te aksepte ekri a men li pa ekri li sou disk.

Lè nou konsidere seri opsyon ki disponib yo, nou chwazi yon konpòtman ak, kenbe nan tèt ou sa on – sa yo se anrejistreman synchrone, nou pral chwazi local pou komèt asynchrone sou rezo a, pandan y ap kite komèt lokal yo synchrone.

Koulye a, nou pral di w kouman yo mete sa a kanpe nan yon moman, men imajine ke nou mete kanpe synchronous_commit в local pou sèvè a. Nou te mande si li te posib chanje paramèt la synchronous_commit sou vole a, epi li te tounen soti ke li pa sèlman posib, gen menm de fason yo fè sa. Premye a se mete sesyon an nan koneksyon ou jan sa a:

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

Tout ekriti ki vin apre yo nan sesyon an pral rekonèt ekri nan kopi yo anvan yo retounen yon rezilta pozitif nan kliyan ki konekte a. Sòf si nan kou ou chanje anviwònman an synchronous_commit ankò. Ou ka kite yon pati SESSION nan lòd la paske li pral nan valè a default.

Dezyèm metòd la bon lè ou jis vle asire w ke ou jwenn replikasyon synchrone pou yon tranzaksyon sèl. Nan anpil baz done jenerasyon NoSQL konsèp tranzaksyon an pa egziste, men li fè sa nan PostgreSQL. Nan ka sa a ou kòmanse yon tranzaksyon ak Lè sa a, mete synchronous_commit в on anvan egzekite antre a pou tranzaksyon an. COMMIT pral komèt tranzaksyon an lè l sèvi avèk nenpòt valè paramèt synchronous_commit, ki te mete nan moman an, byenke li pi bon yo mete varyab la davans asire w ke lòt devlopè konprann ke ekri yo pa asynchrone.

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

Tout komèt tranzaksyon yo pral konfime kounye a jan yo ekri nan kopi anvan baz done a retounen yon repons pozitif nan kliyan ki konekte a.

Mete kanpe PostgreSQL

Anvan sa, nou te imajine yon sistèm PostgreSQL ak synchronous_commit, enstale nan local. Pou fè sa a reyalis sou bò sèvè a, w ap bezwen mete de opsyon konfigirasyon sèvè. Yon lòt paramèt synchronous_standby_names pral vin nan pwòp li yo lè synchronous_commit pral nan on. Li detèmine ki kopi ki elijib pou komite synchrone, epi nou pral mete l 'a *, ki pral vle di ke tout kopi yo patisipe. Valè sa yo anjeneral configuré nan dosye konfigirasyon pa ajoute:

synchronous_commit = local  
synchronous_standby_names='*'

Pa mete paramèt la synchronous_commit nan sans local, nou kreye yon sistèm kote disk lokal yo rete synchrone, men rezo kopi komite yo asynchrone pa default. Sòf si, nan kou, nou deside fè sa yo komèt synchrone, jan yo montre pi wo a.

Si ou te swiv devlopman an Pwojè Gouvènè, ou ka remake kèk chanjman ki sot pase yo (1, 2), ki te pèmèt itilizatè Gouvènè yo teste paramèt sa yo epi kontwole konsistans yo.

Kèk mo plis...

Jis yon semèn de sa, mwen ta te di ou ke li enposib amann-afine PostgreSQL konsa tise byen. Se lè sa a, Kurt, yon manm ekip platfòm Compose, te ensiste ke yon opòtinite konsa te egziste. Li kalme objeksyon mwen yo epi li te jwenn nan dokiman PostgreSQL la sa ki annapre yo:

PostgreSQL ak paramèt konsistans ekri espesifik koneksyon

Anviwònman sa a ka chanje nenpòt ki lè. Konpòtman an pou nenpòt tranzaksyon detèmine pa anviwònman an an vigè nan moman komèt la. Se poutèt sa, li posib ak itil pou kèk tranzaksyon komèt synchrone ak pou lòt moun asynchrone. Pou egzanp, fòse youn multistatement tranzaksyon pou fè komèt asynchrone lè valè default paramèt la opoze, mete SET LOCAL synchronous_commit TO OFF nan yon tranzaksyon.

Avèk ti modifikasyon sa a nan dosye konfigirasyon an, nou te bay itilizatè yo kontwòl sou konsistans yo ak pèfòmans yo.

Sous: www.habr.com

Add nouvo kòmantè