Thaum nws los txog rau cov ntaub ntawv sib xws, kev tsom mus rau lub peev xwm ntawm haiv neeg cov xwm txheej uas tuaj yeem ua rau kev nyeem ntawv qias neeg thiab cov ntaub ntawv poob. Txawm li cas los xij, cov ntaub ntawv anomalies tsis nres ntawd.
Ib qho piv txwv ntawm xws li anomalies yog kaw distortion (sau skews). Distortions yog ib qho nyuaj rau nrhiav tau vim hais tias lawv feem ntau tsis nquag nrhiav. Lawv tsis yog vim kev nyeem ntawv qias neeg lossis cov ntaub ntawv poob, tab sis rau kev ua txhaum cai ntawm kev txwv tsis pub muab tso rau hauv cov ntaub ntawv.
Piv txwv li, cia peb xav txog daim ntawv thov saib xyuas uas xav kom ib tus neeg teb xov tooj yuav tsum tau hu rau txhua lub sijhawm:
BEGIN tx1; BEGIN tx2;
SELECT COUNT(*)
FROM operators
WHERE oncall = true;
0 SELECT COUNT(*)
FROM operators
WHERE oncall = TRUE;
0
UPDATE operators UPDATE operators
SET oncall = TRUE SET oncall = TRUE
WHERE userId = 4; WHERE userId = 2;
COMMIT tx1; COMMIT tx2;
Hauv qhov xwm txheej saum toj no, cov ntaub ntawv kev noj nyiaj txiag yuav tshwm sim yog tias ob qho kev lag luam tau ua tiav. Txawm hais tias tsis muaj kev nyeem ntawv qias neeg lossis cov ntaub ntawv poob, kev ncaj ncees ntawm cov ntaub ntawv raug cuam tshuam: tam sim no ob tus neeg raug suav hais tias yog hu rau tib lub sijhawm.
Serializable cais, schema tsim, los yog database txwv yuav pab tshem tawm kev sau ntawv tsis ncaj ncees. Cov neeg tsim khoom yuav tsum muaj peev xwm txheeb xyuas cov kev tsis sib haum xeeb no thaum lub sijhawm kev txhim kho kom tsis txhob muaj lawv hauv kev tsim khoom. Nyob rau tib lub sijhawm, kev kaw cov distortions yog qhov nyuaj heev los nrhiav hauv lub hauv paus code. Tshwj xeeb tshaj yog nyob rau hauv cov tshuab loj, thaum pab pawg tsim kho sib txawv yog lub luag haujlwm rau kev ua haujlwm raws li tib lub rooj thiab tsis pom zoo rau qhov tshwj xeeb ntawm cov ntaub ntawv nkag.
Cov ntaub ntawv thiab cov neeg siv tsis tas yuav pom zoo tias yuav ua li cas
Yog tias xav tau atomicity (uas yog, tag nrho cov haujlwm yuav tsum ua kom tiav lossis rho tawm) thiab cov teeb meem sib txuas, tom qab ntawd cov haujlwm T1 thiab T2 yuav tsum tau ua hauv ib qho kev sib pauv.
Daim ntawv thov-qib sharding tuaj yeem txav mus sab nraum daim ntawv thov
Sharding yog ib txoj hauv kev uas horizontally partitioning ib database. Qee cov databases tuaj yeem faib cov ntaub ntawv kab rov tav, thaum lwm tus tsis tuaj yeem, lossis tsis zoo rau nws. Thaum cov ntaub ntawv architects/developers muaj peev xwm kwv yees raws nraim li cas cov ntaub ntawv yuav nkag mus, lawv muaj peev xwm tsim kab rov tav partitions nyob rau hauv cov neeg siv qhov chaw es tsis txhob delegating no ua hauj lwm rau lub database. Cov txheej txheem no hu ua "application-level sharding" (application-level sharding).
Hmoov tsis zoo, lub npe no feem ntau tsim cov kev xav tsis zoo uas sharding nyob hauv daim ntawv thov kev pabcuam. Qhov tseeb, nws tuaj yeem ua raws li cov txheej txheem cais nyob rau hauv pem hauv ntej ntawm cov ntaub ntawv. Nyob ntawm cov ntaub ntawv loj hlob thiab schema iterations, sharding yuav tsum tau ua heev complex. Qee cov tswv yim yuav tau txais txiaj ntsig los ntawm kev muaj peev xwm rov hais dua yam tsis tas yuav rov siv dua daim ntawv thov servers.
Daim ntawv thov neeg rau zaub mov nyeem cov ntaub ntawv los ntawm cov qauv hauv zos uas yog 5 vib nas this dhau los, txawm tias qhov tseeb version muaj nyob rau sab nraud ntawm Dej Hiav Txwv Pacific
DBMSs cia li tshem tawm cov laus dua thiab, qee zaum, tso cai rau koj ua qhov no ntawm kev thov. Piv txwv li, Postgres tso cai rau cov neeg siv ua VACUUM raws li kev thov, thiab ib ntus ua qhov haujlwm no tau txais. Spanner khiav cov khoom khib nyiab kom tshem tawm cov duab thaij duab qub tshaj li ib teev.
Txhua lub sijhawm cov peev txheej yuav raug cuam tshuam
Qhov zoo tshaj plaws-kub zais hauv computer science yog tias txhua lub sijhawm APIs dag. Qhov tseeb, peb cov tshuab tsis paub lub sijhawm tam sim no. Cov khoos phis tawj muaj cov quartz siv lead ua uas tsim kev vibrations uas siv los ua kom lub sijhawm. Txawm li cas los xij, lawv tsis raug txaus thiab tej zaum yuav ua ntej / poob qab lub sijhawm. Kev hloov pauv tuaj yeem ncav cuag 20 vib nas this ib hnub. Yog li ntawd, lub sij hawm ntawm peb cov computers yuav tsum tau synchronized nrog lub network ib.
NTP servers yog siv rau synchronization, tab sis cov txheej txheem synchronization nws tus kheej yuav raug rau lub network qeeb. Txawm tias synchronizing nrog NTP server hauv tib lub chaw cov ntaub ntawv yuav siv sij hawm qee lub sijhawm. Nws yog qhov tseeb tias kev ua haujlwm nrog pej xeem NTP server tuaj yeem ua rau muaj kev cuam tshuam ntau dua.
Atomic moos thiab lawv cov GPS counterparts yog qhov zoo dua rau kev txiav txim siab lub sijhawm tam sim no, tab sis lawv kim heev thiab xav tau kev teeb tsa nyuaj, yog li lawv tsis tuaj yeem ntsia tau rau txhua lub tsheb. Vim li no, cov chaw khaws ntaub ntawv siv ib txoj hauv kev sib tw. Atomic thiab/lossis GPS moos qhia lub sijhawm meej, tom qab ntawd nws tau tshaj tawm rau lwm lub tshuab los ntawm cov servers thib ob. Qhov no txhais tau hais tias txhua lub tshuab yuav muaj qee qhov offset los ntawm lub sijhawm.
Google TrueTime siv txoj hauv kev sib txawv kiag li. Cov neeg feem coob ntseeg tias Google qhov kev nce qib hauv qhov kev taw qhia no tau piav qhia los ntawm banal hloov mus rau atomic thiab GPS moos, tab sis qhov no tsuas yog ib feem ntawm daim duab loj. Nov yog li cas TrueTime ua haujlwm:
TrueTime siv ob qhov chaw sib txawv: GPS thiab atomic moos. Cov moos no muaj cov hom kev ua tsis tiav. [saib nplooj 5 kom paub meej no - kwv yees. txhais.), yog li lawv siv sib koom ua ke nce kev ntseeg tau.
TrueTime muaj qhov txawv txav API. Nws rov qab lub sij hawm raws li lub caij nyoog nrog kev ntsuas qhov yuam kev thiab tsis paub tseeb ua rau nws. Lub sijhawm tiag tiag hauv lub sijhawm yog qhov chaw nruab nrab ntawm cov ciam teb sab saud thiab sab qis ntawm lub sijhawm. Spanner, Google cov ntaub ntawv faib tawm, tsuas yog tos kom txog thaum nws muaj kev nyab xeeb los hais tias lub sijhawm tam sim no tawm ntawm qhov ntau. Txoj kev no qhia txog qee qhov latency rau hauv lub system, tshwj xeeb tshaj yog tias qhov tsis paub meej ntawm cov masters siab, tab sis ua kom muaj tseeb txawm tias nyob hauv qhov xwm txheej thoob ntiaj teb.
Cov khoom siv Spanner siv TrueTime, qhov twg TT.now() rov qab ib ntus, yog li Spanner tsuas yog pw tsaug zog kom txog thaum lub sijhawm nws tuaj yeem ntseeg tau tias lub sijhawm tam sim no tau dhau los ntawm qee qhov taw tes.
Txo qhov tseeb ntawm kev txiav txim siab lub sijhawm tam sim no txhais tau hais tias kev nce ntxiv ntawm lub sijhawm ntawm Spanner kev ua haujlwm thiab kev ua haujlwm tsawg. Qhov no yog vim li cas nws yog ib qho tseem ceeb kom tswj tau qhov tseeb tshaj plaws txawm hais tias nws yog tsis yooj yim sua kom tau txais ib tug zoo saib.
Kev ncua muaj ntau lub ntsiab lus
Yog tias koj nug ntau tus kws tshaj lij txog qhov kev ncua sijhawm yog dab tsi, koj yuav tau txais cov lus teb sib txawv. Hauv DBMS latency feem ntau hu ua "database latency" thiab txawv ntawm qhov pom los ntawm tus neeg siv khoom. Qhov tseeb yog tias tus neeg siv tau soj ntsuam cov lej ntawm lub network ncua sijhawm thiab cov ntaub ntawv qeeb. Lub peev xwm los cais cov hom latency yog qhov tseem ceeb thaum kho qhov teeb meem loj hlob. Thaum sau thiab nthuav tawm cov ntsuas ntsuas, ib txwm sim ua kom lub qhov muag ntawm ob hom.
Cov kev xav tau ntawm kev ua tau zoo yuav tsum raug ntsuas rau ib qho kev lag luam tshwj xeeb
Qee lub sij hawm cov yam ntxwv ua tau zoo ntawm DBMS thiab nws cov kev txwv tau teev nyob rau hauv cov nqe lus ntawm kev sau / nyeem dhau los thiab latency. Qhov no muab cov ntsiab lus dav dav ntawm cov txheej txheem tseem ceeb, tab sis thaum ntsuas qhov ua tau zoo ntawm DBMS tshiab, txoj hauv kev ntau dua yog cais cov kev ua haujlwm tseem ceeb (rau txhua qhov kev nug thiab / lossis kev lag luam). Piv txwv:
Latency hauv retrieving saum 100 nkag los ntawm tus neeg siv keeb kwm thaum tus neeg siv ua raws 500 lwm tus neeg siv nrog X nkag hauv ib teev.
Kev ntsuam xyuas thiab kev sim yuav suav nrog cov xwm txheej tseem ceeb no kom txog thaum koj ntseeg siab tias cov ntaub ntawv ua tau raws li qhov yuav tsum tau ua. Ib txoj cai zoo sib xws ntawm tus ntiv tes xoo kuj tseem siv qhov kev sib cais no rau hauv tus account thaum sau cov latency metrics thiab txiav txim siab SLOs.
Yuav tsum paub txog siab cardinality thaum sau cov ntsuas rau txhua qhov haujlwm. Siv cov ntaub ntawv teev tseg, sau cov xwm txheej, lossis kev sib faib tracing kom tau txais cov ntaub ntawv kho qhov tsis zoo. Hauv tsab xov xwm "Xav Debug Latency?Β» koj tuaj yeem paub koj tus kheej nrog ncua debugging txoj kev.
Nested muas yuav txaus ntshai
Tsis yog txhua txhua DBMS txhawb nqa kev lag luam nested, tab sis thaum lawv ua, xws li kev lag luam tuaj yeem ua rau muaj kev xav tsis thoob uas tsis yooj yim los txheeb xyuas (uas yog, nws yuav tsum pom tseeb tias muaj qee yam tsis zoo).
Koj tuaj yeem zam tsis txhob siv cov kev lag luam nested siv cov neeg siv cov tsev qiv ntawv uas tuaj yeem ntes thiab hla lawv. Yog tias kev ua lag luam nested tsis tuaj yeem tso tseg, saib xyuas tshwj xeeb hauv lawv qhov kev siv kom tsis txhob muaj qhov xwm txheej xav tau uas ua tiav kev lag luam raug rho tawm vim yog cov nested.
Encapsulating kev hloov pauv hauv cov txheej txheem sib txawv tuaj yeem ua rau qhov kev npaj txhij txog kev ua lag luam nested, thiab los ntawm tus lej nyeem tau qhov pom, nws tuaj yeem ua rau nws nyuaj rau kev nkag siab tus neeg sau qhov kev xav. Ua tib zoo saib ntawm qhov program hauv qab no:
with newTransaction():
Accounts.create("609-543-222")
with newTransaction():
Accounts.create("775-988-322")
throw Rollback();
Yuav ua li cas yog qhov tso zis ntawm cov cai saum toj no? Nws puas yuav thim rov qab ob qho kev lag luam, lossis tsuas yog sab hauv? Yuav ua li cas yog tias peb cia siab rau ntau txheej ntawm cov tsev qiv ntawv uas encapsulate tsim kev lag luam rau peb? Peb puas tuaj yeem txheeb xyuas thiab txhim kho cov xwm txheej zoo li no?
Xav txog cov ntaub ntawv txheej nrog ntau yam haujlwm (piv txwv li. newAccount) twb tau siv nyob rau hauv nws tus kheej muas. Yuav ua li cas yog tias koj khiav lawv raws li ib feem ntawm theem siab ntawm kev lag luam logic uas khiav hauv nws tus kheej kev lag luam? Dab tsi yuav yog qhov kev sib cais thiab kev sib haum xeeb hauv qhov no?
function newAccount(id string) {
with newTransaction():
Accounts.create(id)
}
Hloov chaw ntawm kev tshawb nrhiav cov lus teb rau cov lus nug tsis kawg, nws yog qhov zoo dua kom tsis txhob muaj kev sib pauv nested. Tom qab tag nrho, koj cov ntaub ntawv txheej tuaj yeem ua tau yooj yim ua haujlwm siab yam tsis tau tsim nws tus kheej kev lag luam. Tsis tas li ntawd, kev lag luam logic nws tus kheej muaj peev xwm pib ua lag luam, ua haujlwm ntawm nws, ua lag luam lossis rho tawm kev lag luam.
function newAccount(id string) {
Accounts.create(id)
}
// In main application:
with newTransaction():
// Read some data from database for configuration.
// Generate an ID from the ID service.
Accounts.create(id)
Uploads.create(id) // create upload queue for the user.
Kev ua lag luam yuav tsum tsis txhob muab khi rau lub xeev daim ntawv thov
Qee lub sij hawm nws yog ntxias siv daim ntawv thov xeev hauv kev hloov pauv qee qhov txiaj ntsig lossis tweak cov lus nug tsis tau. Qhov tseem ceeb nuance los xav txog yog qhov tseeb ntawm daim ntawv thov. Cov neeg siv khoom feem ntau rov pib ua lag luam thaum muaj teeb meem hauv network. Yog tias qhov kev hloov pauv ces nyob ntawm lub xeev uas tau hloov pauv los ntawm qee qhov txheej txheem, nws tuaj yeem xaiv tus nqi tsis raug nyob ntawm qhov muaj peev xwm ntawm cov ntaub ntawv sib tw. Kev lag luam yuav tsum txiav txim siab txog qhov pheej hmoo ntawm cov ntaub ntawv haiv neeg hauv daim ntawv thov.
var seq int64
with newTransaction():
newSeq := atomic.Increment(&seq)
Entries.query(newSeq)
// Other operations...
Cov kev sib pauv saum toj no yuav nce tus lej sib npaug txhua zaus nws raug tua, tsis hais qhov kawg tshwm sim. Yog tias qhov kev cog lus ua tsis tiav vim muaj teeb meem hauv network, qhov kev thov yuav raug ua nrog tus lej sib txawv thaum koj sim dua.
Query planners txiav txim siab yuav ua li cas cov lus nug yuav raug ua tiav hauv cov ntaub ntawv. Lawv kuj txheeb xyuas qhov kev thov thiab ua kom zoo rau lawv ua ntej xa lawv. Cov phiaj xwm tsuas tuaj yeem muab qee qhov kev kwv yees ua tau raws li cov cim qhia ntawm lawv qhov chaw pov tseg. Piv txwv li, txoj kev tshawb nrhiav zoo tshaj plaws rau cov lus nug hauv qab no yog dab tsi?
SELECT * FROM articles where author = "rakyll" order by title;
Cov txiaj ntsig tuaj yeem rov qab los ntawm ob txoj hauv kev:
Tag nrho lub rooj scan: Koj tuaj yeem saib txhua qhov nkag hauv lub rooj thiab xa cov ntawv xa rov qab nrog lub npe sib xws, thiab tom qab ntawd xaj lawv.
Index scan: Koj tuaj yeem siv qhov ntsuas ntsuas kom pom cov ID sib xws, tau cov kab ntawd, thiab tom qab ntawd xaj lawv.
Cov lus nug npaj txoj haujlwm yog los txiav txim siab seb lub tswv yim twg yog qhov zoo tshaj plaws. Nws tsim nyog xav txog tias cov lus nug cov phiaj xwm tsuas yog muaj peev xwm twv ua ntej xwb. Qhov no tuaj yeem ua rau kev txiav txim siab tsis zoo. DBAs lossis cov neeg tsim khoom siv tau los kuaj xyuas thiab kho cov lus nug tsis zoo. Cov qauv tshiab ntawm DBMS tuaj yeem teeb tsa cov lus nug cov phiaj xwm, thiab kev kuaj tus kheej tuaj yeem pab thaum hloov kho cov ntaub ntawv yog tias qhov tshiab version ua rau muaj teeb meem kev ua haujlwm. Cov lus nug qeeb qeeb, cov ntaub ntawv qhia txog qhov teeb meem latency, lossis lub sijhawm ua tiav cov txheeb cais tuaj yeem pab txheeb xyuas cov lus nug uas xav tau kev ua kom zoo.
Qee qhov kev ntsuas uas tau nthuav tawm los ntawm tus txheej txheem nug yuav raug lub suab nrov (tshwj xeeb tshaj yog thaum kwv yees latency lossis CPU sijhawm). Ib qho zoo ntxiv rau cov teem caij yog cov cuab yeej rau kev taug qab thiab taug qab txoj kev ua tiav. Lawv tso cai rau koj kuaj xyuas cov teeb meem no (alas, tsis yog txhua tus DBMSs muab cov cuab yeej zoo li no).
Kev tsiv teb tsaws chaw online yog qhov nyuaj tab sis ua tau
Thaum lub sij hawm kuv pib xav txog kev tshaj tawm tsab xov xwm no, twb muaj tsib yam khoom ntxiv ntawm kuv daim ntawv teev thawj. Tom qab ntawd tuaj tus lej loj tswv yim tshiab txog dab tsi ntxiv tuaj yeem them. Yog li ntawd, tsab xov xwm kov txog qhov teeb meem tsawg tshaj plaws uas yuav tsum tau ua kom siab tshaj plaws. Txawm li cas los xij, qhov no tsis tau txhais hais tias lub ntsiab lus tau tas lawm thiab kuv yuav tsis rov qab los rau hauv kuv cov ntaub ntawv yav tom ntej thiab yuav tsis hloov pauv rau qhov tam sim no.