Awọn olupilẹṣẹ diẹ sii yẹ ki o mọ eyi nipa awọn apoti isura infomesonu

Akiyesi. itumọ.: Jaana Dogan jẹ onimọ-ẹrọ ti o ni iriri ni Google ti o n ṣiṣẹ lọwọlọwọ lori akiyesi ti awọn iṣẹ iṣelọpọ ti ile-iṣẹ ti a kọ ni Go. Ninu nkan yii, eyiti o gba olokiki nla laarin awọn olugbo ti o sọ Gẹẹsi, o gba ni awọn aaye 17 awọn alaye imọ-ẹrọ pataki nipa awọn DBMS (ati nigbakan awọn eto pinpin ni gbogbogbo) ti o wulo lati gbero fun awọn olupilẹṣẹ ti awọn ohun elo nla / ibeere.

Awọn olupilẹṣẹ diẹ sii yẹ ki o mọ eyi nipa awọn apoti isura infomesonu

Pupọ julọ ti awọn eto kọnputa tọju abala ipo wọn ati, ni ibamu, nilo iru eto ipamọ data kan. Mo ti ṣajọpọ imo nipa awọn apoti isura infomesonu lori igba pipẹ, ni ọna ṣiṣe awọn aṣiṣe apẹrẹ ti o yori si pipadanu data ati awọn ijade. Ninu awọn eto ti o ṣe ilana awọn iwọn nla ti alaye, awọn apoti isura infomesonu wa ni ọkan ti faaji eto ati ṣiṣẹ bi nkan pataki ni yiyan ojutu to dara julọ. Bíótilẹ o daju pe akiyesi ti o sunmọ ni a san si iṣẹ ti data data, awọn iṣoro ti awọn olupilẹṣẹ ohun elo gbiyanju lati nireti nigbagbogbo jẹ aaye ti yinyin. Ninu jara ti awọn nkan, Mo pin diẹ ninu awọn imọran ti yoo wulo fun awọn olupilẹṣẹ ti kii ṣe amọja ni aaye yii.

  1. O ni orire ti 99,999% ti akoko nẹtiwọọki ko fa awọn iṣoro.
  2. ACID tumo si orisirisi awọn ohun.
  3. Data data kọọkan ni awọn ilana tirẹ fun aridaju aitasera ati ipinya.
  4. Idilọwọ ireti wa si igbala nigbati o ṣoro lati ṣetọju ọkan deede.
  5. Nibẹ ni o wa miiran asemase Yato si idọti kika ati data pipadanu.
  6. Ibi ipamọ data ati olumulo ko nigbagbogbo gba lori ilana iṣe.
  7. Sharding ipele-elo le ṣee gbe si ita ohun elo naa.
  8. Imudara adaṣe le jẹ eewu.
  9. Awọn data stale le wulo ati pe ko nilo lati wa ni titiipa.
  10. Awọn ipalọlọ jẹ aṣoju fun awọn orisun akoko eyikeyi.
  11. Idaduro ni ọpọlọpọ awọn itumọ.
  12. Awọn ibeere ṣiṣe yẹ ki o ṣe ayẹwo fun idunadura kan pato.
  13. Awọn iṣowo itẹle le jẹ eewu.
  14. Awọn iṣowo ko yẹ ki o so mọ ipo ohun elo.
  15. Awọn oluṣeto ibeere le sọ fun ọ pupọ nipa awọn apoti isura data.
  16. Iṣilọ ori ayelujara nira, ṣugbọn o ṣeeṣe.
  17. Ilọsoke pataki ninu ibi ipamọ data jẹ ilosoke ninu airotẹlẹ.

Emi yoo fẹ lati dupẹ lọwọ Emmanuel Odeke, Rein Henrichs ati awọn miiran fun esi wọn lori ẹya iṣaaju ti nkan yii.

O ni orire ti 99,999% ti akoko nẹtiwọọki ko fa awọn iṣoro.

Ibeere naa wa nipa bawo ni awọn imọ-ẹrọ nẹtiwọọki ode oni ti o gbẹkẹle ati bii igbagbogbo awọn eto ti wa ni isalẹ nitori awọn ikuna nẹtiwọọki. Alaye lori ọran yii ṣọwọn ati pe iwadii nigbagbogbo jẹ gaba lori nipasẹ awọn ajọ nla pẹlu awọn nẹtiwọọki amọja, ohun elo ati oṣiṣẹ.

Pẹlu oṣuwọn wiwa ti 99,999% fun Spanner (ipamọ data pinpin kaakiri agbaye ti Google), Google sọ pe nikan 7,6% awọn iṣoro ni ibatan si nẹtiwọki. Ni akoko kanna, ile-iṣẹ n pe nẹtiwọọki amọja rẹ ni “ọwọn akọkọ” ti wiwa giga. Ikẹkọ Baili ati Kingsbury, ti a ṣe ni ọdun 2014, koju ọkan ninu “aburu nipa pin iširo", eyiti Peter Deutsch ṣe agbekalẹ ni ọdun 1994. Ṣe nẹtiwọki naa gbẹkẹle gaan?

Iwadi okeerẹ ni ita ti awọn ile-iṣẹ nla, ti a ṣe fun Intanẹẹti gbooro, nìkan ko si tẹlẹ. Tun ko si data ti o to lati ọdọ awọn oṣere pataki nipa kini ogorun ti awọn iṣoro awọn alabara wọn jẹ ibatan nẹtiwọọki. A mọ daradara ti awọn ijade ninu akopọ nẹtiwọọki ti awọn olupese awọsanma nla ti o le gba gbogbo chunk ti Intanẹẹti silẹ fun awọn wakati pupọ nitori wọn jẹ awọn iṣẹlẹ profaili giga ti o ni ipa lori nọmba nla ti eniyan ati awọn ile-iṣẹ. Awọn ijade nẹtiwọọki le fa awọn iṣoro ni ọpọlọpọ awọn ọran diẹ sii, paapaa ti kii ṣe gbogbo awọn ọran wọnyẹn wa ni Ayanlaayo. Awọn onibara ti awọn iṣẹ awọsanma tun ko mọ ohunkohun nipa awọn idi ti awọn iṣoro. Ti ikuna ba wa, o fẹrẹ jẹ pe ko ṣee ṣe lati sọ si aṣiṣe nẹtiwọki kan ni ẹgbẹ olupese iṣẹ. Fun wọn, awọn iṣẹ ẹnikẹta jẹ awọn apoti dudu. Ko ṣee ṣe lati ṣe iṣiro ipa laisi jijẹ olupese iṣẹ nla kan.

Fi fun ohun ti awọn oṣere nla n ṣe ijabọ nipa awọn eto wọn, o jẹ ailewu lati sọ pe o wa ni orire ti awọn iṣoro nẹtiwọọki ba jẹ iroyin fun ipin kekere ti awọn ọran downtime ti o pọju. Awọn ibaraẹnisọrọ nẹtiwọọki tun jiya lati iru awọn nkan alaigbagbọ gẹgẹbi awọn ikuna ohun elo, awọn iyipada topology, awọn iyipada iṣeto iṣakoso, ati awọn opin agbara. Laipe, Mo yà lati kọ pe atokọ ti awọn iṣoro ti o ṣeeṣe ni a ṣafikun yanyan buje (bẹẹni, o gbọ ọtun).

ACID tumọ si ọpọlọpọ awọn nkan oriṣiriṣi

Acronym ACID duro fun Atomity, Consistency, Ipinya, Igbẹkẹle. Awọn ohun-ini wọnyi ti awọn iṣowo jẹ ipinnu lati rii daju pe wọn wulo ni iṣẹlẹ ti awọn ikuna, awọn aṣiṣe, awọn ikuna ohun elo, ati bẹbẹ lọ. Laisi ACID tabi awọn ero ti o jọra, yoo nira fun awọn olupilẹṣẹ ohun elo lati ṣe iyatọ laarin ohun ti wọn ṣe iduro fun ati kini data data jẹ iduro fun. Pupọ julọ awọn apoti isura infomesonu idunadura ibatan gbiyanju lati jẹ ifaramọ ACID, ṣugbọn awọn ọna tuntun bii NoSQL ti funni ni ọpọlọpọ awọn apoti isura infomesonu laisi awọn iṣowo ACID nitori pe wọn jẹ gbowolori lati ṣe.

Nigbati mo kọkọ wọle si ile-iṣẹ naa, itọsọna imọ-ẹrọ wa ti sọrọ nipa bawo ni imọran ACID ṣe yẹ. Lati ṣe deede, ACID ni a ka si apejuwe ti o ni inira dipo boṣewa imuse ti o muna. Loni Mo rii pe o wulo julọ nitori pe o gbe ẹka kan pato ti awọn ọran (ati daba ọpọlọpọ awọn solusan ti o ṣeeṣe).

Kii ṣe gbogbo DBMS ni ifaramọ ACID; Ni akoko kanna, awọn imuse data data ti o ṣe atilẹyin ACID loye eto awọn ibeere ni oriṣiriṣi. Ọkan ninu awọn idi idi ti awọn imuse ACID jẹ patch jẹ nitori ọpọlọpọ awọn iṣowo ti o ni lati ṣe lati ṣe awọn ibeere ACID. Awọn olupilẹṣẹ le ṣafihan awọn apoti isura infomesonu wọn bi ACID-ni ifaramọ, ṣugbọn itumọ awọn ọran eti le yatọ ni iyalẹnu, bii ilana fun mimu awọn iṣẹlẹ “aiṣeeṣe”. Ni o kere ju, awọn olupilẹṣẹ le ni oye ipele giga ti awọn intricacies ti awọn imuse ipilẹ lati ni oye to dara ti ihuwasi pataki wọn ati awọn iṣowo-iṣoro apẹrẹ.

Jomitoro nipa boya MongoDB ni ibamu pẹlu awọn ibeere ACID tẹsiwaju paapaa lẹhin itusilẹ ti ikede 4. MongoDB ko ti ni atilẹyin fun igba pipẹ wíwọlé, biotilejepe nipa aiyipada data ti a ifaramo si disk ko si siwaju sii ju ẹẹkan gbogbo 60 aaya. Fojuinu oju iṣẹlẹ atẹle yii: ohun elo kan fi iwe meji kọ (w1 ati w2). MongoDB ṣaṣeyọri tọju w1, ṣugbọn w2 ti sọnu nitori ikuna ohun elo kan.

Awọn olupilẹṣẹ diẹ sii yẹ ki o mọ eyi nipa awọn apoti isura infomesonu
Aworan ti n ṣe apejuwe oju iṣẹlẹ naa. MongoDB kọlu ṣaaju ki o to le kọ data si disk

Ṣiṣe si disk jẹ ilana ti o niyelori. Nipa yago fun awọn iṣẹ ṣiṣe loorekoore, awọn olupilẹṣẹ ṣe ilọsiwaju iṣẹ ṣiṣe gbigbasilẹ laibikita igbẹkẹle. MongoDB lọwọlọwọ ṣe atilẹyin gedu, ṣugbọn awọn kikọ idọti tun le ni ipa lori iduroṣinṣin data nitori pe a ti mu awọn iforukọsilẹ ni gbogbo 100ms nipasẹ aiyipada. Iyẹn ni, iru oju iṣẹlẹ kan tun ṣee ṣe fun awọn akọọlẹ ati awọn ayipada ti a gbekalẹ ninu wọn, botilẹjẹpe eewu naa kere pupọ.

Ipamọ data kọọkan ni aitasera tirẹ ati awọn ilana ipinya

Ninu awọn ibeere ACID, aitasera ati ipinya nṣogo nọmba ti o tobi julọ ti awọn imuse ti o yatọ nitori ibiti awọn iṣowo-pipin jẹ gbooro. O gbọdọ sọ pe aitasera ati ipinya jẹ awọn iṣẹ gbowolori pupọ. Wọn nilo isọdọkan ati mu idije pọ si fun aitasera data. Idiju iṣoro naa pọ si ni pataki nigbati o jẹ dandan lati ṣe iwọn data data ni ita laarin awọn ile-iṣẹ data lọpọlọpọ (paapaa ti wọn ba wa ni oriṣiriṣi awọn agbegbe agbegbe). Iṣeyọri ipele giga ti aitasera jẹ gidigidi nira, bi o ti tun dinku wiwa ati mu ipin nẹtiwọki pọ si. Fun alaye gbogbogbo diẹ sii ti iṣẹlẹ yii, Mo gba ọ ni imọran lati tọka si CAP akori. O tun tọ lati ṣe akiyesi pe awọn ohun elo le mu awọn oye kekere ti aiṣedeede, ati awọn olupilẹṣẹ le loye awọn nuances ti iṣoro naa daradara to lati ṣe imuse ọgbọn afikun ninu ohun elo naa lati mu aiṣedeede laisi gbigbe ara le lori data data lati mu.

Awọn DBMS nigbagbogbo pese awọn ipele ipinya oriṣiriṣi. Awọn olupilẹṣẹ ohun elo le yan eyi ti o munadoko julọ da lori awọn ayanfẹ wọn. Iyasọtọ kekere gba laaye fun iyara ti o pọ si, ṣugbọn tun mu eewu ti ije data pọ si. Idabobo giga dinku iṣeeṣe yii, ṣugbọn fa fifalẹ iṣẹ ati pe o le ja si idije, eyiti yoo yorisi iru awọn idaduro ni ipilẹ ti awọn ikuna bẹrẹ.

Awọn olupilẹṣẹ diẹ sii yẹ ki o mọ eyi nipa awọn apoti isura infomesonu
Atunwo ti awọn awoṣe concurrency ti o wa tẹlẹ ati awọn ibatan laarin wọn

Boṣewa SQL n ṣalaye awọn ipele ipinya mẹrin nikan, botilẹjẹpe ni imọ-jinlẹ ati adaṣe ọpọlọpọ diẹ sii wa. Jepson.io nfun ẹya o tayọ Akopọ ti wa tẹlẹ concurrency si dede. Fun apẹẹrẹ, Google Spanner ṣe iṣeduro serializability ita pẹlu mimuuṣiṣẹpọ aago, ati botilẹjẹpe eyi jẹ Layer ipinya ti o muna, ko ṣe asọye ni awọn ipele ipinya boṣewa.

Iwọn SQL n mẹnuba awọn ipele ipinya wọnyi:

  • Serializable (julọ stringent ati ki o gbowolori): Serializable ipaniyan ni o ni kanna ipa bi diẹ ninu awọn lesese idunadura ipaniyan. Ipaniyan lesese tumọ si pe idunadura kọọkan ti o tẹle bẹrẹ nikan lẹhin ti iṣaaju ti pari. O yẹ ki o ṣe akiyesi pe ipele naa Serializable nigbagbogbo ṣe imuse bi ohun ti a pe ni ipinya aworan (fun apẹẹrẹ, ni Oracle) nitori awọn iyatọ ninu itumọ, botilẹjẹpe ipinya aworan funrararẹ ko ṣe aṣoju ni boṣewa SQL.
  • Awọn kika leralera: Awọn igbasilẹ ti ko ni ifaramọ ni iṣowo lọwọlọwọ wa si iṣowo lọwọlọwọ, ṣugbọn awọn iyipada ti a ṣe nipasẹ awọn iṣowo miiran (gẹgẹbi awọn ori ila tuntun) ko han.
  • Ka olufaraji: Uncommitted data ni ko wa fun lẹkọ. Ni idi eyi, awọn iṣowo le rii data ifaramọ nikan, ati awọn kika Phantom le waye. Ti idunadura kan ba fi sii ati ṣe awọn ori ila tuntun, idunadura lọwọlọwọ yoo ni anfani lati rii wọn nigbati o beere.
  • Ka uncommitted (o kere ti o muna ati ki o gbowolori ipele): idọti kika ti wa ni laaye, lẹkọ le ri uncommitted ayipada ṣe nipasẹ miiran lẹkọ. Ni iṣe, ipele yii le wulo fun awọn iṣiro inira, gẹgẹbi awọn ibeere COUNT(*) lori tabili.

Ipele Serializable dinku eewu ti awọn ere-ije data, lakoko ti o jẹ gbowolori julọ lati ṣe ati abajade ni fifuye ifigagbaga ti o ga julọ lori eto naa. Awọn ipele ipinya miiran rọrun lati ṣe, ṣugbọn mu iṣeeṣe ti awọn ere-ije data pọ si. Diẹ ninu awọn DBMS gba ọ laaye lati ṣeto ipele ipinya aṣa, awọn miiran ni awọn ayanfẹ ti o lagbara ati pe kii ṣe gbogbo awọn ipele ni atilẹyin.

Atilẹyin fun awọn ipele ipinya nigbagbogbo ni ipolowo ni DBMS ti a fun, ṣugbọn iwadii iṣọra nikan ti ihuwasi rẹ le ṣafihan kini n ṣẹlẹ.

Awọn olupilẹṣẹ diẹ sii yẹ ki o mọ eyi nipa awọn apoti isura infomesonu
Atunwo ti awọn aiṣedeede concurrency ni awọn ipele ipinya oriṣiriṣi fun awọn DBMS oriṣiriṣi

Martin Kleppmann ninu rẹ ise agbese hermitage Ṣe afiwe awọn ipele ipinya oriṣiriṣi, sọrọ nipa awọn aiṣedeede concurrency, ati boya data data ni anfani lati faramọ ipele ipinya kan pato. Iwadi Kleppmann ṣe afihan bii iyatọ ti awọn olupilẹṣẹ data ṣe ronu nipa awọn ipele ipinya.

Idilọwọ ireti wa si igbala nigbati o ṣoro lati ṣetọju ọkan deede.

Idinamọ le jẹ gbowolori pupọ, kii ṣe nitori pe o mu idije pọ si ni ibi ipamọ data, ṣugbọn nitori pe o nilo awọn olupin ohun elo lati sopọ nigbagbogbo si ibi ipamọ data. Pipin nẹtiwọki le buru si awọn ipo titiipa iyasoto ati ja si awọn titiipa ti o nira lati ṣe idanimọ ati yanju. Ni awọn ọran nibiti titiipa iyasoto ko dara, titiipa ireti ṣe iranlọwọ.

Titiipa ireti jẹ ọna ninu eyiti nigba kika okun kan, o ṣe akiyesi ẹya rẹ, checksum, tabi akoko iyipada to kẹhin. Eyi n gba ọ laaye lati rii daju pe ko si iyipada ẹya atomiki ṣaaju iyipada titẹsi kan:

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

Ni idi eyi, imudojuiwọn tabili products kii yoo ṣee ṣe ti iṣẹ miiran ba ṣe awọn ayipada tẹlẹ si ila yii. Ti ko ba si awọn iṣẹ miiran ti a ṣe lori ọna yii, iyipada fun ọna kan yoo waye ati pe a le sọ pe imudojuiwọn naa ṣaṣeyọri.

Nibẹ ni o wa miiran asemase Yato si idọti kika ati data pipadanu

Nigba ti o ba de si data aitasera, awọn idojukọ jẹ lori awọn ti o pọju fun ije ipo ti o le ja si idọti kika ati data pipadanu. Sibẹsibẹ, data asemase ko da nibẹ.

Ọkan apẹẹrẹ ti iru asemase ni gbigbasilẹ iparun (kọ skews). Awọn ipalọlọ ni o nira lati rii nitori wọn kii ṣe igbagbogbo wa ni itara. Wọn kii ṣe nitori awọn kika idọti tabi pipadanu data, ṣugbọn si irufin awọn idiwọ ọgbọn ti a gbe sori data naa.

Fun apẹẹrẹ, jẹ ki a gbero ohun elo ibojuwo kan ti o nilo oniṣẹ kan lati wa ni ipe ni gbogbo igba:

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;

Ni ipo ti o wa loke, ibajẹ igbasilẹ yoo waye ti awọn iṣowo mejeeji ba ni aṣeyọri. Botilẹjẹpe ko si awọn kika idọti tabi pipadanu data, iduroṣinṣin ti data naa ti gbogun: ni bayi eniyan meji ni a gbero lori ipe ni akoko kanna.

Serializable ipinya, schema oniru, tabi database inira le ran imukuro kikọ ibaje. Awọn olupilẹṣẹ gbọdọ ni anfani lati ṣe idanimọ iru awọn aiṣedeede lakoko idagbasoke lati yago fun wọn ni iṣelọpọ. Ni akoko kanna, awọn ipalọlọ gbigbasilẹ jẹ nira pupọ lati wa ninu ipilẹ koodu. Paapa ni awọn eto nla, nigbati awọn ẹgbẹ idagbasoke oriṣiriṣi jẹ iduro fun imuse awọn iṣẹ ti o da lori awọn tabili kanna ati pe ko gba lori awọn pato ti wiwọle data.

Ibi ipamọ data ati olumulo ko nigbagbogbo gba lori kini lati ṣe

Ọkan ninu awọn ẹya pataki ti awọn apoti isura infomesonu jẹ iṣeduro ti aṣẹ ipaniyan, ṣugbọn aṣẹ yii funrararẹ le ma ṣe afihan si idagbasoke sọfitiwia naa. Awọn apoti isura infomesonu ṣiṣẹ awọn iṣowo ni aṣẹ ti wọn gba, kii ṣe ni aṣẹ ti awọn olupilẹṣẹ pinnu. Ilana ti awọn iṣowo jẹ soro lati ṣe asọtẹlẹ, ni pataki ni awọn ọna ṣiṣe afiwera pupọ.

Lakoko idagbasoke, ni pataki nigbati o ba n ṣiṣẹ pẹlu awọn ile-ikawe ti kii ṣe idinamọ, ara ti ko dara ati kika kika kekere le fa ki awọn olumulo gbagbọ pe awọn iṣowo ti wa ni ṣiṣe lẹsẹsẹ, nigbati ni otitọ wọn le de ibi ipamọ data ni eyikeyi aṣẹ.

Ni iwo akọkọ, ninu eto ti o wa ni isalẹ, T1 ati T2 ni a pe ni atẹlera, ṣugbọn ti awọn iṣẹ wọnyi ko ba ni idinamọ ati da abajade pada lẹsẹkẹsẹ ni fọọmu naa. ileri, lẹhinna aṣẹ ti awọn ipe yoo jẹ ipinnu nipasẹ awọn akoko ti wọn wọ ibi ipamọ data:

result1 = T1 () // awọn esi gidi jẹ awọn ileri
Abajade2 = T2()

Ti o ba nilo atomity (iyẹn ni, boya gbogbo awọn iṣẹ gbọdọ pari tabi aborted) ati awọn ọran lẹsẹsẹ, lẹhinna awọn iṣẹ T1 ati T2 gbọdọ ṣee ṣe laarin idunadura kan.

Sharding ipele-elo le ṣee gbe si ita ohun elo naa

Sharding jẹ ọna kan ti nâa ipin a database. Diẹ ninu awọn apoti isura infomesonu le pin data laifọwọyi ni ita, lakoko ti awọn miiran ko le, tabi ko dara julọ ni rẹ. Nigbati awọn ayaworan ile data / awọn olupilẹṣẹ ni anfani lati ṣe asọtẹlẹ gangan bi data yoo ṣe wọle si, wọn le ṣẹda awọn ipin petele ni aaye olumulo dipo fifi iṣẹ yii si ibi ipamọ data. Ilana yii ni a npe ni "sharding-ipele ohun elo" (sharding ipele-elo).

Laanu, orukọ yii nigbagbogbo ṣẹda aburu pe sharding ngbe ni awọn iṣẹ ohun elo. Ni otitọ, o le ṣe imuse bi Layer lọtọ ni iwaju aaye data. Da lori idagbasoke data ati awọn iterations sikema, awọn ibeere sharding le di eka pupọ. Diẹ ninu awọn ọgbọn le ni anfani lati agbara lati ṣe atunwo laisi nini lati tun awọn olupin ohun elo ṣiṣẹ.

Awọn olupilẹṣẹ diẹ sii yẹ ki o mọ eyi nipa awọn apoti isura infomesonu
Apeere ti faaji ninu eyiti awọn olupin ohun elo ti yapa lati iṣẹ sharding

Gbigbe sharding sinu iṣẹ ti o yatọ ṣe afikun agbara lati lo oriṣiriṣi awọn ilana sharding laisi iwulo lati tun awọn ohun elo ṣiṣẹ. Vitess jẹ apẹẹrẹ ti iru eto sharding ni ipele ohun elo. Vitess n pese pinpin petele fun MySQL ati gba awọn alabara laaye lati sopọ si rẹ nipasẹ ilana MySQL. Eto naa pin data sinu oriṣiriṣi awọn apa MySQL ti ko mọ nkankan nipa ara wọn.

Imudara adaṣe le jẹ eewu

AUTOINCREMENT jẹ ọna ti o wọpọ lati ṣe ipilẹṣẹ awọn bọtini akọkọ. Nigbagbogbo awọn ọran wa nigbati awọn apoti isura data ba wa ni lilo bi awọn olupilẹṣẹ ID, ati ibi ipamọ data ni awọn tabili ti a ṣe apẹrẹ lati ṣe ipilẹṣẹ awọn idamo. Awọn idi pupọ lo wa ti ṣiṣẹda awọn bọtini akọkọ nipa lilo imudara-laifọwọyi jina si apẹrẹ:

  • Ninu ibi ipamọ data ti a pin, fifi-laifọwọyi jẹ iṣoro pataki kan. Lati ṣe ipilẹṣẹ ID, titiipa agbaye kan nilo. Dipo, o le ṣe ina UUID kan: eyi ko nilo ibaraenisepo laarin awọn apa ibi ipamọ data oriṣiriṣi. Imudara aifọwọyi pẹlu awọn titiipa le ja si ariyanjiyan ati dinku iṣẹ ṣiṣe ni pataki lori awọn ifibọ ni awọn ipo pinpin. Diẹ ninu awọn DBMS (fun apẹẹrẹ, MySQL) le nilo iṣeto ni pataki ati akiyesi iṣọra diẹ sii lati ṣeto daradara-titunto si ẹda. Ati pe o rọrun lati ṣe awọn aṣiṣe nigba atunto, eyi ti yoo ja si awọn ikuna igbasilẹ.
  • Diẹ ninu awọn apoti isura infomesonu ni awọn algoridimu ipin ti o da lori awọn bọtini akọkọ. Awọn ID itẹlera le ja si awọn aaye gbigbona airotẹlẹ ati iwuwo ti o pọ si lori diẹ ninu awọn ipin nigba ti awọn miiran wa laišišẹ.
  • Bọtini akọkọ ni ọna ti o yara ju lati wọle si ọna kan ninu aaye data kan. Pẹlu awọn ọna ti o dara julọ lati ṣe idanimọ awọn igbasilẹ, awọn ID lesẹsẹ le yi ọwọn pataki julọ ninu awọn tabili sinu iwe ti ko wulo ti o kun pẹlu awọn iye ti ko ni itumọ. Nitorinaa, nigbakugba ti o ṣee ṣe, jọwọ yan alailẹgbẹ agbaye ati bọtini akọkọ adayeba (fun apẹẹrẹ orukọ olumulo).

Ṣaaju ki o to pinnu lori ọna kan, ṣe akiyesi ipa ti awọn ID ti n pọsi adaṣe ati awọn UUID lori titọka, ipin, ati sharding.

Awọn data stale le wulo ati pe ko nilo titiipa

Iṣakoso Concurrency Multiversion (MVCC) ṣe ọpọlọpọ awọn ibeere aitasera ti a sọrọ ni ṣoki loke. Diẹ ninu awọn apoti isura infomesonu (fun apẹẹrẹ, Postgres, Spanner) lo MVCC lati “fi ifunni” awọn iṣowo pẹlu snapshots-awọn ẹya agbalagba ti data. Awọn iṣowo fọto fọto le tun jẹ lẹsẹsẹ lati rii daju pe aitasera. Nigbati o ba nka lati aworan aworan atijọ, data ti igba atijọ ti ka.

Kika data aiduro die-die le wulo, fun apẹẹrẹ, nigbati o ba n ṣe ipilẹṣẹ awọn atupale lati inu data tabi ṣe iṣiro awọn iye apapọ isunmọ.

Anfani akọkọ ti ṣiṣẹ pẹlu data inunibini jẹ lairi kekere (paapaa ti data ba pin kaakiri awọn agbegbe oriṣiriṣi). Awọn keji ni wipe kika-nikan lẹkọ wa ni titiipa-free. Eyi jẹ anfani pataki fun awọn ohun elo ti o ka pupọ, niwọn igba ti wọn le mu data ti o duro.

Awọn olupilẹṣẹ diẹ sii yẹ ki o mọ eyi nipa awọn apoti isura infomesonu
Olupin ohun elo naa ka data lati ẹda agbegbe ti o jẹ iṣẹju-aaya 5 ti ọjọ, paapaa ti ẹya tuntun ba wa ni apa keji Okun Pasifiki

Awọn DBMS n nu awọn ẹya agbalagba nu laifọwọyi ati, ni awọn igba miiran, gba ọ laaye lati ṣe eyi ni ibere. Fun apẹẹrẹ, Postgres gba awọn olumulo laaye lati ṣe VACUUM lori ìbéèrè, ati ki o tun lorekore ṣe iṣẹ yii laifọwọyi. Spanner nṣiṣẹ ikojọpọ idoti lati yọkuro awọn aworan ti o dagba ju wakati kan lọ.

Eyikeyi akoko orisun ni o wa koko ọrọ si iparun

Aṣiri ti o tọju ti o dara julọ ni imọ-ẹrọ kọnputa ni pe gbogbo awọn API akoko purọ. Ni otitọ, awọn ẹrọ wa ko mọ akoko gangan gangan. Awọn kọnputa ni awọn kirisita quartz ti o ṣe ina awọn gbigbọn ti o lo lati tọju akoko. Sibẹsibẹ, wọn ko ṣe deede ati pe o le wa niwaju / aisun lẹhin akoko gangan. Iyipada naa le de ọdọ awọn aaya 20 fun ọjọ kan. Nitorina, akoko lori awọn kọmputa wa gbọdọ wa ni mimuuṣiṣẹpọ lorekore pẹlu nẹtiwọki kan.

Awọn olupin NTP ni a lo fun imuṣiṣẹpọ, ṣugbọn ilana imuṣiṣẹpọ funrararẹ jẹ koko-ọrọ si awọn idaduro nẹtiwọki. Paapaa mimuuṣiṣẹpọ pẹlu olupin NTP ni ile-iṣẹ data kanna gba akoko diẹ. O han gbangba pe ṣiṣẹ pẹlu olupin NTP ti gbogbo eniyan le ja si idarudapọ paapaa.

Awọn aago atomiki ati awọn ẹlẹgbẹ GPS wọn dara julọ fun ṣiṣe ipinnu akoko lọwọlọwọ, ṣugbọn wọn gbowolori ati nilo iṣeto eka, nitorinaa wọn ko le fi sori ẹrọ lori ọkọ ayọkẹlẹ kọọkan. Nitori eyi, awọn ile-iṣẹ data lo ọna ti o ni ipele. Atomic ati/tabi awọn aago GPS fihan akoko gangan, lẹhin eyi o ti wa ni ikede si awọn ẹrọ miiran nipasẹ awọn olupin keji. Eyi tumọ si pe ẹrọ kọọkan yoo ni iriri aiṣedeede kan lati akoko gangan.

Ipo naa buru si nipasẹ otitọ pe awọn ohun elo ati awọn apoti isura infomesonu nigbagbogbo wa lori awọn ẹrọ oriṣiriṣi (ti ko ba si ni awọn ile-iṣẹ data oriṣiriṣi). Nitorinaa, akoko yoo yato kii ṣe lori awọn apa DB ti o pin kaakiri awọn ẹrọ oriṣiriṣi. Yoo tun yatọ lori olupin ohun elo.

Google TrueTime gba ọna ti o yatọ patapata. Ọpọlọpọ eniyan gbagbọ pe ilọsiwaju Google ni itọsọna yii jẹ alaye nipasẹ iyipada banal si atomiki ati awọn aago GPS, ṣugbọn eyi jẹ apakan nikan ti aworan nla. Eyi ni bii TrueTime ṣe n ṣiṣẹ:

  • TrueTime nlo awọn orisun oriṣiriṣi meji: GPS ati awọn aago atomiki. Awọn aago wọnyi ni awọn ipo ikuna ti ko ni ibatan. [wo oju-iwe 5 fun alaye nibi - isunmọ. itumọ.), nitorina lilo apapọ wọn pọ si igbẹkẹle.
  • TrueTime ni API dani. O pada akoko bi aarin pẹlu aṣiṣe wiwọn ati aidaniloju ti a ṣe sinu rẹ. Akoko gangan ni akoko jẹ ibikan laarin oke ati isalẹ awọn aala ti aarin. Spanner, ibi ipamọ data ti Google ti pin, o kan duro titi ti o fi jẹ ailewu lati sọ pe akoko ti o wa lọwọlọwọ ko ni aaye. Ọna yii ṣafihan diẹ ninu lairi sinu eto naa, paapaa ti aidaniloju lori awọn oluwa jẹ giga, ṣugbọn ṣe idaniloju pe o tọ paapaa ni ipo ti o pin kaakiri agbaye.

Awọn olupilẹṣẹ diẹ sii yẹ ki o mọ eyi nipa awọn apoti isura infomesonu
Awọn paati Spanner lo TrueTime, nibiti TT.now () ṣe pada si aarin, nitorinaa Spanner sun sùn titi di aaye nibiti o le ni igboya pe akoko lọwọlọwọ ti kọja aaye kan

Dinku deede ni ṣiṣe ipinnu akoko lọwọlọwọ tumọ si ilosoke ninu iye akoko awọn iṣẹ Spanner ati idinku ninu iṣẹ. Eyi ni idi ti o ṣe pataki lati ṣetọju iṣedede ti o ṣeeṣe ti o ga julọ botilẹjẹpe ko ṣee ṣe lati gba iṣọ deede pipe.

Idaduro ni ọpọlọpọ awọn itumọ

Ti o ba beere awọn amoye mejila nipa kini idaduro jẹ, o ṣee ṣe ki o gba awọn idahun oriṣiriṣi. Ni airi DBMS nigbagbogbo ni a pe ni “airi data data” ati pe o yatọ si ohun ti o rii nipasẹ alabara. Otitọ ni pe alabara ṣe akiyesi apao ti idaduro nẹtiwọọki ati idaduro data data. Agbara lati ya sọtọ iru lairi jẹ pataki nigbati o n ṣatunṣe awọn iṣoro dagba. Nigbati o ba n gba ati ṣafihan awọn metiriki, nigbagbogbo gbiyanju lati tọju awọn iru mejeeji.

Awọn ibeere ṣiṣe yẹ ki o ṣe ayẹwo fun idunadura kan pato

Nigba miiran awọn abuda iṣẹ ti DBMS ati awọn idiwọn rẹ jẹ pato ni awọn ofin ti kikọ / kika ati lairi. Eyi n pese akopọ gbogbogbo ti awọn aye eto bọtini, ṣugbọn nigbati o ba n ṣe iṣiro iṣẹ ṣiṣe ti DBMS tuntun kan, ọna pipe diẹ sii ni lati ṣe iṣiro awọn iṣẹ ṣiṣe pataki lọtọ (fun ibeere kọọkan ati/tabi idunadura). Awọn apẹẹrẹ:

  • Kọ agbejade ati lairi nigbati o ba nfi ila tuntun sii sinu tabili X (pẹlu awọn ori ila 50 miliọnu) pẹlu awọn ihamọ pato ati fifẹ ila ni awọn tabili ti o jọmọ.
  • Idaduro ni iṣafihan awọn ọrẹ ti awọn ọrẹ ti olumulo kan nigbati apapọ nọmba awọn ọrẹ jẹ 500.
  • Lairi ni gbigba awọn titẹ sii 100 oke lati itan olumulo nigbati olumulo ba tẹle awọn olumulo 500 miiran pẹlu awọn titẹ sii X fun wakati kan.

Igbelewọn ati idanwo le pẹlu iru awọn ọran to ṣe pataki titi ti o fi ni igboya pe data data pade awọn ibeere iṣẹ. Ofin ti o jọra ti atanpako tun gba didenukole yii sinu akọọlẹ nigba gbigba awọn metiriki lairi ati ṣiṣe ipinnu SLOs.

Ṣọra nipa kadinality giga nigba gbigba awọn metiriki fun iṣẹ kọọkan. Lo awọn akọọlẹ, ikojọpọ iṣẹlẹ, tabi wiwa kaakiri lati gba data n ṣatunṣe agbara giga. Ninu nkan naa "Ṣe o fẹ lati yokokoro Lairi bi?»o le mọ ara rẹ pẹlu awọn ilana ti n ṣatunṣe aṣiṣe idaduro.

Awọn iṣowo itẹle le jẹ eewu

Kii ṣe gbogbo DBMS ṣe atilẹyin awọn iṣowo itẹ-ẹiyẹ, ṣugbọn nigbati wọn ba ṣe, iru awọn iṣowo le ja si awọn aṣiṣe airotẹlẹ ti kii ṣe rọrun nigbagbogbo lati rii (iyẹn ni, o yẹ ki o han gbangba pe iru anomaly wa).

O le yago fun lilo awọn iṣowo itẹ-ẹiyẹ nipa lilo awọn ile-ikawe alabara ti o le ṣe awari ati fori wọn. Ti awọn iṣowo itẹ-ẹiyẹ ko ba le kọ silẹ, ṣe abojuto pataki ni imuse wọn lati yago fun awọn ipo airotẹlẹ nibiti awọn iṣowo ti o pari ti fa airotẹlẹ lairotẹlẹ nitori awọn itẹ-ẹiyẹ.

Encapsulating lẹkọ ni orisirisi awọn fẹlẹfẹlẹ le ja si airotẹlẹ tiwon lẹkọ, ati lati a koodu kika ojuami ti wo, o le ṣe awọn ti o soro lati ni oye awọn ero onkowe. Wo eto atẹle yii:

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

Kini yoo jẹ abajade ti koodu ti o wa loke? Ṣe yoo yi awọn iṣowo mejeeji pada, tabi ti inu nikan? Kini yoo ṣẹlẹ ti a ba gbẹkẹle awọn ipele pupọ ti awọn ile-ikawe ti o ṣe idasile ẹda awọn iṣowo fun wa? Njẹ a yoo ni anfani lati ṣe idanimọ ati ilọsiwaju iru awọn ọran bi?

Foju inu wo ipele data kan pẹlu awọn iṣẹ ṣiṣe lọpọlọpọ (fun apẹẹrẹ. newAccount) ti wa ni imuse tẹlẹ ninu awọn iṣowo tirẹ. Kini yoo ṣẹlẹ ti o ba ṣiṣẹ wọn gẹgẹbi apakan ti oye iṣowo ipele-giga ti o nṣiṣẹ laarin idunadura tirẹ? Kini yoo jẹ ipinya ati aitasera ninu ọran yii?

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

Dipo wiwa awọn idahun si iru awọn ibeere ailopin, o dara lati yago fun awọn iṣowo itẹ-ẹiyẹ. Lẹhinna, Layer data rẹ le ni irọrun ṣe awọn iṣẹ ipele giga laisi ṣiṣẹda awọn iṣowo tirẹ. Ni afikun, imọ-ọrọ iṣowo funrararẹ ni agbara lati bẹrẹ iṣowo kan, ṣiṣe awọn iṣẹ lori rẹ, ṣiṣe tabi fagile idunadura kan.

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.

Awọn iṣowo ko yẹ ki o so mọ ipo ohun elo

Nigba miiran o jẹ idanwo lati lo ipo ohun elo ni awọn iṣowo lati yi awọn iye kan pada tabi awọn igbelewọn ibeere tweak. Nuance to ṣe pataki lati gbero ni ipari ohun elo to pe. Awọn alabara nigbagbogbo tun bẹrẹ awọn iṣowo nigbati awọn iṣoro nẹtiwọọki ba wa. Ti idunadura naa ba da lori ipo ti o jẹ iyipada nipasẹ ilana miiran, o le yan iye ti ko tọ da lori iṣeeṣe ti ije data kan. Awọn iṣowo gbọdọ gbero eewu ti awọn ipo ere-ije data ninu ohun elo naa.

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

Idunadura ti o wa loke yoo pọ si nọmba ọkọọkan ni gbogbo igba ti o ba ti ṣiṣẹ, laibikita abajade ikẹhin. Ti iṣẹ naa ba kuna nitori awọn iṣoro nẹtiwọọki, ibeere naa yoo ṣiṣẹ pẹlu nọmba ọkọọkan ti o yatọ nigbati o ba gbiyanju lẹẹkansi.

Awọn oluṣeto ibeere le sọ fun ọ pupọ nipa data data kan

Awọn oluṣeto ibeere pinnu bi ibeere yoo ṣe ṣiṣẹ ni ibi ipamọ data. Wọn tun ṣe itupalẹ awọn ibeere ati mu wọn dara ṣaaju fifiranṣẹ wọn. Awọn oluṣeto le pese diẹ ninu awọn iṣiro ti o ṣeeṣe nikan ti o da lori awọn ifihan agbara ni ọwọ wọn. Fun apẹẹrẹ, kini ọna wiwa ti o dara julọ fun ibeere atẹle?

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

Awọn abajade le ṣee gba ni awọn ọna meji:

  • Full tabili ọlọjẹ: O le wo titẹ sii kọọkan ninu tabili ati da awọn nkan pada pẹlu orukọ onkọwe ti o baamu, lẹhinna paṣẹ wọn.
  • Atọka Atọka: O le lo atọka lati wa awọn ID ti o baamu, gba awọn ori ila wọnyẹn, lẹhinna paṣẹ wọn.

Iṣẹ oluṣeto ibeere ni lati pinnu iru ilana ti o dara julọ. O tọ lati ronu pe awọn oluṣeto ibeere nikan ni awọn agbara asọtẹlẹ to lopin. Eyi le ja si awọn ipinnu buburu. Awọn DBA tabi awọn olupilẹṣẹ le lo wọn lati ṣe iwadii ati ṣatunṣe awọn ibeere ti ko ṣiṣẹ daradara. Awọn ẹya tuntun ti DBMS le tunto awọn oluṣeto ibeere, ati pe iwadii ara ẹni le ṣe iranlọwọ nigbati imudojuiwọn data ba ti ikede tuntun ba yori si awọn iṣoro iṣẹ. Awọn iforukọsilẹ ibeere ti o lọra, awọn ijabọ ọran lairi, tabi awọn iṣiro akoko ipaniyan le ṣe iranlọwọ idanimọ awọn ibeere ti o nilo iṣapeye.

Diẹ ninu awọn metiriki ti a gbekalẹ nipasẹ oluṣeto ibeere le jẹ koko ọrọ si ariwo (paapaa nigbati o ba ṣe iṣiro idaduro tabi akoko Sipiyu). Afikun ti o dara si awọn oluṣeto jẹ awọn irinṣẹ fun wiwa ati ipasẹ ipa-ọna ipaniyan. Wọn gba ọ laaye lati ṣe iwadii iru awọn iṣoro bẹ (alas, kii ṣe gbogbo awọn DBMS pese iru awọn irinṣẹ bẹ).

Iṣilọ ori ayelujara nira ṣugbọn o ṣee ṣe

Iṣilọ ori ayelujara, ijira laaye, tabi iṣiwa akoko gidi tumọ si gbigbe lati ibi ipamọ data kan si omiiran laisi akoko idinku tabi ibajẹ data. Iṣilọ laaye rọrun lati gbe jade ti iyipada ba waye laarin DBMS/ẹnjini kanna. Ipo naa di idiju diẹ sii nigbati o jẹ dandan lati gbe si DBMS tuntun pẹlu iṣẹ ṣiṣe oriṣiriṣi ati awọn ibeere ero.

Awọn awoṣe ijira ori ayelujara oriṣiriṣi wa. Eyi ni ọkan ninu wọn:

  • Mu titẹ sii ilọpo meji ṣiṣẹ ni awọn ibi ipamọ data mejeeji. Ipilẹ data tuntun ni ipele yii ko ni gbogbo data, ṣugbọn gba data tuntun nikan. Ni kete ti o ba ni idaniloju eyi, o le lọ si igbesẹ ti n tẹle.
  • Jeki kika lati ibi ipamọ data mejeeji.
  • Tunto eto naa ki kika ati kikọ ṣe ni akọkọ lori aaye data tuntun.
  • Duro kikọ si aaye data atijọ lakoko ti o tẹsiwaju lati ka data lati inu rẹ. Ni ipele yii, aaye data tuntun tun ko ni diẹ ninu awọn data. Wọn yẹ ki o daakọ lati ibi ipamọ data atijọ.
  • Ibi ipamọ data atijọ jẹ kika-nikan. Da data ti o padanu lati ibi ipamọ data atijọ si tuntun. Lẹhin ti ijira naa ti pari, yipada awọn ipa-ọna si ibi ipamọ data tuntun, ki o da ohun atijọ duro ki o paarẹ lati eto naa.

Fun afikun alaye, Mo ṣeduro kikan si article, eyiti o ṣe alaye ilana ijira Stripe ti o da lori awoṣe yii.

Ilọsoke pataki ninu ibi ipamọ data jẹ ilosoke ninu airotẹlẹ

Idagba ti database nyorisi awọn iṣoro ti a ko le sọ tẹlẹ ti o ni nkan ṣe pẹlu iwọn rẹ. Bi a ṣe mọ diẹ sii nipa eto inu ti database, dara julọ ti a le ṣe asọtẹlẹ bii yoo ṣe iwọn. Sibẹsibẹ, diẹ ninu awọn akoko ko ṣee ṣe lati rii tẹlẹ.
Bi ipilẹ ti n dagba, awọn igbero iṣaaju ati awọn ireti nipa iwọn data ati awọn ibeere bandiwidi nẹtiwọọki le di igba atijọ. Eyi ni nigbati ibeere naa ba dide ti awọn atunṣe apẹrẹ pataki, awọn ilọsiwaju iṣẹ ṣiṣe ti iwọn nla, awọn imuṣiṣẹ atunto, tabi iṣiwa si awọn DBMS miiran lati yago fun awọn iṣoro ti o pọju.

Ṣugbọn maṣe ronu pe imọ ti o dara julọ ti eto inu ti ibi ipamọ data ti o wa nikan ni ohun kan ti o jẹ dandan. Awọn irẹjẹ tuntun yoo mu awọn aimọ tuntun wa pẹlu wọn. Awọn aaye irora ti a ko le sọ tẹlẹ, pinpin data airotẹlẹ, bandiwidi airotẹlẹ ati awọn ọran ohun elo, ijabọ nigbagbogbo ati awọn abala nẹtiwọọki tuntun yoo fi agbara mu ọ lati tun ronu ọna data data rẹ, awoṣe data, awoṣe imuṣiṣẹ, ati iwọn data.

...

Ni akoko ti Mo bẹrẹ si ronu nipa titẹjade nkan yii, awọn nkan marun ti wa tẹlẹ lori atokọ atilẹba mi. Lẹhinna nọmba nla wa titun ero nipa ohun miiran le wa ni bo. Nitorinaa, nkan naa fọwọkan awọn iṣoro ti o han gbangba ti o kere julọ ti o nilo akiyesi ti o pọju. Sibẹsibẹ, eyi ko tumọ si pe koko-ọrọ naa ti pari ati pe emi kii yoo tun pada si ọdọ rẹ ni awọn ohun elo iwaju mi ​​ati pe kii yoo ṣe awọn iyipada si ti isiyi.

PS

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun