PostgreSQL thiab kev sib txuas tshwj xeeb sau qhov sib xws

Cov lus txhais ntawm tsab xov xwm tau npaj tshwj xeeb rau cov tub ntxhais kawm ntawm chav kawm "Database". Txaus siab rau kev txhim kho hauv cov lus qhia no? Peb caw koj mus Hnub qhib, qhov twg peb tham hauv kev nthuav dav txog qhov kev zov me nyuam, cov yam ntxwv ntawm hom online, kev muaj peev xwm thiab kev cia siab rau kev ua haujlwm uas tos cov neeg kawm tiav tom qab kev cob qhia.

PostgreSQL thiab kev sib txuas tshwj xeeb sau qhov sib xws

PostgreSQL thiab kev sib txuas tshwj xeeb sau qhov sib xws
Ntawm Compose, peb cuam tshuam nrog ntau cov ntaub ntawv, uas muab sijhawm rau peb kom paub ntau ntxiv txog lawv cov haujlwm thiab qhov tsis txaus. Raws li peb kawm nyiam cov yam ntxwv ntawm cov ntaub ntawv tshiab, qee zaum peb pib xav tias nws yuav zoo npaum li cas yog tias cov yam ntxwv zoo sib xws muaj nyob rau hauv cov cuab yeej paub tab uas peb tau ua haujlwm nrog ntev. Ib qho ntawm cov yam ntxwv tshiab uas kuv xav pom hauv PostgreSQL yog configurable sau sib xws ib qho kev sib txuas thoob plaws tag nrho pawg. Thiab raws li nws hloov tawm, peb twb muaj nws, thiab hnub no peb xav qhia rau koj paub txog yuav ua li cas siv nws.

Vim li cas kuv thiaj xav tau nws?

Cov pawg yuav tsum coj li cas nyob ntawm koj daim ntawv thov. Piv txwv li, siv ib daim nqi them nyiaj app. Koj yuav xav tau XNUMX% kev sib raug zoo thoob plaws pawg, yog li koj yuav tsum ua kom synchronous cog lus kom koj cov ntaub ntawv tos rau txhua qhov kev hloov pauv. Txawm li cas los xij, yog tias koj daim ntawv thov yog kev sib txuas lus ceev ceev, ces koj yuav xav tau cov lus teb ceev tshaj XNUMX% sib xws. Txhawm rau ua tiav qhov no, koj tuaj yeem siv asynchronous commits hauv koj pawg.

Ntsib kev sib haum xeeb

Koj yuav tsum ua kom muaj kev sib pauv ntawm cov ntaub ntawv sib xws thiab kev ua haujlwm. PostgreSQL txav deb ntawm qhov tsis sib xws vim tias qhov kev teeb tsa ua ntej yog tom qab ntawd tuaj yeem kwv yees thiab tsis muaj qhov xav tsis thoob. Tam sim no cia peb saib cov kev sib haum xeeb.

Tradeoff 1: Kev ua tau zoo

Yog tias PostgreSQL pawg tsis xav tau qhov sib xws, nws tuaj yeem khiav asynchronously. Cov ntawv sau yog tsim rau pawg thawj coj, thiab cov kev hloov kho tshiab yuav raug xa mus rau nws cov replicas ob peb milliseconds tom qab. Thaum ib pawg PostgreSQL xav tau kev sib xws, nws yuav tsum khiav synchronously. Kev sau ntawv yuav raug ua rau tus thawj coj ntawm pawg, uas yuav xa ib qho kev hloov tshiab rau cov replicas thiab tos kom paub meej tias txhua tus tau sau ua ntej xa kev pom zoo rau tus neeg siv uas pib sau ntawv tias nws ua tiav. Cov tswv yim sib txawv ntawm cov txheej txheem no yog tias txoj kev asynchronous xav tau ob lub network hops, thaum txoj kev synchronous xav tau plaub.

Tradeoff 2: Consistency

Qhov tshwm sim ntawm qhov tshwm sim ntawm tus thawj coj tsis ua haujlwm hauv ob txoj hauv kev no kuj yuav txawv. Yog tias qhov kev ua haujlwm tau ua tiav asynchronously, yog tias qhov yuam kev no tshwm sim, tsis yog txhua cov ntaub ntawv yuav raug cog lus los ntawm cov ntawv luam tawm. Yuav poob npaum li cas? Nyob ntawm daim ntawv thov nws tus kheej thiab efficiency ntawm replication. Kev sib sau ua ke yuav tiv thaiv ib qho kev hloov pauv los ntawm kev ua tus thawj coj yog tias cov ntaub ntawv hauv nws yog 1 MB tsawg dua li tus thawj coj, uas yog, txog li 1 MB ntawm cov ntaub ntawv tuaj yeem ua rau poob thaum lub sijhawm ua haujlwm asynchronous.

Qhov no tsis tshwm sim hauv hom synchronous. Yog tias tus thawj coj ua tsis tiav, txhua qhov kev hloov pauv tau hloov kho, vim tias ib qho kev sau ntawv lees paub ntawm tus thawj coj yuav tsum tau lees paub ntawm cov ntawv luam. Qhov no yog qhov sib xws.

Synchronous tus cwj pwm ua rau muaj kev nkag siab zoo hauv daim ntawv thov them nqi uas qhov sib xws muaj qhov txiaj ntsig zoo hauv kev lag luam tawm ntawm kev sib xws thiab kev ua haujlwm. Qhov tseem ceeb tshaj plaws rau daim ntawv thov no yog cov ntaub ntawv siv tau. Tam sim no xav txog lub social network uas lub luag haujlwm tseem ceeb yog kom tus neeg siv lub siab los ntawm kev teb cov lus thov kom sai li sai tau. Hauv qhov no, kev ua haujlwm nrog tsawg dua network hops thiab tsawg tos rau kev cog lus yuav yog qhov tseem ceeb. Txawm li cas los xij, kev sib pauv ntawm kev ua tau zoo thiab kev sib xws tsis yog tib qho uas koj yuav tsum xav txog.

Trade-off 3: Crashes

Nws yog ib qho tseem ceeb heev kom nkag siab tias pawg neeg coj li cas thaum ua tsis tiav. Xav txog qhov xwm txheej uas ib lossis ntau qhov kev hloov pauv tsis tiav. Thaum cov lus cog tseg tau ua tiav asynchronously, tus thawj coj yuav ua haujlwm txuas ntxiv, uas yog, lees txais thiab txheej txheem sau, yam tsis tau tos rau qhov ploj lawm. Thaum cov replicas rov qab mus rau pawg, lawv ntes nrog tus thawj coj. Nrog synchronous replication, yog hais tias tus replicas tsis teb, ces tus thawj coj yuav tsis muaj kev xaiv thiab yuav tseem tos kom cog lus pom zoo kom txog rau thaum lub replica rov qab mus rau pawg thiab tuaj yeem lees txais thiab cog lus rau kev sau ntawv.

Ib qho kev sib txuas rau ib qho kev sib pauv?

Txhua daim ntawv thov xav tau kev sib txawv ntawm kev sib xyaw ua ke thiab kev ua haujlwm. Tshwj tsis yog, tau kawg, nws yog peb daim ntawv them nqi, uas peb xav tias yuav tsum ua kom zoo ib yam, lossis peb yuav luag ephemeral social networking app. Hauv txhua qhov xwm txheej, yuav muaj qee lub sijhawm thaum qee qhov haujlwm yuav tsum tau synchronous thiab qee qhov yuav tsum yog asynchronous. Tej zaum koj yuav tsis xav kom lub kaw lus tos kom txog thaum cov lus xa mus rau kev sib tham tau cog lus, tab sis yog tias kev them nyiaj ua tiav hauv tib daim ntawv thov, ces koj yuav tau tos.

Tag nrho cov kev txiav txim siab no, tau kawg, yog ua los ntawm tus tsim daim ntawv thov. Kev txiav txim siab zoo txog thaum twg yuav siv txhua txoj hauv kev yuav pab koj tau txais txiaj ntsig zoo tshaj plaws ntawm koj pawg. Nws yog ib qho tseem ceeb uas tus tsim tawm tuaj yeem hloov ntawm lawv ntawm SQL qib rau kev sib txuas thiab kev lag luam.

Ua kom muaj kev tswj hwm hauv kev coj ua

Los ntawm lub neej ntawd, PostgreSQL muab qhov sib xws. Qhov no yog tswj los ntawm server parameter synchronous_commit. Los ntawm lub neej ntawd nws yog nyob rau hauv txoj hauj lwm on, tab sis nws muaj peb lwm txoj kev xaiv: local, remote_write los yog off.

Thaum teem lub parameter rau off tag nrho cov synchronous commits raug tso tseg, txawm nyob rau hauv lub zos system. Lub zos parameter qhia synchronous hom rau lub zos system, tab sis sau rau replicas yog ua asynchronously. Remote_write mus ntxiv: sau rau replicas yog ua asynchronously, tab sis raug xa rov qab thaum lub replica tau txais kev sau tab sis tsis tau sau rau disk.

Los ntawm kev xav txog cov kev xaiv muaj, peb xaiv tus cwj pwm thiab, nco ntsoov tias on - cov no yog synchronous kaw, peb yuav xaiv local rau asynchronous commits tshaj lub network, thaum tawm hauv zos commits synchronous.

Tam sim no, peb yuav qhia koj yuav ua li cas teeb tsa qhov no hauv ib pliag, tab sis xav txog tias peb teeb tsa synchronous_commit Π² local rau lub server. Peb xav paub seb nws puas tuaj yeem hloov qhov parameter synchronous_commit ntawm ya, thiab nws tau pom tias nws tsis yog tsuas yog ua tau, muaj ob txoj hauv kev los ua qhov no. Thawj yog los teeb tsa lub rooj sib tham ntawm koj qhov kev sib txuas raws li hauv qab no:

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

Tag nrho cov ntawv txuas ntxiv tom ntej hauv qhov kev sib kho yuav lees paub sau rau cov ntawv luam ua ntej xa cov txiaj ntsig zoo rau tus neeg siv khoom sib txuas. Tshwj tsis yog tau kawg koj hloov qhov chaw synchronous_commit dua. Koj tuaj yeem tshem tawm ib feem SESSION nyob rau hauv cov lus txib vim nws yuav nyob rau hauv lub neej ntawd tus nqi.

Txoj kev thib ob yog qhov zoo thaum koj tsuas yog xav kom koj tau txais synchronous replication rau ib qho kev sib pauv. Hauv ntau NoSQL tiam databases lub tswv yim ntawm kev lag luam tsis muaj nyob, tab sis nws ua hauv PostgreSQL. Hauv qhov no koj pib ua lag luam thiab tom qab ntawd teeb tsa synchronous_commit Π² on ua ntej executing qhov nkag rau kev pauv. COMMIT yuav ua qhov kev sib pauv uas siv cov nqi parameter synchronous_commit, uas tau teem rau lub sijhawm, txawm hais tias nws yog qhov zoo tshaj plaws los teeb tsa qhov sib txawv ua ntej kom paub tseeb tias lwm tus neeg tsim khoom nkag siab tias cov ntawv sau tsis yog asynchronous.

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

Tag nrho cov kev cog lus tam sim no yuav raug lees paub raws li sau rau replicas ua ntej cov ntaub ntawv xa rov qab cov lus teb zoo rau cov neeg siv khoom sib txuas.

Teeb tsa PostgreSQL

Ua ntej no, peb xav txog PostgreSQL system nrog synchronous_commit, ntsia hauv local. Txhawm rau ua qhov no tiag tiag ntawm sab server, koj yuav tsum tau teeb tsa ob lub server kev xaiv xaiv. Ib qho ntxiv parameter synchronous_standby_names yuav los rau hauv nws tus kheej thaum synchronous_commit yuav tsum nyob rau hauv on. Nws txiav txim siab qhov twg replicas tsim nyog rau synchronous commits, thiab peb yuav teem nws rau *, uas yuav txhais tau tias tag nrho cov replicas koom nrog. Cov txiaj ntsig no feem ntau yog teeb tsa hauv configuration file los ntawm kev ntxiv:

synchronous_commit = local  
synchronous_standby_names='*'

Los ntawm kev teeb tsa qhov parameter synchronous_commit rau hauv lub ntsiab lus local, peb tsim ib qhov system uas cov disks hauv zos nyob synchronous, tab sis network replica commits yog asynchronous los ntawm lub neej ntawd. Tshwj tsis yog, tau kawg, peb txiav txim siab ua cov kev cog lus no synchronous, raws li qhia saum toj no.

Yog tias koj tau ua raws li kev txhim kho Tswv xeev project, tej zaum koj yuav tau pom qee qhov kev hloov pauv tsis ntev los no (1, 2), uas tso cai rau Governor cov neeg siv los sim cov kev txwv no thiab saib xyuas lawv qhov sib xws.

Ob peb lo lus ntxiv ...

Tsuas yog ib lub lim tiam dhau los, kuv yuav tau hais rau koj tias nws tsis tuaj yeem kho PostgreSQL kom zoo. Qhov ntawd yog thaum Kurt, tus tswvcuab ntawm Pab Pawg Sib Koom Tes, tau hais tias muaj lub sijhawm zoo li no. Nws ua rau kuv tsis pom zoo thiab pom hauv PostgreSQL cov ntaub ntawv cov hauv qab no:

PostgreSQL thiab kev sib txuas tshwj xeeb sau qhov sib xws

Qhov chaw no tuaj yeem hloov tau txhua lub sijhawm. Tus cwj pwm rau ib qho kev lag luam yog txiav txim siab los ntawm qhov teeb tsa muaj txiaj ntsig thaum lub sijhawm cog lus. Yog li ntawd, nws yog qhov ua tau thiab muaj txiaj ntsig rau qee qhov kev lag luam los ua synchronously thiab rau lwm tus asynchronously. Piv txwv li, yuam ib tug multistatement kev hloov pauv los ua kev cog lus asynchronously thaum lub neej ntawd tus nqi ntawm qhov ntsuas yog qhov sib txawv, teeb tsa SET LOCAL synchronous_commit TO OFF hauv kev lag luam.

Nrog rau qhov kev hloov kho me me no rau cov ntaub ntawv teeb tsa, peb tau muab cov neeg siv tswj hwm lawv qhov sib xws thiab kev ua haujlwm.

Tau qhov twg los: www.hab.com

Ntxiv ib saib