Vazhinji vagadziri vanofanirwa kuziva izvi nezve databases

Cherechedza. transl.: Jaana Dogan injinjiniya ane ruzivo kuGoogle parizvino ari kushanda pakuonekwa kwemakambani ekugadzira masevhisi akanyorwa muGo. Muchinyorwa chino, icho chakawana mukurumbira mukuru pakati pevateereri vanotaura Chirungu, akaunganidza mumapoinzi gumi nenomwe zvakakosha zvehunyanzvi zvine chekuita neDBMSs (uye dzimwe nguva akagoverwa masisitimu ese) ayo anobatsira kutarisisa kune vanogadzira makuru / anoda maapplication.

Vazhinji vagadziri vanofanirwa kuziva izvi nezve databases

Iyo yakawanda yemakomputa masisitimu anochengeta mamiriro avo uye, nekudaro, inoda imwe mhando yekuchengetedza data system. Ndakaunganidza ruzivo nezve databases kwenguva yakareba, munzira ndichiita zvikanganiso zvekugadzira izvo zvakakonzera kurasikirwa kwedata uye kubuda. Mune masisitimu anogadzirisa mavhoriyamu makuru eruzivo, dhatabhesi ari pamwoyo wehurongwa hwekuvaka uye anoita sechinhu chakakosha pakusarudza mhinduro yakakwana. Kunyangwe chokwadi chekuti kutarisisa kwakabhadharwa kune basa reiyo dhatabhesi, matambudziko ayo vanogadzira maapplication vanoedza kutarisira anowanzo ingori muromo weiyo iceberg. Mune ino nhevedzano yezvinyorwa, ini ndinogovera mamwe mazano anozobatsira kune vanogadzira vasina hunyanzvi mundima iyi.

  1. Iwe une rombo rakanaka kana 99,999% yenguva iyo network isiri kukonzera matambudziko.
  2. ACID inoreva zvinhu zvakawanda zvakasiyana.
  3. Imwe neimwe dhatabhesi ine maitiro ayo ekuona kuenderana uye kuparadzaniswa.
  4. Optimistic blocking inouya pakununura kana zvichinetsa kuchengetedza yakajairika.
  5. Pane zvimwe zvisizvo kunze kwekuverenga kwakasviba uye kurasikirwa kwedata.
  6. Iyo dhatabhesi uye mushandisi haagare achibvumirana pane chiitiko.
  7. Application-level sharding inogona kutamiswa kunze kwechishandiso.
  8. Autoincrementing inogona kuva nengozi.
  9. Stale data inogona kubatsira uye haidi kuvharwa.
  10. Kukanganisa kunowanzoitika kune chero nguva masosi.
  11. Kunonoka kune zvakawanda zvazvinoreva.
  12. Zvido zvekushanda zvinofanirwa kuongororwa kune chaiyo kutengeserana.
  13. Kutengeserana kwakagara mudende kunogona kuva nengozi.
  14. Transactions haifanirwe kusungirirwa kune application state.
  15. Mubvunzo vanoronga vanogona kukuudza zvakawanda nezve databases.
  16. Kutama pamhepo kwakaoma, asi zvinogoneka.
  17. Kuwedzera kwakakura kwedatabase kunosanganisira kuwedzera kwekusafungidzika.

Ndinoda kutenda Emmanuel Odeke, Rein Henrichs nevamwe nemhinduro yavo pane yekutanga vhezheni yechinyorwa ichi.

Iwe une rombo rakanaka kana 99,999% yenguva iyo network isiri kukonzera matambudziko.

Mubvunzo unoramba uri pamusoro pekuti tekinoroji dzemazuva ano dzakavimbika sei uye kangani masisitimu ari pasi nekuda kwekutadza kwetiweki. Ruzivo nezvenyaya iyi ishoma uye kutsvagisa kunowanzo tongwa nemasangano makuru ane hunyanzvi network, zvishandiso nevashandi.

Nechiyero chekuwanikwa che99,999% cheSpanner (Databhesi reGoogle rinoparadzirwa pasi rose), Google inoti chete 7,6% matambudziko ane chekuita netiweki. Panguva imwecheteyo, kambani inodana network yayo yakasarudzika "mbiru huru" yekuwanikwa kwepamusoro. Kudzidza Bailis uye Kingsbury, yakaitwa muna 2014, inodenha chimwe cheβ€œmaonero asiriwo pamusoro pekuparadzirwa komputa", iyo Peter Deutsch akagadzira muna 1994. Iyo network yakavimbika zvechokwadi here?

Tsvagiridzo yakazara kunze kwemakambani makuru, akaitirwa iyo Internet yakakura, haipo. Iko hakuna zvakare data rakakwana kubva kuvatambi vakuru pamusoro pehuwandu hwematambudziko evatengi vavo ane hukama-netiweki. Isu tinonyatsoziva nezvekudzima kwetiweki stack yevashandisi vemakore makuru vanogona kutora pasi chunk yese yeInternet kwemaawa akati wandei nekuda kwekuti zviitiko zvepamusoro-soro zvinokanganisa nhamba huru yevanhu nemakambani. Kudzima kwenetiweki kunogona kukonzera matambudziko mune dzakawanda zviitiko, kunyangwe zvisiri zvese izvo zviitiko zviri munzvimbo. Vatengi vemakore masevhisi zvakare havana chavanoziva nezvezvinokonzeresa matambudziko. Kana paine kukundikana, hazvigoneke kuti uzviratidze kune network kukanganisa kudivi remupi webasa. Kwavari, masevhisi echitatu mabhokisi matema. Hazvibviri kuongorora kukanganisa pasina kuva mukuru webasa.

Tichifunga zvinotaurwa nevatambi vakuru nezve masisitimu avo, zvakachengeteka kutaura kuti une rombo rakanaka kana matambudziko etiweki achiverengera chikamu chidiki chezvingangoitika zvenguva yekuderera. Nhaurirano dzenetiweki dzichiri kutambura kubva kuzvinhu zvakajairika sekutadza kwehardware, shanduko yetopology, shanduko yekumisikidzwa kwekutonga, uye kudzimwa kwemagetsi. Munguva ichangopfuura, ndakashamiswa kuziva kuti rondedzero yezvinetso zvinobvira yakawedzerwa kurumwa neshaki (hongu, wanzwa zvakanaka).

ACID inoreva zvinhu zvakawanda zvakasiyana

Acronym ACID inomirira Atomicity, Consistency, Isolation, Reliability. Izvi zvivakwa zvekutengeserana zvakagadzirirwa kuve nechokwadi chechokwadi chazvo muchiitiko chekutadza, kukanganisa, kutadza kwehardware, nezvimwe. Pasina ACID kana zvirongwa zvakafanana, zvingave zvakaoma kune vanogadzira maapplication kusiyanisa pakati pezvavanosungirira uye izvo dhatabhesi inokonzeresa. Mazhinji ehukama transaction dhatabhesi anoedza kutevedzera ACID, asi nzira nyowani dzakaita seNoSQL dzakapa kune akawanda dhatabhesi asina ACID transaction nekuti anodhura kuita.

Pandakatanga kupinda muindastiri, mutungamiri wedu wehunyanzvi akataura nezvekukosha kweiyo pfungwa yeACID. Kutaura chokwadi, ACID inoonekwa setsanangudzo yakakasharara kwete chiyero chakasimba chekuita. Nhasi ndinoiona ichinyanya kubatsira nekuti inosimudza rimwe boka rematambudziko (uye inopa mazano emhinduro dzinobvira).

Haisi yese DBMS inoenderana neACID; Panguva imwecheteyo, kushandiswa kwedatabase kunotsigira ACID kunzwisisa seti yezvinodiwa zvakasiyana. Chimwe chezvikonzero nei kuita kwe ACID kuri kunetsa imhaka yekutengeserana kwakawanda kunofanirwa kuitwa kuita zvinodiwa neACID. Vagadziri vanogona kupa dhatabhesi yavo seACID-inoenderana, asi dudziro yemakesi emupendero inogona kusiyana zvakanyanya, sezvichaita nzira yekubata "zvisingaite" zviitiko. Pazvishoma, vagadziri vanogona kuwana nzwisiso yepamusoro-soro yekuomesesa kwekutanga kuita kuti vawane kunzwisisa kwakaringana maitiro avo akasarudzika uye dhizaini yekutengeserana.

Gakava rekuti MongoDB inoenderana here neACID zvinodiwa inoenderera kunyange mushure mekuburitswa kwevhezheni 4. MongoDB haina kutsigirwa kwenguva yakareba kutema miti, kunyangwe neiyo default data yakapihwa dhisiki isingapfuure kamwe kamwe pamasekonzi makumi matanhatu. Fungidzira mamiriro anotevera: chikumbiro chinotumira maviri anonyora (w60 uye w1). MongoDB inobudirira kuchengetedza w2, asi w1 yakarasika nekuda kwekutadza kwehardware.

Vazhinji vagadziri vanofanirwa kuziva izvi nezve databases
Mufananidzo unoratidza mamiriro acho. MongoDB inoputsika isati yakwanisa kunyora data kudhisiki

Kuzvipira kune disk inzira inodhura. Nekunzvenga kuita nguva zhinji, vagadziri vanovandudza kuita kwekurekodha nemari yekuvimbika. MongoDB parizvino inotsigira kutema matanda, asi tsvina inonyora inogona kuramba ichikanganisa kuvimbika kwedata sezvo matanda anotorwa ega ega 100ms nekukasira. Ndiko kuti, mamiriro akafanana achiri kugoneka kune matanda uye shanduko dzinounzwa mazviri, kunyangwe njodzi yakadzikira.

Imwe neimwe dhatabhesi ine yayo yekuenderana uye yekuzviparadzanisa nzira

Pazvinodiwa neACID, kuwirirana uye kuzviparadzanisa nevamwe vanozvirumbidza nhamba huru yezviitwa zvakasiyana nekuti huwandu hwekutengesa-offs hwakakura. Zvinofanira kutaurwa kuti kuwirirana uye kuzviparadzanisa mabasa anodhura. Vanoda kurongeka uye kuwedzera makwikwi ekuenderana kwedata. Kuoma kwedambudziko kunowedzera zvakanyanya kana zvichidikanwa kuyera dhatabhesi yakatwasuka munzvimbo dzakawanda dzedata (kunyanya kana dziri munzvimbo dzakasiyana dzenzvimbo). Kuwana chikamu chepamusoro chekuenderana kwakaoma zvikuru, sezvo inoderedzawo kuwanikwa uye inowedzera kupatsanurwa kwetiweki. Kuti uwane tsananguro yakajairika yechiitiko ichi, ndinokupa zano kuti utarise kwazviri CAP theorem. Izvo zvakakoshawo kucherechedza kuti maapplication anogona kubata zvidiki zvekusaenderana, uye vanogadzira zvirongwa vanogona kunzwisisa nuances yedambudziko zvakakwana kuti vashandise imwe pfungwa mukushandisa kubata kusawirirana pasina kuvimba zvakanyanya nedhatabhesi kuigadzirisa.

DBMSs inowanzopa mazinga akasiyana ekuzviparadzanisa nevamwe. Vagadziri vekushandisa vanogona kusarudza iyo inoshanda zvakanyanya zvichienderana nezvavanofarira. Kuzviparadzanisa kwakaderera kunobvumira kukurumidza kukurumidza, asi zvakare kunowedzera njodzi yemujaho wedata. Kuvhara kwepamusoro kunoderedza mukana uyu, asi kunonotsa basa uye kunogona kutungamirira kumakwikwi, izvo zvinotungamirira kune mabhureki akadaro pachigadziko kuti kukundikana kunotanga.

Vazhinji vagadziri vanofanirwa kuziva izvi nezve databases
Ongororo yemamodheru aripo uye hukama pakati pavo

Iyo SQL yakajairwa inotsanangura mana chete nhanho dzekuzviparadzanisa nevamwe, kunyangwe mudzidziso uye kuita kune akawanda akawanda. Jepson.io inopa tarisiro yakanakisa yemamodheru aripo emari. Semuenzaniso, Google Spanner inovimbisa yekunze serializability newachi kuwiriranisa, uye kunyangwe iyi iri yakaomesesa yekuzviparadzanisa layer, haina kutsanangurwa muyakajairwa yekuzvitsaura zvikamu.

Iyo SQL standard inotaura zvinotevera mazinga ekuzviparadzanisa nevamwe:

  • Serializable (yakanyanya kuomesesa uye inodhura): Kuuraya kunogoneka kune mhedzisiro yakafanana neyekumwe kutevedzana kwekutengesa kunoitwa. Sequential execution inoreva kuti chimwe nechimwe chinotevera kutengeserana chinotanga chete mushure mekunge yapfuura yapera. Zvinofanira kucherechedzwa kuti level Serializable inowanzo shandiswa sezvinonzi snapshot isolation (semuenzaniso, muOracle) nekuda kwekusiyana kwekududzira, kunyangwe snapshot yekuzviparadzanisa yega isingamiriri muSQL standard.
  • Zvinodzokororwa kuverenga: Marekodhi asina kupihwa mukutengeserana kwazvino anowanikwa kune yazvino kutengeserana, asi shanduko dzakaitwa nemamwe matransaction (senge mitsva mitsara) zvisingaonekwi.
  • Verenga wazvipira: Data isina kupihwa haiwanikwe yekutengeserana. Muchiitiko ichi, kutengeserana kunogona kungoona data rakazvipira, uye kuverenga kwephantom kunogona kuitika. Kana kutengeserana kupinza uye kuita mitsva mitsva, kutengeserana kwazvino kunozokwanisa kuiona kana yabvunzwa.
  • Verenga usinga tsigire (zvishoma zvakaomesesa uye zvinodhura nhanho): Kuverengera kwakasviba kunobvumidzwa, kutengeserana kunogona kuona shanduko dzisina kurongwa dzakaitwa nezvimwe kutengeserana. Mukuita, iyi nhanho inogona kubatsira kune dzakakasharara fungidziro, senge mibvunzo COUNT(*) patafura.

terama Serializable inoderedza njodzi yekumhanya kwedata, uku ichinyanya kudhura kuita uye zvichikonzera kukwikwidziridzwa kwepamusoro pahurongwa. Mamwe mazinga ekuzviparadzanisa ari nyore kuita, asi wedzera mukana wemijaho yedata. Mamwe maDBMS anokubvumira kuti uise nhanho yekuzviparadzanisa nevamwe, vamwe vane zvavanoda zvakasimba uye kwete ese mazinga anotsigirwa.

Tsigiro yemazinga ekuzviparadzanisa nevamwe inowanzoshambadzirwa mune yakapihwa DBMS, asi chete kunyatsoongorora maitiro ayo anogona kuratidza zviri kuitika chaizvo.

Vazhinji vagadziri vanofanirwa kuziva izvi nezve databases
Ongororo ye concurrency anomalies pamatanho akasiyana ekuzviparadzanisa nevamwe kune akasiyana maDBMS

Martin Kleppmann muchirongwa chake hermitage Inofananidza mazinga akasiyana ekuzviparadzanisa nevamwe, inotaura nezve concurrency anomalies, uye kana iyo dhatabhesi inokwanisa kuomerera kune imwe nhanho yekuzviparadzanisa nevamwe. Tsvagiridzo yaKleppmann inoratidza kuti vanogadzira dhatabhesi vanofunga sei nezvemazinga ekuzviparadzanisa nevamwe.

Optimistic blocking inouya pakununura kana zvichinetsa kuchengetedza yakajairika.

Kuvhara kunogona kudhura zvakanyanya, kwete chete nekuti kunowedzera kukwikwidza mudhatabhesi, asiwo nekuti kunoda maseva ekushandisa kuti agare achibatana nedhatabhesi. Network segmentation inogona kuwedzera mamiriro ekuvhara ega uye zvinotungamira kune zvakafa zvinonetsa kuziva nekugadzirisa. Mumamiriro ezvinhu apo kuvhara kwega kusina kukodzera, kukiya kwetarisiro kunobatsira.

Optimistic lock inzira iyo kana uchiverenga tambo, inofunga nezveshanduro yayo, checksum, kana nguva yekupedzisira kugadziridzwa. Izvi zvinokutendera kuti uve nechokwadi chekuti hapana atomic vhezheni shanduko usati wachinja yekupinda:

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

Muchiitiko ichi, kugadzirisa tafura products haizoitwe kana kumwe kuvhiya kwakamboita shanduko kumutsara uyu. Kana pasina kumwe kuvhiya kwakaitwa pamutsetse uyu, shanduko yemutsara mumwe ichaitika uye tinogona kutaura kuti iyo update yakabudirira.

Pane zvimwe zvisizvo kunze kwekuverenga kwakasviba uye kurasikirwa kwedata

Kana zvasvika pakuenderana kwedata, chinotariswa chiri pamusoro pekugona kwemamiriro emujaho anogona kutungamira kune tsvina kuverenga uye kurasikirwa kwedata. Nekudaro, data anomalies hairegi ipapo.

Mumwe muenzaniso weanomalies akadaro kurekodha kukanganisa (nyora skews). Zvakamonyaniswa zvakaoma kuona nekuti hazviwanzo tsvakwa. Izvo hazvisi nekuda kwekuverenga kwakasviba kana kurasikirwa kwedata, asi nekutyorwa kwezvipingaidzo zvine musoro zvakaiswa pane data.

Semuenzaniso, ngatifungei nezve yekutarisa application inoda kuti mushandisi mumwe ave pa-call nguva dzese:

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;

Mumamiriro ari pamusoro apa, huwori hwerekodhi huchaitika kana zvese zviri zviviri kutengeserana zvakaitwa zvinobudirira. Kunyangwe pakanga pasina kusvibiswa kuverenga kana kurasikirwa kwedata, kutendeseka kweiyo data kwakakanganiswa: ikozvino vanhu vaviri vanotariswa pa-call panguva imwe chete.

Serializable kuparadzaniswa, schema dhizaini, kana zvipingamupinyi zvedhatabhesi zvinogona kubatsira kubvisa huwori hwekunyora. Vagadziri vanofanirwa kunge vachikwanisa kuona kusarudzika kwakadaro panguva yekusimudzira kuti vadzivise mukugadzira. Panguva imwecheteyo, kurekodha kukanganisa kwakaoma zvakanyanya kutarisa muiyo kodhi base. Kunyanya mumasisitimu makuru, apo zvikwata zvakasiyana zvekusimudzira zvine basa rekuita mabasa zvichibva pamatafura akafanana uye zvisingabvumirani pane izvo chaizvo zvekuwana data.

Iyo dhatabhesi uye mushandisi hazvigaro kubvumirana pane zvekuita

Chimwe chezvinhu zvakakosha zvedhatabhesi ndiyo vimbiso yehurongwa hwekuuraya, asi iyi kurongeka pachayo inogona kunge isiri pachena kune mugadziri wesoftware. Dhatabhesi dzinoita kutengeserana muhurongwa hwavanogamuchirwa, kwete muhurongwa hunodiwa nevagadziri. Kurongeka kwekutengeserana kwakaoma kufanotaura, kunyanya mumasisitimu akaremerwa akafanana.

Panguva yekusimudzira, kunyanya kana uchishanda nemaraibhurari asingavharidzire, maitiro asina kunaka uye kuverenga kwakaderera kunogona kuita kuti vashandisi vatende kuti matransaction anoitwa achitevedzana, nepo ivo vachikwanisa kusvika mudhatabhesi mune chero kurongeka.

Pakutanga kuona, muchirongwa chiri pazasi, T1 neT2 dzinonzi sequentially, asi kana mabasa aya asiri kuvhara uye nekukasira dzosera mhedzisiro mufomu. vimbiso, ipapo kurongeka kwemafoni kuchatemwa nenguva dzavakapinda mudhatabhesi:

mhedzisiro1 = T1() // mhedzisiro chaiyo zvipikirwa
mhedzisiro2 = T2()

Kana atomicity ichidikanwa (kureva kuti, kana mabasa ese anofanirwa kupedzwa kana kubviswa) uye nyaya dzekutevedzana, ipapo maoparesheni T1 uye T2 anofanira kuitwa mukati mekutengesa kumwe chete.

Application-level sharding inogona kutamiswa kunze kwechishandiso

Sharding inzira yekugovanisa dhatabhesi. Mamwe dhatabhesi anogona kupatsanura otomatiki data zvakachinjika, nepo mamwe asingagone, kana asina kunyatsonaka pazviri. Kana vagadziri vedata / vanogadzira data vachikwanisa kufanotaura chaizvo kuti data ichawanikwa sei, vanogona kugadzira zvikamu zvakachinjika munzvimbo yevashandisi pane kugovera basa iri kudhatabhesi. Iyi nzira inonzi "application-level sharding" (application-level sharding).

Nehurombo, zita iri rinowanzogadzira pfungwa isiriyo yekuti sharding inogara mumasevhisi ekushandisa. Muchokwadi, inogona kuitwa seyakaparadzana layer pamberi pe database. Zvichienderana nekukura kwedata uye schema iterations, sharding zvinodiwa zvinogona kuve zvakaoma. Mamwe marongero anogona kubatsirikana kubva mukukwanisa kudzokorodza pasina kudhindisa masevha ekushandisa.

Vazhinji vagadziri vanofanirwa kuziva izvi nezve databases
Muenzaniso wezvivakwa umo maseva ekushandisa anoparadzaniswa kubva kune sharding sevhisi

Kufambisa sharding mune imwe sevhisi yakaparadzana kunowedzera kugona kwekushandisa akasiyana sharding nzira pasina chikonzero chekuisazve maapplication. Vitess muenzaniso weiyo sharding system padanho rekushandisa. Vitess inopa yakachinjika sharding yeMySQL uye inobvumira vatengi kubatana nayo kuburikidza neMySQL protocol. Iyo sisitimu inogovera iyo data mune dzakasiyana MySQL node dzisingazive chinhu nezve mumwe nemumwe.

Autoincrementing inogona kuva nengozi

AUTOINCREMENT inzira yakajairika yekugadzira makiyi ekutanga. Kune kazhinji zviitiko apo dhatabhesi rinoshandiswa seID generator, uye dhatabhesi rine matafura akagadzirirwa kugadzira zviziviso. Pane zvikonzero zvakati kuti nei kugadzira makiyi ekutanga uchishandisa auto-incrementing kuri kure nekunaka:

  • Mune database yakagoverwa, auto-incrementing idambudziko rakakura. Kuti ugadzire ID, kukiya kwepasirese kunodiwa. Pane kudaro, iwe unogona kugadzira UUID: izvi hazvidi kudyidzana pakati peakasiyana dhatabhesi node. Kuwedzera-otomatiki nemakiyi kunogona kukonzera kukakavara uye kuderedza zvakanyanya kuita pane zvakaiswa mumamiriro akagoverwa. Mamwe maDBMS (semuenzaniso, MySQL) angangoda kugadziridzwa kwakakosha uye kunyatsotarisisa kuronga zvakanaka tenzi-tenzi kudzokorora. Uye zviri nyore kuita zvikanganiso kana uchigadzira, izvo zvinozotungamira mukutadza kurekodha.
  • Mamwe dhatabhesi ane partitioning algorithms yakavakirwa pamakiyi ekutanga. Akatevedzana maID anogona kutungamira kune asingafungidzike anopisa nzvimbo uye kuwedzera mutoro pane mamwe mapartitions vamwe vachiramba vasina basa.
  • Kiyi yekutanga ndiyo inokurumidza nzira yekuwana mutsara mudhatabhesi. Nenzira dziri nani dzekuziva marekodhi, maID anoteedzana anogona kushandura iyo yakakosha koramu mumatafura kuita koramu isina basa yakazadzwa nehunhu husina zvahunoreva. Naizvozvo, pese pazvinogoneka, ndapota sarudza kiyi yekutanga yakasarudzika uye yakasikwa (semuzita rekushandisa).

Usati wafunga nezve maitiro, funga nezve mabatiro eauto-incrementing ID uye UUIDs pa indexing, partitioning, uye sharding.

Stale data inogona kubatsira uye isingade kukiya

Multiversion Concurrency Control (MVCC) inoshandisa zvakawanda zvekuenderana zvinodiwa izvo zvakakurukurwa muchidimbu pamusoro. Mamwe madhatabhesi (semuenzaniso, Postgres, Spanner) anoshandisa MVCC "kudyisa" mashandisirwo ane snapshots-shanduro dzekare dzedatabase. Snapshot transactions inogona zvakare kuve serialized kuti ive nechokwadi chekuenderana. Kana uchiverenga kubva pamufananidzo wekare, data rekare rinoverengwa.

Kuverenga data rekare kunogona kubatsira, semuenzaniso, kana uchigadzira analytics kubva kune iyo data kana kuverenga yakaenzana aggregate values.

Kubatsira kwekutanga kwekushanda nedata yenhaka yakaderera latency (kunyanya kana dhatabhesi yakagoverwa munzvimbo dzakasiyana siyana). Chechipiri ndechekuti kuverenga-chete kutengeserana hakuna kukiya-mahara. Iri rakakosha mukana kune maapplication anoverenga zvakanyanya, chero achigona kubata stale data.

Vazhinji vagadziri vanofanirwa kuziva izvi nezve databases
Iyo sevha yekushandisa inoverenga data kubva kune yemuno replica iyo iri 5 masekondi kubva panguva, kunyangwe iyo yazvino vhezheni iripo kune rimwe divi rePacific Ocean.

DBMSs inobvisa otomatiki mavhezheni ekare uye, mune dzimwe nguva, inobvumidza iwe kuti uite izvi pakukumbira. Semuenzaniso, Postgres inobvumira vashandisi kuita VACUUM pakukumbira, uyewo nguva nenguva anoita otomatiki oparesheni iyi. Spanner inomhanyisa muunganidzi wemarara kubvisa zvidhori zvakapfuura awa imwe chete.

Chero nguva masosi anogona kukanganiswa

Chakavanzika-chakanyanya kuchengetwa musainzi yekombuta ndechekuti nguva dzese maAPIs anonyepa. Muchokwadi, michina yedu haizivi nguva chaiyo iripo. Makomputa ane makristasi equartz anoburitsa mavibrations anoshandiswa kuchengetedza nguva. Nekudaro, ivo havana chokwadi zvakakwana uye vanogona kunge vari kumberi / kusarira kumashure kwenguva chaiyo. Kuchinja kunogona kusvika 20 seconds pazuva. Naizvozvo, iyo nguva pamakomputa edu inofanirwa kuwiriraniswa nguva nenguva neyetiweki imwe.

NTP maseva anoshandiswa kuwiriranisa, asi iyo yekuwiriranisa maitiro pachayo inoenderana nekunonoka kwetiweki. Kunyangwe kuwiriranisa neNTP server munzvimbo imwechete yedata kunotora nguva. Zviripachena kuti kushanda neveruzhinji NTP server kunogona kutungamira mukukanganisa kwakanyanya.

Wachi dzeatomu pamwe neadzo eGPS zviri nani pakuona nguva iripo, asi anodhura uye anoda kugadzika kwakaoma, saka haagone kuisirwa pamotokari yega yega. Nekuda kweizvi, nzvimbo dze data dzinoshandisa nzira yakasarudzika. Atomic uye/kana GPS wachi dzinoratidza nguva chaiyo, mushure mezvo inoshambadzirwa kune mimwe michina kuburikidza nesecondary server. Izvi zvinoreva kuti muchina wega wega uchaona imwe offset kubva panguva chaiyo.

Mamiriro acho anowedzera nenyaya yekuti zvikumbiro uye dhatabhesi zvinowanzowanikwa pamakina akasiyana (kana zvisiri munzvimbo dzakasiyana dzedata). Nekudaro, iyo nguva ichasiyana kwete chete paDB node dzakagoverwa pamichina yakasiyana. Izvo zvakare zvichave zvakasiyana pane application server.

Google TrueTime inotora nzira yakasiyana zvachose. Vanhu vazhinji vanotenda kuti kufambira mberi kweGoogle munzira iyi kunotsanangurwa nebhanari shanduko kuenda kumaatomu uye GPS wachi, asi ichi chinongova chikamu chemufananidzo mukuru. Heino mashandiro anoita TrueTime:

  • TrueTime inoshandisa maviri akasiyana masosi: GPS uye maatomu wachi. Mawachi aya ane mamodhi asina kuwirirana ekutadza. [ona peji 5 kuti uwane mamwe mashoko pano - approx. transl.), saka kushandiswa kwavo pamwe chete kunowedzera kuvimbika.
  • TrueTime ine API isina kujairika. Inodzosa nguva senguva ine chikanganiso chekuyera uye kusava nechokwadi kwakavakirwa mairi. Nguva chaiyo munguva iri pane imwe nzvimbo pakati pepamusoro nepamusoro pemiganhu yepakati. Spanner, Google's distributed database, inongomirira kusvika zvakachengeteka kutaura kuti nguva iripo yapera. Iyi nzira inosuma imwe latency muhurongwa, kunyanya kana kusagadzikana pane masters kwakakwira, asi inovimbisa kurongeka kunyangwe mumamiriro epasirese akagoverwa.

Vazhinji vagadziri vanofanirwa kuziva izvi nezve databases
Izvo zvikamu zveSpanner zvinoshandisa TrueTime, apo TT.now () inodzosa nguva, saka Spanner inongorara kusvika painonge ichivimba kuti nguva iripo yapfuura imwe nguva.

Kuderedzwa kwechokwadi pakusarudza nguva yazvino kunoreva kuwedzera kwenguva yeSpanner mashandiro uye kuderera kwekuita. Ichi ndicho chikonzero zvakakosha kuchengetedza huroyi hwepamusoro-soro kunyangwe zvisingaite kuwana wachi yakakwana.

Kunonoka kune zvakawanda zvazvinoreva

Kana iwe ukabvunza gumi nemaviri nyanzvi nezve kunonoka chii, iwe ungangowana mhinduro dzakasiyana. MuDBMS latency inowanzonzi "database latency" uye yakasiyana neinonzwisiswa nemutengi. Icho chokwadi ndechekuti mutengi anoona huwandu hwekunonoka kwetiweki uye kunonoka kwedhatabhesi. Iko kugona kuparadzanisa rudzi rwe latency kwakakosha kana uchigadzirisa matambudziko ari kukura. Paunenge uchiunganidza uye uchiratidza metrics, gara uchiedza kuramba wakatarira mhando mbiri.

Zvido zvekushanda zvinofanirwa kuongororwa kune chaiyo kutengeserana

Dzimwe nguva maitiro ekuita kweDBMS uye zvipingamupinyi zvayo zvinotsanangurwa maererano nekunyora / kuverenga kuburikidza uye latency. Izvi zvinopa mucherechedzo wakajeka weakakosha masisitimu paramita, asi kana uchiongorora mashandiro eDBMS itsva, nzira yakawandisa ndeyekuongorora zvakasiyana mashandiro akakosha (pamubvunzo wega wega uye / kana kutengeserana). Mienzaniso:

  • Nyora mabudiro uye kunonoka paunenge uchiisa mutsara mutsva mutafura X (ine 50 miriyoni mitsara) ine zvipingaidzo zvakatsanangurwa uye mitsara padding mumatafura ane hukama.
  • Kunonoka kuratidza shamwari dzeshamwari dzemumwe mushandisi kana avhareji yenhamba yeshamwari iri 500.
  • Latency mukutora epamusoro 100 zvinyorwa kubva munhoroondo yemushandisi kana mushandisi achitevera mazana mashanu evamwe vashandisi vane X ekupinda paawa.

Kuongorora uye kuyedza kunogona kusanganisira nyaya dzakaoma kudaro kudzamara uine chivimbo chekuti dhatabhesi rinosangana nezvinodiwa zvekuita. Mutemo wakafanana wechigunwe unotorawo kuparara uku uchifunga nezvekuunganidza latency metrics uye kuona SLOs.

Iva neruzivo rwepamusoro makadhiinari paunenge uchiunganidza metrics ega ega oparesheni. Shandisa matanda, kuunganidza zviitiko, kana kugovera kuronda kuti uwane yakakwirira-simba rekugadzirisa data. Muchinyorwa "Unoda Kugadzirisa Latency?Β»unogona kujairana nekunonoka debugging nzira.

Kutengeserana kuri mudunga kunogona kuva nengozi

Haisi yega yega DBMS inotsigira kutengeserana kwakavakirwa, asi kana vadaro, kutengeserana kwakadaro kunogona kuguma nezvikanganiso zvisingatarisirwi izvo zvisiri nyore kuona nguva dzose (kureva kuti, zvinofanirwa kuve pachena kuti pane imwe mhando yeanomaly).

Iwe unogona kudzivirira kushandisa nested transaction uchishandisa vatengi maraibhurari anogona kuona uye nekuapfuura. Kana kutengeserana kwakagara kusingagone kusiiwa, nyatso chenjerera mukuita kwavo kudzivirira mamiriro ezvinhu asingatarisirwi apo kutengeserana kwakapedzwa kunobviswa netsaona nekuda kwevakavharirwa.

Kuvhara kutengeserana muzvikamu zvakasiyana kunogona kutungamirira kune zvisingatarisirwi nested transactions, uye kubva pakuona kwekodhi yekuverenga, zvinogona kuita kuti zvive zvakaoma kunzwisisa zvinangwa zvemunyori. Tarisa purogiramu inotevera:

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

Chii chichava kubuda kwekodhi iri pamusoro? Ichadzosera kumashure matransaction ese, kana iwo emukati chete? Chii chinoitika kana tikavimba nemateru akawanda emaraibhurari anofukidza kusikwa kwekutengeserana kwedu? Tichakwanisa here kuziva nekuvandudza nyaya dzakadai?

Fungidzira dhata re data rine maitiro akawanda (e.g. newAccount) yakatoitwa mukutengeserana kwayo. Chii chinoitika kana iwe ukavamhanyisa sechikamu chepamusoro-level bhizinesi logic inomhanya mukati mekutengesa kwayo? Chii chingave chiri chekuzviparadzanisa uye kuenderana mune iyi kesi?

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

Panzvimbo pekutsvaga mhinduro dzemibvunzo isingaperi yakadaro, zviri nani kudzivisa kutengeserana kwakavakirwa. Mushure mezvose, dhata yako yedata inogona kuita zviri nyore mashandiro epamusoro-soro pasina kugadzira yayo kutengeserana. Uye zvakare, iyo bhizinesi logic pachayo inokwanisa kutanga kutengeserana, kuita mashandiro pairi, kuita kana kubvisa kutengeserana.

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.

Transactions haifanirwe kusungirirwa kune application state

Dzimwe nguva zvinoyedza kushandisa mamiriro ekushandisa mukutengesa kushandura mamwe maitiro kana tweak query paramita. Iyo yakakosha nuance yekufunga nezvayo ndiyo chaiyo chiyero chekushandisa. Vatengi vanowanzo tangazve kutengeserana kana paine matambudziko etiweki. Kana kutengeserana kunobva kwaenderana nemamiriro ari kuchinjwa neimwe nzira, inogona kusarudza kukosha kwakashata zvichienderana nekugona kwerudzi rwe data. Transactions inofanirwa kufunga nezve njodzi yemamiriro erudzi rwe data mukushandisa.

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

Kuitwa kuri pamusoro kuchawedzera nhamba yekutevedzana nguva yega yega yaitwa, zvisinei nemhedzisiro yekupedzisira. Kana iyo kuzvipira ikatadza nekuda kwematambudziko etiweki, chikumbiro chinoitwa neyakasiyana nhamba yekutevedzana paunoedza zvakare.

Mubvunzo vanoronga vanogona kukuudza zvakawanda nezve database

Vagadziri vemibvunzo vanosarudza kuti mubvunzo uchaitwa sei mudhatabhesi. Vanoongororawo zvikumbiro uye nekuzvigadzirisa vasati vazvitumira. Vanoronga vanogona chete kupa humwe fungidziro hunoenderana nezviratidzo zvavanazvo. Semuenzaniso, ndeipi nzira yekutsvaga yakanakisa yemubvunzo unotevera?

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

Zvigumisiro zvinogona kutorwa nenzira mbiri:

  • Full table scan: Unogona kutarisa pane imwe neimwe yekupinda mutafura uye wodzosera zvinyorwa zvine zita remunyori rinoenderana, wobva wazviodha.
  • Index scan: Unogona kushandisa index kutsvaga maID anoenderana, tora iwo mitsara, wobva waaodha.

Basa remubvunzo wemubvunzo nderokuona kuti nderipi zano rakanaka. Zvakakodzera kufunga kuti query planners chete vane mashoma ekufungidzira kugona. Izvi zvinogona kutungamirira kusarudzo dzakaipa. DBAs kana vagadziri vanogona kuzvishandisa kuongorora uye kunyatso gadzirisa mibvunzo isingaite. Shanduro itsva dzeDBMS dzinogona kugadzirisa vagadziri vemibvunzo, uye kuzviongorora pachako kunogona kubatsira pakugadzirisa dhatabhesi kana shanduro itsva inotungamirira kumatambudziko ekushanda. Muvhunzo unononoka, mishumo yenyaya yanonoka, kana nhamba dzenguva yekuitwa zvinogona kubatsira kuziva mibvunzo inoda kuvandudzwa.

Mamwe ma metric anoratidzwa nemubvunzo kuronga anogona kunge ari pasi peruzha (kunyanya kana uchifungidzira latency kana CPU nguva). Kuwedzera kwakanaka kune vanoronga maturusi ekutsvaga nekutevera nzira yekuuraya. Vanokutendera kuti uongorore matambudziko akadaro (nhamo, kwete ese maDBMS anopa maturusi akadaro).

Kutama pamhepo kwakaoma asi kunogoneka

Kutama pamhepo, kutama-tama, kana kutama chaiko-kwenguva kunoreva kutama kubva kune imwe dhatabhesi kuenda kune imwe pasina kuderera kana huwori hwedata. Kutama-tama kuri nyore kuita kana shanduko ikaitika mukati meDBMS/injini imwechete. Mamiriro acho anowedzera kuoma kana zvichidikanwa kutamira kune DBMS nyowani ine akasiyana maitiro uye schema zvinodiwa.

Kune akasiyana mamodheru ekufambisa pamhepo. Heino imwe yacho:

  • Gonesa kupinda kaviri mumadatabase ari maviri. Iyo dhatabhesi nyowani panguva ino haina data rese, asi inongogamuchira yazvino data. Paunenge uine chokwadi cheizvi, unogona kuenda kune imwe nhanho inotevera.
  • Bvumira kuverenga kubva kumadatabase ese ari maviri.
  • Gadzirisa sisitimu kuitira kuti kuverenga nekunyora kuitwe zvakanyanya pane dhatabhesi idzva.
  • Rega kunyora kune yekare dhatabhesi uchienderera mberi nekuverenga data kubva mairi. Panguva ino, iyo dhatabhesi nyowani ichiri isina imwe data. Dzinofanirwa kukopwa kubva mudura rekare.
  • Dhatabhesi rekare rinoverengwa-chete. Kopa data rakashaikwa kubva kudura rekare kuenda kune idzva. Mushure mekunge kutama kwapera, shandura nzira kune dhatabhesi idzva, uye misa yekare uye uibvise kubva muhurongwa.

Kuti uwane rumwe ruzivo, ndinokurudzira kubata chinyorwa, iyo inotsanangura nzira yeStripe yekutama yakavakirwa pane iyi modhi.

Kuwedzera kwakakura kwedatabase kunosanganisira kuwedzera kwekusafungidzika

Kukura kwedhatabhesi kunotungamirira kumatambudziko asingatarisirwi ane chokuita nechiyero chayo. Patinoziva zvakanyanya nezve chimiro chemukati chedhatabhesi, zviri nani isu tinogona kufanotaura kuti ichakwira sei. Nekudaro, dzimwe nguva hazvigoneke kufanoona.
Sezvo hwaro hunokura, fungidziro dzakapfuura uye zvinotarisirwa maererano nehuwandu hwedata uye network bandwidth zvinodiwa zvinogona kuve zvekare. Apa ndipo apo mubvunzo unomuka wekugadzirisa kukuru kwekugadzira, hukuru-hukuru hwekuvandudza kwekushanda, kuongororazve kutumirwa, kana kutamira kune mamwe maDBMS kudzivirira matambudziko anogona kuitika.

Asi usafunge kuti ruzivo rwakanakisa rwemukati weiyo dhatabhesi iripo ndiyo chete chinhu chinodiwa. Zviyero zvitsva zvichauya nazvo zvitsva zvisingazivikanwe. Zvisingatarisirwi zvinorwadza zvinorwadza, kusaenzana kwekugovera data, zvisingatarisirwi bandwidth uye hardware nyaya, inogara ichiwedzera traffic uye mitsva yetiweki zvikamu zvinokumanikidza kuti ufunge zvakare nzira yako yedatabase, data data, deployment model, uye saizi yedatabase.

...

Panguva yandakatanga kufunga nezve kutsikisa chinyorwa ichi, pakanga patova nezvimwe zvinhu zvishanu pane yangu yekutanga. Ipapo kwakauya nhamba huru pfungwa itsva nezvezvimwe zvinogona kuvharwa. Naizvozvo, chinyorwa chinobata pamatambudziko ari pachena anoda kutariswa zvakanyanya. Zvisinei, izvi hazvirevi kuti musoro wacho wapera uye ini handichadzoki kwairi mune zvinyorwa zvangu zveramangwana uye handichaita shanduko kune yazvino.

PS

Verenga zvakare pablog yedu:

Source: www.habr.com

Voeg