Mîhengên domdariya nivîsandinê yên PostgreSQL û girêdan-taybetî

Wergera gotarê bi taybetî ji bo xwendekarên qursê hatiye amadekirin "Datebase". Meraq dikin ku di vî alî de pêşve bibin? Em we vedixwînin Roja vekirî, ku em bi hûrgulî li ser bernameyê, taybetmendiyên forma serhêl, jêhatîbûn û perspektîfên kariyerê yên ku piştî perwerdehiyê li benda mezûnan in diaxivin.

Mîhengên domdariya nivîsandinê yên PostgreSQL û girêdan-taybetî

Mîhengên domdariya nivîsandinê yên PostgreSQL û girêdan-taybetî
Li Compose, em neçar in ku bi gelek databasan re mijûl bibin, ya ku fersendê dide me ku em fonksiyon û kêmasiyên wan çêtir nas bikin. Gava ku em fêr dibin ku ji taybetmendiyên databasên nû hez bikin, em carinan dest pê dikin ku bifikirin ka dê çiqas xweş be heke taybetmendiyên wusa di nav amûrên gihîştî yên ku em ji demek dirêj ve bi wan re dixebitin hebin. Yek ji taybetmendiyên nû yên ku min dixwest di PostgreSQL-ê de bibînim domdariya nivîsandinê ya mîhengkirî bû ji bo pêwendiyek li seranserê komê. Û wekî ku diqewime, me berê wê heye, û îro em dixwazin bi we re agahdarî li ser ka hûn çawa dikarin wê bikar bînin parve bikin.

Çima ez hewce dikim?

Divê kom çawa tevbigere bi serîlêdana we ve girêdayî ye. Mînakî, sepanek dravdana fatûreyê bigirin. Hûn ê hewceyê XNUMX% lihevhatina li seranserê komê bikin, ji ber vê yekê hûn neçar in ku peywirên hevdemî çalak bikin da ku databasa we li bendê be ku hemî guhertin bêne çêkirin. Lêbelê, heke serîlêdana we torgilokek civakî ya ku zû mezin dibe ye, wê hingê hûn ê belkî bersiva bilez ji% XNUMX% domdar tercîh bikin. Ji bo ku hûn bigihîjin vê yekê, hûn dikarin di koma xwe de peywirên asynchronous bikar bînin.

Hevdîtina lihevhatinê

Pêdivî ye ku hûn di navbera hevgirtina daneyê û performansê de danûstendinan bikin. PostgreSQL ji hevgirtinê dûr dikeve ji ber ku veavakirina xwerû wê hingê pêşbînîkirî û bêyî surprîzên nediyar e. Niha em li lihevhatinan binêrin.

Bazirganî 1: Performansa

Ger komika PostgreSQL ne hewceyî hevgirtinê ye, ew dikare asynchronously bixebite. Nivîs ji serokê komê re tê çêkirin, û nûvekirin dê çend millisecond paşê ji kopiyên wê re were şandin. Dema ku komek PostgreSQL hevgirtinê hewce dike, divê ew bi hevdemî bimeşe. Nivîs dê ji serokê komê re were çêkirin, ku dê nûvekirinek ji kopiyan re bişîne û li benda pejirandina ku her yekê nivîsandiye berî ku piştrastkirinê bişîne ji xerîdar re ku nivîsandina serketî dest pê kiriye bişîne. Cûdahiya pratîkî di navbera van nêzîkan de ev e ku rêbaza asynchronous du hopên torê hewce dike, dema ku rêbaza hevdemî çar hewce dike.

Bazirganî 2: Lihevhatî

Di van her du nêzîkatiyan de jî encama têkçûna rêbertiyê wê cuda be. Ger kar bi asynkronî were kirin, wê hingê heke xeletiyek wusa çêbibe, dê hemî tomar ji hêla kopiyan ve neyên kirin. Dê çiqas winda bibe? Bi serîlêdanê bixwe û karbidestiya dubarekirinê ve girêdayî ye. Berevajîkirina berhevokê dê rê li ber wê yekê bigire ku kopiyek bibe serokek heke hêjmara agahdariya tê de 1 MB ji ya serokeriyê kêmtir be, yanî dibe ku heya 1 MB tomar di dema xebata asynkron de winda bibin.

Ev di moda hevdem de pêk nayê. Ger rêber têk neçe, hemî kopya têne nûve kirin, ji ber ku her nivîsandina ku li ser rêber hatî pejirandin divê li ser kopiyan were pejirandin. Ev hevgirtin e.

Tevgera hevdemî di serîlêdanek fatûreyê de watedar e ku li wir hevgirtin di danûstandina di navbera domdarî û performansê de xwedan avantajek eşkere ye. Ji bo serîlêdanek wusa ya herî girîng daneyên derbasdar e. Naha li ser torgilokek civakî ya ku tê de peywira sereke ew e ku bi lez û bez bersivdana daxwazan bala bikarhêner bigire bifikire. Di vê rewşê de, performansa bi kêmtir hopên torê û kêmtir li benda lihevhatinan dê pêşînek be. Lêbelê, danûstendina di navbera performans û domdariyê de ne tenê yek e ku hûn li ser bifikirin.

Bazirganî 3: Crashes

Pir girîng e ku meriv fêm bike ka komek di dema têkçûnê de çawa tevdigere. Rewşek bihesibînin ku yek an çend replica têk diçin. Dema ku commits asynchronously têne kirin, rêber dê karûbarê xwe bidomîne, ango, qebûl bike û nivîsandinê bidomîne, bêyî ku li benda kopiyên wenda bimîne. Dema ku replica vedigerin komê, ew bi serokê xwe re digirin. Bi dubarekirina hevdemî, heke replica bersiv nedin, wê hingê rêber dê bijarek nemîne û dê li benda pejirandina peywirê bimîne heya ku replica vegere komê û bikaribe nivîsandinê qebûl bike û bike.

Yek girêdana her danûstendinê?

Her serîlêdan hewceyê celebek cûda ya hevgirtî û performansê ye. Heya ku, bê guman, ew sepana meya dravdana fatûreyê, ya ku em xeyal dikin ku bi tevahî domdar be, an jî sepana meya tora civakî ya hema hema domdar be. Di hemî rewşên din de, dê carinan hebin ku divê hin kiryar hevdem û hin jî asînkron bin. Dibe ku hûn nexwazin ku pergal li bendê bimîne heya ku peyamek ji chatê re hatî şandin pêk were, lê heke di heman serîlêdanê de drav were kirin, wê hingê hûn neçar in ku li bendê bin.

Hemî van biryar, bê guman, ji hêla pêşdebirê serîlêdanê ve têne çêkirin. Girtina biryarên rast di derbarê kengê de karanîna her nêzîkatiyê dê ji we re bibe alîkar ku hûn herî zêde ji koma xwe bistînin. Girîng e ku pêşdebir dikare di asta SQL de ji bo girêdan û danûstendinan di navbera wan de biguhezîne.

Di pratîkê de misogerkirina kontrolê

Bi xwerû, PostgreSQL hevgirtinê peyda dike. Ev ji hêla parametreya serverê ve tê kontrol kirin synchronous_commit. Bi xwerû ew di pozîsyonê de ye on, lê sê vebijarkên din hene: local, remote_write an off.

Dema ku parametre ji bo off hemî commitsên hevdem têne rawestandin, tewra li ser pergala herêmî. Parametreya herêmî ji bo pergala herêmî moda hevdemî diyar dike, lê nivîsandina li kopiyan bi asynkronî têne kirin. Remote_write hê wêdetir diçe: nivîsandina li kopyayan bi asynkronî têne çêkirin, lê dema ku replika nivîsandinê qebûl kir lê ew li ser dîskê nenivîsanda têne vegerandin.

Bi berçavgirtina cûrbecûr vebijarkên berdest, em tevgerek hildibijêrin û, di hişê xwe de digirin on - ev tomarên hevdem in, em ê hilbijêrin local ji bo commits asynchronous li ser torê, dema ku commits herêmî hemwext hiştin.

Naha, em ê ji we re vebêjin ka meriv çawa vê yekê di kêliyekê de saz dike, lê bifikire ku em saz bikin synchronous_commit в local ji bo serverê. Me meraq kir gelo gengaz e ku pîvan biguhere synchronous_commit li ser firînê, û derket holê ku ew ne tenê gengaz e, tewra du awayên kirina vê yekê jî hene. Ya yekem ev e ku hûn danişîna pêwendiya xwe bi vî rengî saz bikin:

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

Hemî nivîsên paşîn ên di danişînê de dê nivîsandina li kopiyan qebûl bikin berî ku encamek erênî ji xerîdar vegere. Heya ku bê guman hûn mîhengê biguherînin synchronous_commit dîsa. Hûn dikarin beşek jê derxînin SESSION di fermanê de ji ber ku ew ê di nirxa xwerû de be.

Rêbaza duyemîn baş e dema ku hûn tenê dixwazin pê ewle bibin ku hûn ji bo danûstendinek yekane veberkirina hevdem digirin. Di gelek databasên nifşê NoSQL de têgeha danûstendinan tune, lê ew di PostgreSQL de heye. Di vê rewşê de, hûn danûstandinek dest pê bikin û paşê saz bikin synchronous_commit в on berî pêkanîna têketina ji bo danûstandinê. COMMIT dê danûstendinê bi karanîna her nirxek parametreyê pêk bîne synchronous_commit, ya ku di wê demê de hate danîn, her çend çêtir e ku meriv guhêrbar li pêşiyê bicîh bike da ku pê ewle be ku pêşdebirên din fam bikin ku nivîs ne asînkron in.

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

Hemî peywirên danûstendinê dê naha wekî ku ji kopiyan re hatine nivîsandin bêne pejirandin berî ku databas bersivek erênî ji xerîdar ve girêdayî vegerîne.

Sazkirina PostgreSQL

Berî vê yekê, me pergalek PostgreSQL bi xeyal kir synchronous_commit, tê sazkirin local. Ji bo ku hûn viya li aliyê serverê rast bikin, hûn ê hewce bikin ku du vebijarkên veavakirina serverê bicîh bikin. Parametreyek din synchronous_standby_names dê kengê bi xwe re were synchronous_commit dê di bin on. Ew destnîşan dike ka kîjan kopiyên ji bo peywirên hevdemî mafdar in, û em ê wê saz bikin *, ku dê wateya ku hemî replica tevlê bibin. Van nirxan bi gelemperî di nav de têne mîheng kirin pelê veavakirinê bi zêdekirina:

synchronous_commit = local  
synchronous_standby_names='*'

Bi danîna pîvanê synchronous_commit nav wateyê de local, em pergalek diafirînin ku dîskên herêmî hevdem dimînin, lê kopiyên torê ji hêla xwerû ve asynkron in. Heya ku, bê guman, em biryar nedin ku van pêkanînan hevdem bikin, wekî ku li jor hatî destnîşan kirin.

Heke hûn pêşveçûnê dişopînin Projeya walî, dibe ku we hin guheztinên vê dawiyê dîtine (1, 2), ku destûr da bikarhênerên Walî ku van parameteran biceribînin û hevgirtina wan bişopînin.

Çend gotinên din...

Hefteyek berê, min ê ji we re bigota ku ne mimkun e ku meriv PostgreSQL ew qas hûrgulî rast bike. Wê demê Kurt, endamê tîmê platforma Compose, israr kir ku derfetek wusa heye. Wî nerazîbûnên min sist kir û di belgeya PostgreSQL de dît jêrîn:

Mîhengên domdariya nivîsandinê yên PostgreSQL û girêdan-taybetî

Ev mîheng dikare her dem were guheztin. Tevgera ji bo her danûstendinê ji hêla mîhenga ku di dema kirinê de bandor e tê destnîşankirin. Ji ber vê yekê, ji bo hin danûstendinan bi hevdemî û ji bo yên din jî asynkronî pêkan dibe û kêrhatî ye. Ji bo nimûne, bi zorê yekî multistatement dema ku nirxa xwerû ya pîvanê berevajiyê wê be, danûstendina ku were çêkirin bi asynkronî pêk tê SET LOCAL synchronous_commit TO OFF di danûstandinê de.

Bi vê guheztina piçûk a pelê veavakirinê, me kontrola li ser hevgirtî û performansa wan da bikarhêneran.

Source: www.habr.com

Add a comment