PostgreSQL og tengingarsértækar skrifasamkvæmnistillingar

Þýðing greinarinnar var unnin sérstaklega fyrir nemendur námskeiðsins "gagnagrunnur". Hefur þú áhuga á að þróast í þessa átt? Við bjóðum þér að Opinn dagur, þar sem við tölum ítarlega um námið, eiginleika netsniðsins, hæfni og starfsmöguleika sem bíða útskriftarnema eftir þjálfun.

PostgreSQL og tengingarsértækar skrifasamkvæmnistillingar

PostgreSQL og tengingarsértækar skrifasamkvæmnistillingar
Hjá Compose erum við að fást við marga gagnagrunna sem gefur okkur tækifæri til að kynnast virkni þeirra og göllum betur. Þegar við lærum að elska eiginleika nýrra gagnagrunna, förum við stundum að hugsa hversu gott það væri ef svipaðir eiginleikar væru til staðar í þroskaðri verkfærunum sem við höfum verið að vinna með í langan tíma. Einn af nýju eiginleikunum sem ég vildi sjá í PostgreSQL var stillanleg skrifasamkvæmni fyrir hverja tengingu yfir allan klasann. Og eins og það kemur í ljós höfum við það nú þegar og í dag viljum við deila með þér upplýsingum um hvernig þú getur notað það.

Af hverju þarf ég það?

Hvernig þyrpingin ætti að haga sér fer eftir umsókn þinni. Tökum sem dæmi reikningsgreiðsluforrit. Þú þarft XNUMX% samræmi í þyrpingunni, svo þú verður að virkja samstilltar skuldbindingar svo að gagnagrunnurinn þinn bíði eftir að allar breytingar verði gerðar. Hins vegar, ef forritið þitt er ört vaxandi félagslegt net, þá muntu líklega kjósa hröð svörun umfram XNUMX% samræmi. Til að ná þessu geturðu notað ósamstilltar skuldbindingar í klasanum þínum.

Mæta málamiðlun

Þú verður að skipta á milli gagnasamkvæmni og frammistöðu. PostgreSQL hverfur frá samræmi vegna þess að sjálfgefna stillingin er þá fyrirsjáanleg og án óvæntra óvæntra óvæntra. Nú skulum við líta á málamiðlanirnar.

Afskipti 1: Frammistaða

Ef PostgreSQL þyrpingin krefst ekki samræmis getur hann keyrt ósamstilltur. Skrifað er til klasaleiðtogans og uppfærslur verða sendar á eftirlíkingar hans nokkrum millisekúndum síðar. Þegar PostgreSQL þyrping krefst samræmis verður hann að keyra samstillt. Skrifað verður til klasaleiðtogans, sem mun senda uppfærslu á eftirlíkingarnar og bíða eftir staðfestingu um að hver og einn hafi skrifað áður en hann sendir staðfestingu til viðskiptavinarins sem hóf ritunina um að það hafi tekist. Hagnýti munurinn á þessum aðferðum er sá að ósamstilltu aðferðin krefst tveggja nethoppa, en samstillta aðferðin krefst fjögurra.

Tradeoff 2: Samræmi

Niðurstaðan ef leiðtogabilun verður í þessum tveimur aðferðum verður einnig önnur. Ef verkið er framkvæmt ósamstillt, ef slík villa kemur upp, verða ekki allar færslur framdir af eftirlíkingunum. Hversu mikið mun tapast? Fer eftir forritinu sjálfu og skilvirkni afritunar. Compose afritun kemur í veg fyrir að eftirmynd verði leiðtogi ef upplýsingamagnið í henni er 1 MB minna en í leiðaranum, það er að allt að 1 MB af skrám gæti hugsanlega tapast við ósamstillta aðgerð.

Þetta gerist ekki í samstilltum ham. Ef leiðarinn mistekst eru allar eftirmyndir uppfærðar, þar sem öll skrif sem staðfest eru á leiðaranum verða að vera staðfest á eftirmyndinni. Þetta er samkvæmni.

Samstillt hegðun er skynsamleg í innheimtuforriti þar sem samræmi hefur augljósan kost í skiptingunni á milli samræmis og frammistöðu. Það mikilvægasta fyrir slíkt forrit eru gild gögn. Hugsaðu nú um félagslegt net þar sem aðalverkefnið er að halda athygli notandans með því að svara beiðnum eins fljótt og auðið er. Í þessu tilviki mun frammistaða með færri nethoppum og minni bið eftir skuldbindingum hafa forgang. Hins vegar er skiptingin á milli frammistöðu og samkvæmni ekki sú eina sem þú þarft að hugsa um.

Afskipti 3: Hrun

Það er mjög mikilvægt að skilja hvernig klasi hegðar sér þegar bilun stendur yfir. Íhugaðu aðstæður þar sem ein eða fleiri eftirmyndir mistakast. Þegar skuldbindingar eru unnar ósamstilltur mun leiðtoginn halda áfram að virka, það er að segja að samþykkja og vinna úr skrifum, án þess að bíða eftir eftirmyndum sem vantar. Þegar eftirlíkingarnar snúa aftur í þyrpinguna ná þær leiðtoganum. Með samstilltri afritun, ef eftirmyndirnar bregðast ekki, þá mun leiðtoginn hafa ekkert val og mun halda áfram að bíða eftir staðfestingu þar til eftirmyndin snýr aftur í þyrpinguna og getur samþykkt og framkvæmt ritunina.

Ein tenging í hverja færslu?

Sérhver forrit þarf aðra tegund af samsetningu samkvæmni og frammistöðu. Nema auðvitað að það sé reikningsgreiðsluforritið okkar, sem við ímyndum okkur að sé algjörlega samkvæmt, eða næstum skammvinnt samfélagsnetaappið okkar. Í öllum öðrum tilfellum verða tímar þegar sumar aðgerðir verða að vera samstilltar og sumar verða að vera ósamstilltar. Þú vilt kannski ekki að kerfið bíði þar til skilaboð sem send eru á spjallið eru framin, en ef greiðsla er afgreidd í sama forriti þarftu að bíða.

Allar þessar ákvarðanir eru auðvitað teknar af forritara. Að taka réttar ákvarðanir um hvenær á að nota hverja nálgun mun hjálpa þér að fá sem mest út úr klasanum þínum. Mikilvægt er að verktaki geti skipt á milli þeirra á SQL stigi fyrir tengingar og fyrir viðskipti.

Að tryggja eftirlit í framkvæmd

Sjálfgefið er að PostgreSQL veitir samræmi. Þessu er stjórnað af breytu miðlarans synchronous_commit. Sjálfgefið er það í stöðu on, en það hefur þrjá aðra valkosti: local, remote_write eða off.

Þegar færibreytan er stillt á off allar samstilltar skuldbindingar eru stöðvaðar, jafnvel á staðbundnu kerfi. Staðbundin færibreytan tilgreinir samstilltan hátt fyrir staðbundna kerfið, en skrif á eftirmyndir eru framkvæmdar ósamstilltur. Remote_write gengur enn lengra: skrif á eftirmyndir eru gerðar ósamstilltur, en er skilað þegar eftirmyndin hefur samþykkt skrifin en hefur ekki skrifað hana á disk.

Með því að íhuga tiltækt úrval valkosta veljum við hegðun og höfum það í huga on – þetta eru samstilltar upptökur, við munum velja local fyrir ósamstilltar skuldbindingar yfir netið, á meðan staðbundnar skuldbindingar eru eftir samstilltar.

Nú munum við segja þér hvernig á að setja þetta upp eftir augnablik, en ímyndaðu þér að við setjum upp synchronous_commit в local fyrir þjóninn. Við veltum því fyrir okkur hvort hægt væri að breyta færibreytunni synchronous_commit á flugu, og það kom í ljós að það er ekki aðeins mögulegt, það eru jafnvel tvær leiðir til að gera þetta. Í fyrsta lagi er að stilla lotu tengingarinnar þinnar sem hér segir:

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

Öll síðari skrif í lotunni munu staðfesta skrif á eftirmyndirnar áður en jákvæðri niðurstöðu skilar til tengda viðskiptavinins. Nema auðvitað þú breytir stillingunni synchronous_commit aftur. Þú getur sleppt hluta SESSION í skipuninni vegna þess að hún verður í sjálfgefnu gildi.

Önnur aðferðin er góð þegar þú vilt bara ganga úr skugga um að þú fáir samstillta afritun fyrir eina færslu. Í mörgum NoSQL kynslóð gagnagrunna er hugmyndin um viðskipti ekki til, en það er í PostgreSQL. Í þessu tilviki byrjar þú viðskipti og stillir síðan synchronous_commit в on áður en þú framkvæmir færsluna fyrir viðskiptin. COMMIT mun fremja viðskiptin með því að nota hvaða færibreytugildi sem er synchronous_commit, sem var stillt á þeim tíma, þó það sé best að stilla breytuna fyrirfram til að tryggja að aðrir forritarar skilji að skrif eru ekki ósamstilltur.

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

Allar viðskiptaskuldbindingar verða nú staðfestar sem skrifaðar á eftirlíkingar áður en gagnagrunnurinn skilar jákvæðu svari til tengda viðskiptavinarins.

Stillir PostgreSQL

Fyrir þetta ímynduðum við okkur PostgreSQL kerfi með synchronous_commit, sett upp í local. Til að gera þetta raunhæft á miðlarahliðinni þarftu að stilla tvo stillingarvalkosti fyrir netþjóninn. Ein breytu í viðbót synchronous_standby_names mun koma til sín þegar synchronous_commit verður í on. Það ákvarðar hvaða eftirlíkingar eru gjaldgengar fyrir samstilltar skuldbindingar og við munum stilla það á *, sem mun þýða að allar eftirlíkingar koma við sögu. Þessi gildi eru venjulega stillt í stillingarskrá með því að bæta við:

synchronous_commit = local  
synchronous_standby_names='*'

Með því að stilla færibreytuna synchronous_commit í merkingu local, við búum til kerfi þar sem staðbundnir diskar haldast samstilltir, en eftirmyndir af netkerfi eru ósamstilltir sjálfgefið. Nema, auðvitað, ákveðum við að gera þessar skuldbindingar samstilltar, eins og sýnt er hér að ofan.

Ef þú hefur fylgst með þróuninni Seðlabankastjóri verkefni, þú gætir hafa tekið eftir einhverjum nýlegum breytingum (1, 2), sem gerði bankastjóra notendum kleift að prófa þessar breytur og fylgjast með samræmi þeirra.

Nokkur orð í viðbót...

Fyrir aðeins viku síðan hefði ég sagt þér að það væri ómögulegt að fínstilla PostgreSQL svona fínt. Það var þegar Kurt, meðlimur Compose pallateymisins, krafðist þess að slíkt tækifæri væri til staðar. Hann róaði andmæli mín og fann í PostgreSQL skjölunum eftirfarandi:

PostgreSQL og tengingarsértækar skrifasamkvæmnistillingar

Þessari stillingu er hægt að breyta hvenær sem er. Hegðun hvers kyns viðskipta er ákvörðuð af stillingunni sem er í gildi á þeim tíma sem skuldbindingin fer fram. Þess vegna er mögulegt og gagnlegt fyrir sum viðskipti að skuldbinda sig samstillt og fyrir önnur ósamstillt. Til dæmis að þvinga einn multistatement færslu til að gera skuldbindingar ósamstilltur þegar sjálfgefið gildi færibreytunnar er öfugt, stillt SET LOCAL synchronous_commit TO OFF í viðskiptum.

Með þessari litlu breytingu á stillingarskránni gáfum við notendum stjórn á samkvæmni þeirra og frammistöðu.

Heimild: www.habr.com

Bæta við athugasemd