Plis devlopè ta dwe konnen sa a sou baz done

Remak. trad.: Jaana Dogan se yon enjenyè ki gen eksperyans nan Google ki aktyèlman ap travay sou obsèvasyon sèvis pwodiksyon konpayi an ekri nan Go. Nan atik sa a, ki te genyen gwo popilarite nan mitan odyans ki pale angle a, li te kolekte nan 17 pwen detay teknik enpòtan konsènan DBMS yo (e pafwa sistèm distribiye an jeneral) ki itil yo konsidere pou devlopè nan aplikasyon gwo / mande.

Plis devlopè ta dwe konnen sa a sou baz done

A vas majorite nan sistèm òdinatè kenbe tras nan eta yo epi, kòmsadwa, mande pou kèk kalite sistèm depo done. Mwen akimile konesans sou baz done sou yon peryòd tan long, sou wout la fè erè konsepsyon ki te mennen nan pèt done ak pann. Nan sistèm ki trete gwo volim enfòmasyon, baz done kouche nan kè a nan achitekti sistèm nan epi yo aji kòm yon eleman kle nan chwazi solisyon an pi bon. Malgre lefèt ke yo peye anpil atansyon sou travay baz done a, pwoblèm yo ke devlopè aplikasyon yo eseye antisipe yo souvan jis pwent iceberg la. Nan seri atik sa a, mwen pataje kèk lide ki pral itil pou devlopè ki pa espesyalize nan domèn sa a.

  1. Ou gen chans si 99,999% nan tan rezo a pa lakòz pwoblèm.
  2. ACID vle di anpil bagay diferan.
  3. Chak baz done gen mekanis pwòp li yo pou asire konsistans ak izolasyon.
  4. Bloke optimis vin pote sekou lè li difisil pou kenbe yon sèl nòmal la.
  5. Gen lòt anomali san konte lekti sal ak pèt done.
  6. Baz done a ak itilizatè a pa toujou dakò sou kou a nan aksyon.
  7. Yo ka deplase sharding nan nivo aplikasyon an deyò aplikasyon an.
  8. Autoincrementing kapab danjere.
  9. Done rasi ka itil epi yo pa bezwen fèmen.
  10. Distòsyon yo tipik pou nenpòt sous tan.
  11. Reta gen anpil siyifikasyon.
  12. Kondisyon pèfòmans yo ta dwe evalye pou yon tranzaksyon espesifik.
  13. Tranzaksyon anbrike yo ka danjere.
  14. Tranzaksyon yo pa ta dwe mare nan eta aplikasyon an.
  15. Planifikatè rechèch yo ka di w anpil bagay sou baz done.
  16. Migrasyon sou entènèt difisil, men posib.
  17. Yon ogmantasyon siyifikatif nan baz done a enplike nan yon ogmantasyon nan enprevizib.

Mwen ta renmen remèsye Emmanuel Odeke, Rein Henrichs ak lòt moun pou fidbak yo sou yon vèsyon pi bonè atik sa a.

Ou gen chans si 99,999% nan tan rezo a pa lakòz pwoblèm.

Kesyon an rete sou ki jan serye teknoloji rezo modèn yo ak konbyen fwa sistèm yo desann akòz echèk rezo a. Enfòmasyon sou pwoblèm sa a ra ak rechèch souvan domine pa gwo òganizasyon ki gen rezo espesyalize, ekipman ak pèsonèl.

Avèk yon to disponiblite 99,999% pou Spanner (baz done Google distribye globalman), Google reklame ke sèlman 7,6% pwoblèm yo gen rapò ak rezo a. An menm tan an, konpayi an rele rezo espesyalize li yo "poto prensipal" nan disponiblite segondè. Etidye Bailis ak Kingsbury, fèt an 2014, defi youn nan "move konsepsyon sou distribye informatique", ki Peter Deutsch te fòme an 1994. Èske rezo a vrèman serye?

Rechèch konplè deyò nan konpayi jeyan, ki fèt pou entènèt la pi laj, tou senpleman pa egziste. Epitou pa gen ase done ki soti nan gwo jwè yo sou ki pousantaj pwoblèm kliyan yo ki gen rapò ak rezo a. Nou byen okouran de pann nan pil rezo a nan gwo founisè nwaj ki ka pran desann yon moso antye nan Entènèt la pou plizyè èdtan tou senpleman paske yo se evènman gwo pwofil ki afekte yon gwo kantite moun ak konpayi yo. Pann rezo a ka lakòz pwoblèm nan anpil plis ka, menm si se pa tout ka sa yo ki nan dokiman Pwen Enpòtan an. Kliyan sèvis nwaj yo tou pa konnen anyen sou kòz pwoblèm yo. Si gen yon echèk, li se prèske enposib atribiye li nan yon erè rezo sou bò founisè sèvis la. Pou yo, sèvis twazyèm pati yo se bwat nwa. Li enposib pou evalye enpak la san yo pa yon gwo founisè sèvis.

Etandone sa gwo jwè yo rapòte sou sistèm yo, li an sekirite pou di ou gen chans si difikilte rezo a reprezante sèlman yon ti pousantaj pwoblèm potansyèl D '. Kominikasyon rezo toujou soufri de bagay sa yo mundan tankou echèk pyès ki nan konpitè, chanjman topoloji, chanjman konfigirasyon administratif, ak pann kouran. Dènyèman, mwen te sezi aprann ke lis pwoblèm posib yo te ajoute mòde reken (wi, ou tande byen).

ACID vle di anpil bagay diferan

Akwonim ACID la vle di Atomisite, konsistans, izolasyon, fyab. Pwopriyete sa yo nan tranzaksyon yo gen entansyon asire validite yo nan evènman an nan echèk, erè, echèk pyès ki nan konpitè, elatriye. San ACID oswa plan ki sanble, li ta difisil pou devlopè aplikasyon yo fè diferans ant sa yo responsab pou ak ki sa baz done a responsab pou. Pifò baz done relasyon relasyon yo eseye konfòme ACID, men nouvo apwòch tankou NoSQL te bay anpil baz done san tranzaksyon ACID paske yo chè pou aplike.

Lè mwen te premye antre nan endistri a, plon teknik nou an te pale sou ki jan enpòtan konsèp ACID la te. Pou nou jis, ACID konsidere kòm yon deskripsyon ki graj olye ke yon estanda aplikasyon strik. Jodi a mwen jwenn li sitou itil paske li soulve yon kategori espesifik nan pwoblèm (epi sijere yon seri solisyon posib).

Se pa tout DBMS ki konfòme ACID; An menm tan an, aplikasyon baz done ki sipòte ACID konprann seri kondisyon yo yon fason diferan. Youn nan rezon ki fè aplikasyon ACID yo paka se akòz anpil konpwomi ki dwe fèt pou aplike egzijans ACID yo. Kreyatè yo ka prezante baz done yo kòm ACID-konfòme, men entèpretasyon an nan ka kwen yo ka varye dramatikman, menm jan yo pral mekanis pou jere evènman "enpwobab". Omwen, devlopè yo ka jwenn yon konpreyansyon wo nivo sou sibtilite yo nan aplikasyon baz yo jwenn yon konpreyansyon apwopriye sou konpòtman espesyal yo ak konsepsyon konpwomi.

Deba sou si MongoDB konfòme ak egzijans ACID ap kontinye menm apre lage vèsyon 4 la. MongoDB pa te sipòte pou yon tan long antre, byenke done default yo te angaje nan disk pa plis pase yon fwa chak 60 segonn. Imajine senaryo sa a: yon aplikasyon poste de ekri (w1 ak w2). MongoDB estoke w1 avèk siksè, men w2 pèdi akòz yon echèk pyès ki nan konpitè.

Plis devlopè ta dwe konnen sa a sou baz done
Dyagram ki montre senaryo a. MongoDB aksidan anvan li ka ekri done sou disk

Komèt ak disk se yon pwosesis chè. Lè yo evite komèt souvan, devlopè amelyore pèfòmans anrejistreman nan depans lan nan fyab. Kounye a, MongoDB sipòte anrejistreman, men ekriti sal ka toujou gen enpak sou entegrite done depi mòso bwa yo kaptire chak 100ms pa default. Sa vle di, yon senaryo menm jan an toujou posib pou mòso bwa ak chanjman ki prezante nan yo, byenke risk la pi ba anpil.

Chak baz done gen pwòp konsistans ak mekanis izolasyon li yo

Nan kondisyon ACID yo, konsistans ak izolasyon gen pi gwo kantite aplikasyon diferan paske seri konpwomi yo pi laj. Li dwe di ke konsistans ak izolasyon yo se fonksyon byen chè. Yo mande kowòdinasyon epi ogmante konpetisyon pou konsistans done yo. Konpleksite pwoblèm nan ogmante anpil lè li nesesè pou echèl baz done a orizontal atravè plizyè sant done (sitou si yo sitiye nan diferan rejyon jeyografik). Reyalize yon wo nivo konsistans trè difisil, paske li tou redwi disponiblite ak ogmante segmentasyon rezo a. Pou yon eksplikasyon pi jeneral sou fenomèn sa a, mwen konseye w fè referans a Teyorèm CAP. Li se tou vo sonje ke aplikasyon yo ka okipe ti kantite enkonsistans, ak pwogramasyon yo ka konprann nuans yo nan pwoblèm nan ase byen pou aplike lojik adisyonèl nan aplikasyon an pou jere enkonsistans san yo pa konte anpil sou baz done a pou okipe li.

DBMS yo souvan bay diferan nivo izolasyon. Devlopè aplikasyon yo ka chwazi youn ki pi efikas selon preferans yo. Izolasyon ki ba pèmèt pou ogmante vitès, men tou, ogmante risk pou yon ras done. Segondè izolasyon diminye pwobabilite sa a, men ralanti travay epi li ka mennen nan konpetisyon, ki pral mennen nan fren sa yo nan baz la ki echèk kòmanse.

Plis devlopè ta dwe konnen sa a sou baz done
Revizyon modèl ki egziste deja ak relasyon ant yo

Estanda SQL defini sèlman kat nivo izolasyon, byenke nan teyori ak pratik gen anpil plis. Jepson.io ofri yon apèsi ekselan sou modèl konkou ki deja egziste. Pou egzanp, Google Spanner garanti seri serializasyon ekstèn ak senkronizasyon revèy, e byenke sa a se yon kouch izolasyon pi strik, li pa defini nan kouch izolasyon estanda.

Estanda SQL la mansyone nivo izolasyon sa yo:

  • Serializabl (ki pi sevè ak chè): Serializable ekzekisyon gen menm efè ak kèk ekzekisyon tranzaksyon sekans. Egzekisyon sekans vle di ke chak tranzaksyon ki vin apre kòmanse sèlman apre yo fin fè youn anvan an. Li ta dwe remake ke moun ki nivo a Serializabl souvan aplike kòm sa yo rele izolasyon snapshot (pa egzanp, nan Oracle) akòz diferans ki genyen nan entèpretasyon, byenke izolasyon snapshot tèt li pa reprezante nan estanda SQL la.
  • Lekti ki ka repete: Dosye ki pa angaje nan tranzaksyon aktyèl la disponib pou tranzaksyon aktyèl la, men chanjman lòt tranzaksyon yo fè (tankou nouvo ranje) pa vizib.
  • Li pran angajman: Done ki pa angaje yo pa disponib pou tranzaksyon yo. Nan ka sa a, tranzaksyon yo ka sèlman wè done komèt, ak lekti fantom ka rive. Si yon tranzaksyon mete ak komèt nouvo ranje, tranzaksyon aktyèl la pral kapab wè yo lè yo mande yo.
  • Li pa angaje (pi piti nivo strik ak chè): lekti sal yo gen dwa, tranzaksyon yo ka wè chanjman ki pa angaje lòt tranzaksyon yo. Nan pratik, nivo sa a ka itil pou estimasyon ki graj, tankou demann COUNT(*) sou tab la.

Nivo Serializabl minimize risk done ras, pandan ke yo te pi chè pou aplike ak sa ki lakòz chaj ki pi wo konpetitif sou sistèm nan. Lòt nivo izolasyon yo pi fasil pou aplike, men ogmante chans pou ras done yo. Gen kèk DBMS ki pèmèt ou mete yon nivo izolasyon koutim, lòt moun gen preferans fò epi yo pa tout nivo yo sipòte.

Sipò pou nivo izolasyon yo souvan pibliye nan yon DBMS bay, men se sèlman yon etid atansyon sou konpòtman li yo ka revele sa k ap pase aktyèlman.

Plis devlopè ta dwe konnen sa a sou baz done
Revizyon anomali konkou nan diferan nivo izolasyon pou diferan DBMS

Martin Kleppmann nan pwojè li a lermitaj Konpare diferan nivo izolasyon, pale sou anomali konkou, epi si baz done a kapab konfòme yo ak yon nivo izolasyon patikilye. Rechèch Kleppmann montre kouman devlopè baz done yo panse sou nivo izolasyon yo.

Bloke optimis vin pote sekou lè li difisil pou kenbe yon sèl nòmal la.

Bloke ka trè chè, pa sèlman paske li ogmante konpetisyon nan baz done a, men tou paske li mande pou sèvè aplikasyon yo toujou ap konekte nan baz done a. Segmantasyon rezo a ka agrave sitiyasyon bloke eksklizif epi mennen nan enpas ki difisil pou idantifye ak rezoud. Nan ka kote bloke eksklizif pa apwopriye, fèmen optimis ede.

Optimis fèmen se yon metòd kote lè li li yon fisèl, li pran an kont vèsyon li, sòm chèk, oswa tan dènye modifikasyon li. Sa a pèmèt ou asire ke pa gen okenn chanjman vèsyon atomik anvan ou chanje yon antre:

UPDATE products
SET name = 'Telegraph receiver', version = 2
WHERE id = 1 AND version = 1

Nan ka sa a, mete ajou tab la products pa pral fèt si yon lòt operasyon te deja fè chanjman nan ranje sa a. Si pa gen okenn lòt operasyon yo te fèt sou ranje sa a, chanjman an pou yon ranje ap fèt epi nou ka di ke aktyalizasyon a te reyisi.

Gen lòt anomali san konte lekti sal ak pèt done

Lè li rive konsistans done, konsantre a se sou potansyèl la pou kondisyon ras ki ka mennen nan lekti sal ak pèt done. Sepandan, anomali done pa sispann la.

Youn nan egzanp anomali sa yo se distorsyon anrejistreman (ekri skews). Defòmasyon yo difisil pou detekte paske yo pa anjeneral aktivman chèche. Yo pa akòz lekti sal oswa pèt done, men nan vyolasyon kontrent lojik yo mete sou done yo.

Pou egzanp, ann konsidere yon aplikasyon siveyans ki mande pou yon operatè rete sou apèl tout tan:

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;

Nan sitiyasyon ki pi wo a, yon dosye koripsyon pral rive si tou de tranzaksyon yo avèk siksè komèt. Malgre ke pa te gen okenn lekti sal oswa pèt done, entegrite nan done yo te konpwomèt: kounye a de moun yo konsidere kòm sou-apèl an menm tan an.

Izolasyon seri, konsepsyon chema, oswa kontrent baz done ka ede elimine koripsyon ekri. Devlopè yo dwe kapab idantifye anomalies sa yo pandan devlopman pou evite yo nan pwodiksyon. An menm tan an, distorsyon anrejistreman yo trè difisil pou chèche nan baz kòd la. Espesyalman nan sistèm gwo, lè ekip devlopman diferan yo responsab pou mete ann aplikasyon fonksyon ki baze sou menm tab yo epi yo pa dakò sou spesifik yo nan aksè done yo.

Baz done a ak itilizatè a pa toujou dakò sou sa yo dwe fè

Youn nan karakteristik prensipal yo nan baz done se garanti a nan lòd ekzekisyon, men lòd sa a tèt li ka pa transparan nan pwomotè lojisyèl an. Baz done egzekite tranzaksyon yo nan lòd yo resevwa yo, pa nan lòd pwogramè yo gen entansyon. Lòd tranzaksyon yo difisil pou predi, espesyalman nan sistèm paralèl ki chaje anpil.

Pandan devlopman, espesyalman lè w ap travay ak bibliyotèk ki pa bloke, style pòv ak lizibilite ki ba ka lakòz itilizatè yo kwè ke tranzaksyon yo egzekite sekans, lè an reyalite yo te kapab rive nan baz done a nan nenpòt lòd.

Nan premye gade, nan pwogram ki anba a, yo rele T1 ak T2 sekans, men si fonksyon sa yo pa bloke epi imedyatman retounen rezilta a nan fòm lan. pwomès, Lè sa a, lòd apèl yo pral detèmine pa moman yo lè yo te antre nan baz done a:

rezilta1 = T1() // rezilta reyèl yo se pwomès
rezilta2 = T2()

Si atomite nesesè (ki vle di, swa tout operasyon yo dwe fini oswa avòte) ak pwoblèm sekans, Lè sa a, operasyon T1 ak T2 yo dwe fèt nan yon sèl tranzaksyon.

Yo ka deplase sharding nan nivo aplikasyon an deyò aplikasyon an

Sharding se yon metòd pou divize yon baz done orizontal. Gen kèk baz done ka otomatikman divize done orizontal, pandan ke lòt moun pa kapab, oswa yo pa trè bon nan li. Lè achitèk/devlopè done yo kapab predi egzakteman ki jan done yo pral jwenn aksè, yo ka kreye patisyon orizontal nan espas itilizatè olye pou yo delege travay sa a nan baz done a. Pwosesis sa a rele "sharding nivo aplikasyon" (sharding nivo aplikasyon).

Malerezman, non sa a souvan kreye miskonsepsyon ke sharding ap viv nan sèvis aplikasyon yo. An reyalite, li ka aplike kòm yon kouch separe devan baz done a. Tou depan de kwasans done ak iterasyon chema, kondisyon sharding ka vin byen konplèks. Gen kèk estrateji ki ka benefisye de kapasite pou yo repete san yo pa oblije redeplwaye sèvè aplikasyon yo.

Plis devlopè ta dwe konnen sa a sou baz done
Yon egzanp yon achitekti kote sèvè aplikasyon yo separe ak sèvis sharding la

Deplase sharding nan yon sèvis separe ogmante kapasite pou itilize diferan estrateji sharding san yo pa bezwen re-deplwaye aplikasyon yo. Vitess se yon egzanp tankou yon sistèm sharding nan nivo aplikasyon an. Vitess bay sharding orizontal pou MySQL epi li pèmèt kliyan konekte li atravè pwotokòl MySQL la. Sistèm nan segments done yo nan diferan nœuds MySQL ki pa konnen anyen sou youn ak lòt.

Autoincrementing kapab danjere

AUTOINCREMENT se yon fason komen pou jenere kle prensipal yo. Gen souvan ka lè baz done yo itilize kòm jeneratè ID, epi baz done a gen tab ki fèt pou jenere idantifyan. Gen plizyè rezon ki fè jenere kle prensipal lè l sèvi avèk oto-enkreman se byen lwen ideyal:

  • Nan yon baz done distribiye, oto-enkreman se yon pwoblèm grav. Pou jenere idantite a, yon seri global obligatwa. Olye de sa, ou ka jenere yon UUID: sa a pa mande pou entèraksyon ant diferan nœuds baz done. Oto-enkreman ak kadna ka mennen nan diskisyon ak siyifikativman diminye pèfòmans sou foure nan sitiyasyon distribiye. Gen kèk DBMS (pa egzanp, MySQL) ka mande pou konfigirasyon espesyal ak plis atansyon pou byen òganize replikasyon mèt-mèt. Epi li fasil pou fè erè lè konfigirasyon, ki pral mennen nan echèk anrejistreman.
  • Gen kèk baz done ki gen algoritm patisyon ki baze sou kle prensipal yo. ID youn apre lòt ka mennen nan tach cho enprevizib ak ogmante chaj sou kèk patisyon pandan ke lòt yo rete san fè anyen konsa.
  • Yon kle prensipal se fason ki pi rapid pou jwenn aksè nan yon ranje nan yon baz done. Avèk pi bon fason yo idantifye dosye, ID sekans yo ka vire kolòn ki pi enpòtan nan tab yo nan yon kolòn initil plen ak valè san sans. Kidonk, chak fwa sa posib, tanpri chwazi yon kle prensipal ki inik ak natirèl (pa egzanp non itilizatè).

Anvan w deside sou yon apwòch, konsidere enpak ID oto-enkreman ak UUID sou endèks, patisyon, ak sharding.

Done rasi ka itil epi yo pa mande pou bloke

Kontwòl Multiversion Concurrency (MVCC) aplike anpil nan kondisyon konsistans ki te diskite pi wo a yon ti tan. Gen kèk baz done (pa egzanp, Postgres, Spanner) ki itilize MVCC pou "alimente" tranzaksyon yo ak snapshots—pi ansyen vèsyon baz done a. Tranzaksyon snapshot yo ka serialize tou pou asire konsistans. Lè w ap li nan yon snapshot fin vye granmoun, done demode yo li.

Lekti done yon ti kras rasi ka itil, pou egzanp, lè w ap jenere analiz apati done yo oswa lè w ap kalkile valè total apwoksimatif.

Premye avantaj nan travay ak done eritaj se latansi ki ba (sitou si baz done a distribye atravè diferan jewografi). Dezyèm lan se ke tranzaksyon lekti sèlman yo pa fèmen. Sa a se yon avantaj enpòtan pou aplikasyon ki li anpil, osi lontan ke yo ka okipe done rasi.

Plis devlopè ta dwe konnen sa a sou baz done
Sèvè aplikasyon an li done ki soti nan kopi lokal la ki se 5 segonn demode, menm si dènye vèsyon an disponib sou lòt bò a nan Oseyan Pasifik la.

DBMS yo otomatikman netwaye ansyen vèsyon yo epi, nan kèk ka, pèmèt ou fè sa sou demann. Pou egzanp, Postgres pèmèt itilizatè yo fè VACUUM sou demann, epi tou detanzantan fè operasyon sa a otomatikman. Spanner kouri yon pèseptè fatra pou debarase m de snapshots ki gen plis pase inèdtan.

Nenpòt ki lè sous yo sijè a deformation

Sekrè ki pi byen kenbe nan syans enfòmatik se ke tout API distribisyon bay manti. An reyalite, machin nou yo pa konnen tan egzak aktyèl la. Òdinatè yo gen kristal kwatz ki jenere vibrasyon ke yo itilize pou kenbe tan. Sepandan, yo pa egzat ase epi yo ka devan/lag dèyè tan egzak la. Chanjman an ka rive nan 20 segonn pa jou. Se poutèt sa, tan an sou òdinatè nou yo dwe detanzantan senkronize ak yon sèl rezo a.

Serveurs NTP yo te itilize pou synchronisation, men pwosesis synchronisation tèt li sijè a reta rezo. Menm senkronize ak yon sèvè NTP nan menm sant done a pran kèk tan. Li klè ke travay ak yon sèvè NTP piblik ka mennen nan menm pi gwo deformation.

Revèy atomik ak tokay GPS yo pi bon pou detèmine tan aktyèl la, men yo chè epi yo mande konfigirasyon konplèks, kidonk yo pa ka enstale sou chak machin. Poutèt sa, sant done yo itilize yon apwòch gradyèl. Revèy atomik ak/oswa GPS montre tan egzak la, apre sa li emèt nan lòt machin atravè sèvè segondè. Sa vle di ke chak machin pral fè eksperyans yon sèten konpanse soti nan tan egzak la.

Se sitiyasyon an agrave pa lefèt ke aplikasyon ak baz done yo souvan sitiye sou machin diferan (si se pa nan sant done diferan). Kidonk, tan an ap diferan pa sèlman sou nœuds DB distribye atravè diferan machin. Li pral diferan tou sou sèvè aplikasyon an.

Google TrueTime pran yon apwòch konplètman diferan. Pifò moun kwè ke pwogrè Google nan direksyon sa a eksplike pa tranzisyon an ordinèr nan revèy atomik ak GPS, men sa a se sèlman yon pati nan gwo foto a. Men ki jan TrueTime travay:

  • TrueTime itilize de sous diferan: GPS ak revèy atomik. Revèy sa yo gen mòd echèk ki pa korelasyon. [gade paj 5 pou plis detay isit la - approx. trad.), kidonk itilizasyon jwenti yo ogmante fyab.
  • TrueTime gen yon API etranj. Li retounen tan kòm yon entèval ak erè mezi ak ensètitid bati nan li. Moman aktyèl la nan tan se yon kote ant limit anwo ak pi ba entèval la. Spanner, baz done Google distribye, tou senpleman tann jiskaske li an sekirite pou di ke tan aktyèl la pa nan ranje. Metòd sa a entwodui kèk latansi nan sistèm nan, espesyalman si ensètitid la sou mèt yo wo, men asire kòrèkteman menm nan yon sitiyasyon globalman distribye.

Plis devlopè ta dwe konnen sa a sou baz done
Konpozan Spanner yo sèvi ak TrueTime, kote TT.now() retounen yon entèval, kidonk Spanner a tou senpleman dòmi jouk nan pwen kote li ka gen konfyans ke tan aktyèl la te pase yon sèten pwen.

Diminye presizyon nan detèmine tan aktyèl la vle di yon ogmantasyon nan dire operasyon Spanner ak yon diminisyon nan pèfòmans. Se poutèt sa li enpòtan pou kenbe pi gwo presizyon posib menm si li enposib pou jwenn yon mont konplètman egzat.

Reta gen anpil siyifikasyon

Si ou mande yon douzèn ekspè sou sa yon reta se, ou pral pwobableman jwenn repons diferan. Nan DBMS latansi yo rele souvan "latansi baz done" epi li diferan de sa kliyan an wè. Reyalite a se ke kliyan an obsève sòm reta rezo a ak reta baz done a. Kapasite pou izole kalite latansi a se kritik lè debogaj pwoblèm k ap grandi. Lè w kolekte epi montre mezi, toujou eseye voye je sou tou de kalite yo.

Kondisyon pèfòmans yo ta dwe evalye pou yon tranzaksyon espesifik

Pafwa karakteristik pèfòmans yon DBMS ak limit li yo espesifye an tèm de debi ekri / lekti ak latansi. Sa a bay yon apèsi jeneral sou paramèt sistèm kle yo, men lè w ap evalye pèfòmans yon nouvo DBMS, yon apwòch ki pi konplè se evalye separeman operasyon kritik (pou chak demann ak/oswa tranzaksyon). Egzanp:

  • Ekri debi ak latansi lè w ap mete yon nouvo ranje nan tablo X (ak 50 milyon ranje) ak kontrent espesifye ak padding ranje nan tablo ki gen rapò.
  • Reta nan montre zanmi zanmi yon itilizatè sèten lè kantite mwayèn zanmi se 500.
  • Latans nan rekipere 100 premye antre yo nan istwa yon itilizatè lè itilizatè a swiv 500 lòt itilizatè ak X antre pou chak èdtan.

Evalyasyon ak eksperimantasyon ka enkli ka kritik sa yo jiskaske ou gen konfyans ke baz done a satisfè kondisyon pèfòmans yo. Yon règ ki sanble tou pran dekonpozisyon sa a an kont lè yo kolekte mezi latansi ak detèmine SLO yo.

Ou dwe konsyan de kardinalite segondè lè w ap kolekte mezi pou chak operasyon. Sèvi ak mòso bwa, koleksyon evènman oswa trase distribiye pou jwenn done debogaj ki gen gwo pouvwa. Nan atik la "Vle Debug Latansi?» ou ka familyarize tèt ou ak metodoloji debogaj reta.

Tranzaksyon anbrike yo ka danjere

Se pa tout DBMS ki sipòte tranzaksyon anbrike, men lè yo fè sa, tranzaksyon sa yo ka lakòz erè inatandi ki pa toujou fasil pou detekte (sa vle di, li ta dwe evidan ke gen yon kalite anomali).

Ou ka evite itilize tranzaksyon anbrike lè l sèvi avèk bibliyotèk kliyan ki ka detekte ak kontoune yo. Si tranzaksyon yo pa ka abandone, pran swen espesyal nan aplikasyon yo pou evite sitiyasyon inatandi kote tranzaksyon yo fini yo aksidantèlman avòte akòz sa yo ki enbrike.

Enkapsulasyon tranzaksyon yo nan diferan kouch ka mennen nan tranzaksyon enbrike inatandi, ak nan yon pwen de vi lizibilite kòd, li ka fè li difisil pou konprann entansyon otè a. Gade nan pwogram sa a:

with newTransaction():
   Accounts.create("609-543-222")
   with newTransaction():
       Accounts.create("775-988-322")
       throw Rollback();

Ki sa ki pral pwodiksyon an nan kòd ki pi wo a? Èske li woule tounen tou de tranzaksyon yo, oswa jis yon sèl anndan an? Kisa k ap pase si nou konte sou plizyè kouch bibliyotèk ki ankapsile kreyasyon tranzaksyon pou nou? Èske n ap kapab idantifye ak amelyore ka sa yo?

Imajine yon kouch done ak plizyè operasyon (egzanp. newAccount) deja aplike nan pwòp tranzaksyon li yo. Kisa k ap pase si ou kouri yo kòm yon pati nan pi wo nivo lojik biznis ki kouri nan pwòp tranzaksyon li yo? Ki sa ki ta dwe izolasyon an ak konsistans nan ka sa a?

function newAccount(id string) {
  with newTransaction():
      Accounts.create(id)
}

Olye pou w chèche repons pou kesyon intèrminabl sa yo, li pi bon pou w evite tranzaksyon enbrike. Apre yo tout, kouch done ou ka fasilman fè operasyon wo nivo san yo pa kreye pwòp tranzaksyon li yo. Anplis de sa, lojik biznis nan tèt li se kapab kòmanse yon tranzaksyon, fè operasyon sou li, komèt oswa avòte yon tranzaksyon.

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.

Tranzaksyon yo pa ta dwe mare nan eta aplikasyon an

Pafwa li tante yo sèvi ak eta aplikasyon nan tranzaksyon yo chanje sèten valè oswa ajiste paramèt rechèch. Nuans nan kritik yo konsidere se sijè ki abòde ki kòrèk la nan aplikasyon an. Kliyan yo souvan rekòmanse tranzaksyon yo lè gen pwoblèm rezo. Si tranzaksyon an Lè sa a, depann sou yon eta ke yo te chanje pa kèk lòt pwosesis, li ka chwazi valè a mal depann sou posibilite pou yon ras done. Tranzaksyon yo dwe konsidere risk kondisyon ras done nan aplikasyon an.

var seq int64
with newTransaction():
    newSeq := atomic.Increment(&seq)
    Entries.query(newSeq)
    // Other operations...

Tranzaksyon ki anwo a ap ogmante nimewo sekans la chak fwa li egzekite, kèlkeswa rezilta final la. Si komite a echwe akòz pwoblèm rezo a, demann lan pral egzekite ak yon nimewo sekans diferan lè ou eseye ankò.

Planifikatè rechèch yo ka di w anpil bagay sou yon baz done

Planifikatè rechèch detèmine kijan yon rechèch pral egzekite nan yon baz done. Yo menm tou yo analize demann yo epi yo optimize yo anvan yo voye yo. Planifikatè yo ka sèlman bay kèk estimasyon posib ki baze sou siyal yo nan jete yo. Pou egzanp, ki pi bon metòd rechèch la pou rechèch sa a?

SELECT * FROM articles where author = "rakyll" order by title;

Rezilta yo ka rekipere nan de fason:

  • Full eskanè tab la: Ou ka gade chak antre nan tablo a epi retounen atik ki gen yon non otè ki koresponn, epi apresa kòmande yo.
  • Endèks eskanè: Ou ka itilize yon endèks pou jwenn idantite ki matche, jwenn ranje sa yo, epi kòmande yo.

Travay planifikatè rechèch la se detèmine ki estrateji ki pi bon. Li vo konsidere ke planifikatè rechèch yo gen sèlman kapasite prediksyon limite. Sa ka mennen nan move desizyon. DBAs oswa devlopè yo ka sèvi ak yo pou fè dyagnostik ak ajiste demann ki pa gen pèfòmans. Nouvo vèsyon DBMS yo ka configured planifikatè rechèch, ak pwòp tèt ou-dyagnostik ka ede lè mete ajou baz done a si nouvo vèsyon an mennen nan pwoblèm pèfòmans. Jounal demann ralanti, rapò pwoblèm latansi, oswa estatistik tan ekzekisyon ka ede idantifye demann ki bezwen optimize.

Gen kèk mezi ki prezante pa planifikatè rechèch la ka sijè a bri (espesyalman lè yo estime latansi oswa tan CPU). Yon bon adisyon nan pwogramasyon yo se zouti pou trase ak swiv chemen an ekzekisyon. Yo pèmèt ou fè dyagnostik pwoblèm sa yo (malè, se pa tout DBMS yo bay zouti sa yo).

Migrasyon sou entènèt difisil men posib

Migrasyon sou entènèt, migrasyon viv, oswa migrasyon an tan reyèl vle di deplase soti nan yon baz done nan yon lòt san yo pa tan interruption oswa koripsyon done. Migrasyon vivan pi fasil pou fè si tranzisyon an fèt nan menm DBMS/motè a. Sitiyasyon an vin pi konplike lè li nesesè pou avanse pou pi nan yon nouvo DBMS ak kondisyon diferan pèfòmans ak schema.

Gen diferan modèl migrasyon sou entènèt. Isit la se youn nan yo:

  • Pèmèt doub antre nan tou de baz done. Nouvo baz done a nan etap sa a pa gen tout done yo, men sèlman aksepte dènye done yo. Yon fwa ou sèten de sa a, ou ka ale nan pwochen etap la.
  • Pèmèt lekti nan tou de baz done.
  • Konfigure sistèm nan pou lekti ak ekri yo fèt sitou sou nouvo baz done a.
  • Sispann ekri nan ansyen baz done a pandan w ap kontinye li done ki soti nan li. Nan etap sa a, nouvo baz done a toujou san kèk done. Yo ta dwe kopye nan baz done ansyen an.
  • Ansyen baz done a se lekti sèlman. Kopi done ki manke yo nan ansyen baz done a nan nouvo a. Apre migrasyon an fini, chanje chemen yo nan nouvo baz done a, epi sispann ansyen an epi efase li nan sistèm nan.

Pou plis enfòmasyon, mwen rekòmande kontakte Atik, ki detaye estrateji migrasyon Stripe ki baze sou modèl sa a.

Yon ogmantasyon siyifikatif nan baz done a enplike nan yon ogmantasyon nan enprevizib

Kwasans baz done a mennen nan pwoblèm enprevizib ki asosye ak echèl li yo. Plis nou konnen sou estrikti entèn yon baz done, se pi bon nou ka predi ki jan li pral echèl. Sepandan, kèk moman yo toujou enposib pou prevwa.
Kòm baz la ap grandi, sipozisyon anvan yo ak atant konsènan volim done ak kondisyon Pleasant rezo a ka vin demode. Sa a se lè kesyon an rive nan gwo revizyon konsepsyon, gwo echèl amelyorasyon operasyonèl, repanse deplwaman, oswa migrasyon nan lòt DBMS pou evite pwoblèm potansyèl yo.

Men, pa panse ke konesans ekselan nan estrikti a entèn nan baz done a ki deja egziste se bagay la sèlman ki nesesè. Nouvo balans pral pote ak yo nouvo enkoni. Pwen doulè enprevizib, distribisyon done inegal, Pleasant inatandi ak pwoblèm pyès ki nan konpitè, trafik ki toujou ap ogmante ak nouvo segman rezo ap fòse ou repanse apwòch baz done ou, modèl done, modèl deplwaman, ak gwosè baz done.

...

Nan moman sa a mwen te kòmanse panse sou pibliye atik sa a, te deja senk atik plis sou lis orijinal mwen an. Lè sa a, te vini yon nimewo gwo nouvo lide sou ki lòt bagay ka kouvri. Se poutèt sa, atik la manyen sou pwoblèm ki pi piti evidan ki mande pou maksimòm atansyon. Sepandan, sa pa vle di ke sijè a te fin itilize epi mwen p ap retounen sou li ankò nan pwochen materyèl mwen yo epi mwen pa pral fè chanjman nan sa ki kounye a.

PS

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè