Aktar żviluppaturi għandhom ikunu jafu dan dwar id-databases

Nota. transl.: Jaana Dogan hija inġinier b'esperjenza fil-Google li bħalissa qed taħdem fuq l-osservabilità tas-servizzi tal-produzzjoni tal-kumpanija miktuba f'Go. F'dan l-artikolu, li kiseb popolarità kbira fost l-udjenza li titkellem bl-Ingliż, hija ġabret fi 17-il punt dettalji tekniċi importanti dwar DBMSs (u xi kultant sistemi mqassma b'mod ġenerali) li huma utli biex jiġu kkunsidrati għall-iżviluppaturi ta 'applikazzjonijiet kbar/esiġenti.

Aktar żviluppaturi għandhom ikunu jafu dan dwar id-databases

Il-maġġoranza l-kbira tas-sistemi tal-kompjuter iżommu kont tal-istat tagħhom u, għalhekk, jeħtieġu xi tip ta 'sistema ta' ħażna tad-data. Akkumulajt għarfien dwar databases fuq perjodu twil ta 'żmien, tul it-triq għamilt żbalji fid-disinn li wasslu għal telf ta' data u qtugħ. F'sistemi li jipproċessaw volumi kbar ta' informazzjoni, id-databases jinsabu fil-qalba tal-arkitettura tas-sistema u jaġixxu bħala element ewlieni fl-għażla tal-aħjar soluzzjoni. Minkejja l-fatt li tingħata attenzjoni mill-qrib lill-ħidma tad-database, il-problemi li l-iżviluppaturi tal-applikazzjonijiet jippruvaw jantiċipaw ħafna drabi huma biss il-ponta tal-iceberg. F'din is-serje ta 'artikli, naqsam xi ideat li se jkunu utli għall-iżviluppaturi li mhumiex speċjalizzati f'dan il-qasam.

  1. Int xortik tajba jekk 99,999% tal-ħin in-netwerk mhux qed jikkawża problemi.
  2. AĊIDU tfisser ħafna affarijiet differenti.
  3. Kull database għandha l-mekkaniżmi tagħha biex tiżgura l-konsistenza u l-iżolament.
  4. L-imblukkar ottimist jasal għas-salvataġġ meta jkun diffiċli li jinżamm dak tas-soltu.
  5. Hemm anomaliji oħra minbarra qari maħmuġin u telf ta 'data.
  6. Id-database u l-utent mhux dejjem jaqblu dwar il-kors tal-azzjoni.
  7. L-isharding fil-livell tal-applikazzjoni jista' jiġi mċaqlaq barra l-applikazzjoni.
  8. Autoincrementing jista 'jkun perikoluż.
  9. Id-dejta mhux użata tista' tkun utli u m'għandhiex għalfejn tiġi msakkra.
  10. Distorsjonijiet huma tipiċi għal kwalunkwe sorsi ta 'żmien.
  11. Id-dewmien għandu ħafna tifsiriet.
  12. Ir-rekwiżiti tal-prestazzjoni għandhom jiġu evalwati għal tranżazzjoni speċifika.
  13. Tranżazzjonijiet nested jistgħu jkunu perikolużi.
  14. It-tranżazzjonijiet m'għandhomx ikunu marbuta mal-istat tal-applikazzjoni.
  15. Il-pjanifikaturi tal-mistoqsijiet jistgħu jgħidulek ħafna dwar id-databases.
  16. Il-migrazzjoni onlajn hija diffiċli, iżda possibbli.
  17. Żieda sinifikanti fid-database tinvolvi żieda fl-imprevedibbiltà.

Nixtieq nirringrazzja lil Emmanuel Odeke, Rein Henrichs u oħrajn għall-feedback tagħhom dwar verżjoni preċedenti ta 'dan l-artikolu.

Int xortik tajba jekk 99,999% tal-ħin in-netwerk mhux qed jikkawża problemi.

Il-mistoqsija tibqa' dwar kemm it-teknoloġiji moderni tan-netwerk huma affidabbli u kemm-il darba s-sistemi jitwaqqfu minħabba fallimenti tan-netwerk. L-informazzjoni dwar din il-kwistjoni hija skarsa u r-riċerka ħafna drabi hija ddominata minn organizzazzjonijiet kbar b'netwerks, tagħmir u persunal speċjalizzati.

B'rata ta' disponibbiltà ta' 99,999% għal Spanner (id-database ta' Google distribwita globalment), Google ssostni li biss 7,6% problemi huma relatati man-netwerk. Fl-istess ħin, il-kumpanija ssejjaħ in-netwerk speċjalizzat tagħha bħala "pilastru ewlieni" ta 'disponibbiltà għolja. Studju Bailis u Kingsbury, immexxija fl-2014, tisfida waħda mill-“kunċetti żbaljati dwar kompjuters distribwiti", li Peter Deutsch ifformula fl-1994. In-netwerk huwa verament affidabbli?

Riċerka komprensiva barra minn kumpaniji ġganti, imwettqa għall-Internet usa ', sempliċement ma teżistix. M'hemmx biżżejjed dejta wkoll mill-atturi ewlenin dwar liema perċentwal tal-problemi tal-klijenti tagħhom huma relatati man-netwerk. Aħna konxji sew tal-qtugħ fil-munzell tan-netwerk ta 'fornituri kbar ta' sħab li jistgħu jneħħu biċċa sħiħa tal-Internet għal diversi sigħat sempliċement minħabba li huma avvenimenti ta 'profil għoli li jaffettwaw numru kbir ta' nies u kumpaniji. Ħruġ tan-netwerk jista 'jikkawża problemi f'ħafna aktar każijiet, anke jekk mhux dawk il-każijiet kollha huma fil-attenzjoni. Il-klijenti tas-servizzi tal-cloud lanqas ma jafu xejn dwar il-kawżi tal-problemi. Jekk ikun hemm falliment, huwa kważi impossibbli li jiġi attribwit għal żball tan-netwerk min-naħa tal-fornitur tas-servizz. Għalihom, servizzi ta’ partijiet terzi huma kaxxi suwed. Huwa impossibbli li jiġi vvalutat l-impatt mingħajr ma tkun fornitur kbir tas-servizz.

Minħabba dak li l-atturi l-kbar jirrappurtaw dwar is-sistemi tagħhom, huwa tajjeb li tgħid li int xortih jekk id-diffikultajiet tan-netwerk jammontaw biss għal persentaġġ żgħir ta 'kwistjonijiet potenzjali ta' waqfien. Il-komunikazzjonijiet tan-netwerk għadhom ibatu minn affarijiet mundani bħal ħsarat fil-hardware, bidliet fit-topoloġija, bidliet fil-konfigurazzjoni amministrattiva, u qtugħ tad-dawl. Riċentement, kont sorpriż meta tgħallem li ġiet miżjuda l-lista ta 'problemi possibbli gdim tal-klieb il-baħar (iva, smajt sewwa).

L-AĊIDU jfisser ħafna affarijiet differenti

L-akronimu ACID tfisser Atomiċità, Konsistenza, Iżolament, Affidabilità. Dawn il-proprjetajiet tat-tranżazzjonijiet huma maħsuba biex jiżguraw il-validità tagħhom fil-każ ta 'fallimenti, żbalji, fallimenti tal-hardware, eċċ. Mingħajr ACID jew skemi simili, ikun diffiċli għall-iżviluppaturi tal-applikazzjonijiet li jiddifferenzjaw bejn dak li huma responsabbli għalih u dak li hija responsabbli d-database. Il-biċċa l-kbira tad-databases transazzjonali relazzjonali jippruvaw ikunu konformi mal-ACID, iżda approċċi ġodda bħal NoSQL taw lok għal ħafna databases mingħajr tranżazzjonijiet ACID minħabba li huma għaljin biex jiġu implimentati.

Meta dħalt fl-industrija għall-ewwel darba, il-mexxej tekniku tagħna tkellem dwar kemm kien rilevanti l-kunċett tal-ACID. Biex inkun ġust, ACID jitqies bħala deskrizzjoni approssimattiva aktar milli standard ta' implimentazzjoni strett. Illum insibha utli l-aktar għax tqajjem kategorija speċifika ta’ kwistjonijiet (u tissuġġerixxi firxa ta’ soluzzjonijiet possibbli).

Mhux kull DBMS huwa konformi mal-ACID; Fl-istess ħin, l-implimentazzjonijiet tad-database li jappoġġjaw l-ACID jifhmu s-sett ta 'rekwiżiti b'mod differenti. Waħda mir-raġunijiet għaliex l-implimentazzjonijiet tal-ACID huma irregolari hija minħabba l-ħafna kompromessi li jridu jsiru biex jiġu implimentati r-rekwiżiti tal-ACID. Il-ħallieqa jistgħu jippreżentaw id-databases tagħhom bħala konformi mal-ACID, iżda l-interpretazzjoni tal-każijiet edge tista’ tvarja b’mod drammatiku, kif ukoll il-mekkaniżmu għall-immaniġġjar ta’ avvenimenti “improbabbli”. Mill-inqas, l-iżviluppaturi jistgħu jiksbu fehim ta 'livell għoli tal-kumplessità tal-implimentazzjonijiet bażi biex jiksbu fehim xieraq tal-imġieba speċjali tagħhom u l-kompromessi tad-disinn.

Id-dibattitu dwar jekk MongoDB jikkonformax mar-rekwiżiti tal-ACID ikompli anke wara r-rilaxx tal-verżjoni 4. MongoDB ma ġiex appoġġjat għal żmien twil qtugħ tas-siġar, għalkemm b'mod awtomatiku d-data kienet impenjata fuq disk mhux aktar minn darba kull 60 sekonda. Immaġina x-xenarju li ġej: applikazzjoni tpoġġi żewġ kitbiet (w1 u w2). MongoDB jaħżen b'suċċess w1, iżda w2 jintilef minħabba ħsara fil-hardware.

Aktar żviluppaturi għandhom ikunu jafu dan dwar id-databases
Dijagramma li turi x-xenarju. MongoDB jiġġarraf qabel ma jkun jista 'jikteb data fuq disk

L-impenn għad-disk huwa proċess għali. Billi jevitaw kommessi frekwenti, l-iżviluppaturi jtejbu l-prestazzjoni tar-reġistrazzjoni għad-detriment tal-affidabbiltà. MongoDB bħalissa jappoġġja l-illoggjar, iżda l-kitbiet maħmuġin xorta jistgħu jkollhom impatt fuq l-integrità tad-dejta peress li zkuk jinqabdu kull 100ms b'mod awtomatiku. Jiġifieri, xenarju simili għadu possibbli għal zkuk u l-bidliet ippreżentati fihom, għalkemm ir-riskju huwa ħafna aktar baxx.

Kull database għandha l-konsistenza tagħha u l-mekkaniżmi ta 'iżolament

Mir-rekwiżiti tal-ACID, il-konsistenza u l-iżolament jiftaħar bl-akbar numru ta 'implimentazzjonijiet differenti minħabba li l-firxa ta' kompromessi hija usa '. Għandu jingħad li l-konsistenza u l-iżolament huma funzjonijiet pjuttost għoljin. Huma jeħtieġu koordinazzjoni u jżidu l-kompetizzjoni għall-konsistenza tad-dejta. Il-kumplessità tal-problema tiżdied b'mod sinifikanti meta jkun meħtieġ li d-database tiskala orizzontalment f'diversi ċentri tad-dejta (speċjalment jekk ikunu jinsabu f'reġjuni ġeografiċi differenti). Il-kisba ta 'livell għoli ta' konsistenza hija diffiċli ħafna, peress li tnaqqas ukoll id-disponibbiltà u żżid is-segmentazzjoni tan-netwerk. Għal spjegazzjoni aktar ġenerali ta 'dan il-fenomenu, nagħtik parir biex tirreferi għaliha Teorema tal-PAK. Ta 'min jinnota wkoll li l-applikazzjonijiet jistgħu jimmaniġġjaw ammonti żgħar ta' inkonsistenza, u l-programmaturi jistgħu jifhmu l-sfumaturi tal-problema tajjeb biżżejjed biex jimplimentaw loġika addizzjonali fl-applikazzjoni biex jimmaniġġjaw l-inkonsistenza mingħajr ma jiddependu ħafna fuq id-database biex jimmaniġġjawha.

DBMSs spiss jipprovdu livelli differenti ta 'iżolament. L-iżviluppaturi tal-applikazzjoni jistgħu jagħżlu l-aktar waħda effettiva abbażi tal-preferenzi tagħhom. Iżolament baxx jippermetti żieda fil-veloċità, iżda jżid ukoll ir-riskju ta 'tellieqa tad-dejta. Insulazzjoni għolja tnaqqas din il-probabbiltà, iżda tnaqqas ix-xogħol u tista 'twassal għal kompetizzjoni, li twassal għal tali brejkijiet fil-bażi li jibdew il-fallimenti.

Aktar żviluppaturi għandhom ikunu jafu dan dwar id-databases
Reviżjoni ta 'mudelli ta' konkorrenza eżistenti u relazzjonijiet bejniethom

L-istandard SQL jiddefinixxi biss erba 'livelli ta' iżolament, għalkemm fit-teorija u l-prattika hemm ħafna aktar. Jepson.io joffri ħarsa ġenerali eċċellenti tal-mudelli tal-konkorrenza eżistenti. Pereżempju, Google Spanner jiggarantixxi serializzazzjoni esterna b'sinkronizzazzjoni tal-arloġġ, u għalkemm dan huwa saff ta 'iżolament aktar strett, mhuwiex definit f'saffi ta' iżolament standard.

L-istandard SQL isemmi l-livelli ta 'iżolament li ġejjin:

  • Serjalizzabbli (l-aktar stretti u għaljin): L-eżekuzzjoni serjalizzabbli għandha l-istess effett bħal xi eżekuzzjoni ta 'tranżazzjoni sekwenzjali. Eżekuzzjoni sekwenzjali tfisser li kull tranżazzjoni sussegwenti tibda biss wara li titlesta dik preċedenti. Għandu jiġi nnutat li l-livell Serjalizzabbli spiss implimentati bħala l-hekk imsejjaħ iżolament ta 'snapshot (per eżempju, f'Oracle) minħabba differenzi fl-interpretazzjoni, għalkemm l-iżolament ta' snapshot innifsu mhuwiex rappreżentat fl-istandard SQL.
  • Qari ripetibbli: Reġistri mhux impenjati fit-tranżazzjoni kurrenti huma disponibbli għat-tranżazzjoni kurrenti, iżda bidliet magħmula minn tranżazzjonijiet oħra (bħal ringieli ġodda) mhux viżibbli.
  • Aqra kommess: Data mhux impenjata mhix disponibbli għat-tranżazzjonijiet. F'dan il-każ, it-tranżazzjonijiet jistgħu jaraw biss data kommessa, u jista' jseħħ qari fantażma. Jekk tranżazzjoni ddaħħal u tikkommetti ringieli ġodda, it-tranżazzjoni attwali tkun tista' tarahom meta tiġi mistoqsija.
  • Aqra mhux impenjat (livell inqas strett u għali): Qari maħmuġin huma permessi, it-tranżazzjonijiet jistgħu jaraw bidliet mhux impenjati magħmula minn tranżazzjonijiet oħra. Fil-prattika, dan il-livell jista' jkun utli għal stimi approssimattivi, bħal mistoqsijiet COUNT(*) fuq il-mejda.

Livell Serjalizzabbli jimminimizza r-riskju ta 'tiġrijiet tad-dejta, filwaqt li jkun l-aktar għali biex jiġi implimentat u jirriżulta fl-ogħla tagħbija kompetittiva fuq is-sistema. Livelli oħra ta 'iżolament huma aktar faċli biex jiġu implimentati, iżda jżidu l-probabbiltà ta' tiġrijiet tad-dejta. Xi DBMSs jippermettulek li tissettja livell ta 'iżolament tad-dwana, oħrajn għandhom preferenzi qawwija u mhux il-livelli kollha huma appoġġjati.

L-appoġġ għal-livelli ta 'iżolament ħafna drabi jiġi reklamat f'DBMS partikolari, iżda studju bir-reqqa tal-imġieba tiegħu biss jista' jiżvela x'qed jiġri fil-fatt.

Aktar żviluppaturi għandhom ikunu jafu dan dwar id-databases
Reviżjoni ta' anomaliji ta' konkorrenza f'livelli ta' iżolament differenti għal DBMSs differenti

Martin Kleppmann fil-proġett tiegħu ermita Tqabbel livelli ta 'iżolament differenti, titkellem dwar anomaliji ta' konkorrenza, u jekk id-database hijiex kapaċi taderixxi ma 'livell ta' iżolament partikolari. Ir-riċerka ta 'Kleppmann turi kif l-iżviluppaturi tad-databases jaħsbu b'mod differenti dwar il-livelli ta' iżolament.

L-imblukkar ottimist jasal għas-salvataġġ meta jkun diffiċli li jinżamm dak tas-soltu.

L-imblukkar jista 'jkun għali ħafna, mhux biss għax iżid il-kompetizzjoni fid-database, iżda wkoll għaliex jeħtieġ li s-servers tal-applikazzjoni jgħaqqdu kontinwament mad-database. Is-segmentazzjoni tan-netwerk tista' taggrava s-sitwazzjonijiet ta' qfil esklussivi u twassal għal stadji li huma diffiċli biex jiġu identifikati u solvuti. F'każijiet fejn l-illokkjar esklussiv mhuwiex adattat, l-illokkjar ottimist jgħin.

Serratura ottimista huwa metodu li fih meta taqra string, tqis il-verżjoni tagħha, is-checksum, jew il-ħin tal-aħħar modifika. Dan jippermettilek li tiżgura li ma jkun hemm l-ebda bidla fil-verżjoni atomika qabel ma tibdel entrata:

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

F'dan il-każ, l-aġġornament tat-tabella products mhux se titwettaq jekk operazzjoni oħra qabel għamlet bidliet f'din ir-ringiela. Jekk ma saru l-ebda operazzjonijiet oħra fuq din ir-ringiela, il-bidla għal ringiela waħda se sseħħ u nistgħu ngħidu li l-aġġornament kien ta 'suċċess.

Hemm anomaliji oħra minbarra qari maħmuġin u telf ta 'data

Fejn tidħol il-konsistenza tad-dejta, l-enfasi hija fuq il-potenzjal għal kundizzjonijiet tat-tellieqa li jistgħu jwasslu għal qari maħmuġin u telf ta 'dejta. Madankollu, l-anomaliji tad-dejta ma jieqfux hemm.

Eżempju wieħed ta' tali anomaliji huwa d-distorsjoni tar-reġistrazzjoni (ikteb distorti). Id-distorsjonijiet huma diffiċli biex jinstabu minħabba li normalment ma jitfittxux b'mod attiv. Dawn mhumiex dovuti għal qari maħmuġin jew telf ta 'dejta, iżda għal ksur ta' restrizzjonijiet loġiċi mqiegħda fuq id-dejta.

Pereżempju, ejja nikkunsidraw applikazzjoni ta' monitoraġġ li teħtieġ li operatur wieħed ikun on-call il-ħin kollu:

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;

Fis-sitwazzjoni ta 'hawn fuq, korruzzjoni rekord se sseħħ jekk iż-żewġ tranżazzjonijiet huma mwettqa b'suċċess. Għalkemm ma kien hemm l-ebda qari maħmuġin jew telf ta 'dejta, l-integrità tad-dejta ġiet kompromessa: issa żewġ persuni huma kkunsidrati bħala on-call fl-istess ħin.

Iżolament serjalizzabbli, disinn ta' skema, jew restrizzjonijiet ta' database jistgħu jgħinu biex tiġi eliminata l-korruzzjoni tal-kitba. L-iżviluppaturi għandhom ikunu kapaċi jidentifikaw tali anomaliji waqt l-iżvilupp biex jevitawhom fil-produzzjoni. Fl-istess ħin, id-distorsjonijiet tar-reġistrazzjoni huma estremament diffiċli li wieħed ifittex fil-bażi tal-kodiċi. Speċjalment f'sistemi kbar, meta timijiet ta 'żvilupp differenti huma responsabbli għall-implimentazzjoni ta' funzjonijiet ibbażati fuq l-istess tabelli u ma jaqblux dwar l-ispeċifiċitajiet tal-aċċess għad-dejta.

Id-database u l-utent mhux dejjem jaqblu dwar x'għandhom jagħmlu

Waħda mill-karatteristiċi ewlenin tad-databases hija l-garanzija tal-ordni ta 'eżekuzzjoni, iżda din l-ordni nnifisha tista' ma tkunx trasparenti għall-iżviluppatur tas-softwer. Id-databases jeżegwixxu tranżazzjonijiet fl-ordni li jaslu, mhux fl-ordni li biħsiebhom il-programmaturi. L-ordni tat-tranżazzjonijiet huwa diffiċli li wieħed ibassar, speċjalment f'sistemi paralleli mgħobbija ħafna.

Matul l-iżvilupp, speċjalment meta taħdem ma 'libreriji li ma jimblukkawx, stil fqir u leġibilità baxxa jistgħu jikkawżaw lill-utenti jemmnu li t-tranżazzjonijiet huma esegwiti b'mod sekwenzjali, meta fil-fatt jistgħu jaslu fid-database fi kwalunkwe ordni.

L-ewwel daqqa t'għajn, fil-programm t'hawn taħt, T1 u T2 jissejħu b'mod sekwenzjali, imma jekk dawn il-funzjonijiet ma jimblukkawx u jirritornaw immedjatament ir-riżultat fil-forma wegħda, allura l-ordni tas-sejħiet tkun determinata mill-mumenti meta daħlu fid-database:

result1 = T1() // ir-riżultati reali huma wegħdiet
riżultat2 = T2()

Jekk l-atomiċità hija meħtieġa (jiġifieri, jew l-operazzjonijiet kollha għandhom jitlestew jew jiġu abortiti) u s-sekwenza huma importanti, allura l-operazzjonijiet T1 u T2 għandhom jitwettqu fi tranżazzjoni waħda.

L-isharding fil-livell tal-applikazzjoni jista' jiġi mċaqlaq barra l-applikazzjoni

Sharding huwa metodu ta 'qsim orizzontalment ta' database. Xi databases jistgħu awtomatikament jaqsmu d-dejta orizzontalment, filwaqt li oħrajn ma jistgħux, jew mhumiex tajbin ħafna fiha. Meta l-periti/l-iżviluppaturi tad-dejta jkunu jistgħu jbassru eżattament kif se tiġi aċċessata d-dejta, jistgħu joħolqu diviżorji orizzontali fl-ispazju tal-utent minflok jiddelegaw dan ix-xogħol għad-database. Dan il-proċess jissejjaħ "sharding fil-livell tal-applikazzjoni" (sharding fil-livell tal-applikazzjoni).

Sfortunatament, dan l-isem spiss joħloq il-kunċett żbaljat li sharding jgħix fis-servizzi tal-applikazzjoni. Fil-fatt, jista 'jiġi implimentat bħala saff separat quddiem id-database. Skont it-tkabbir tad-dejta u l-iterazzjonijiet tal-iskema, ir-rekwiżiti ta 'sharding jistgħu jsiru pjuttost kumplessi. Xi strateġiji jistgħu jibbenefikaw mill-abbiltà li jtenni mingħajr ma jkollhom għalfejn jerġgħu jħaddmu s-servers tal-applikazzjonijiet.

Aktar żviluppaturi għandhom ikunu jafu dan dwar id-databases
Eżempju ta' arkitettura li fiha s-servers tal-applikazzjonijiet huma separati mis-servizz ta' sharding

Iċ-ċaqliq ta' sharding f'servizz separat tespandi l-abbiltà li jintużaw strateġiji ta' sharding differenti mingħajr il-ħtieġa li l-applikazzjonijiet jerġgħu jiġu skjerati. Vitess huwa eżempju ta' sistema ta' sharding bħal din fil-livell tal-applikazzjoni. Vitess jipprovdi sharding orizzontali għall-MySQL u jippermetti lill-klijenti jikkonnettjaw miegħu permezz tal-protokoll MySQL. Is-sistema tqassam id-dejta f'nodi MySQL differenti li ma jafu xejn dwar xulxin.

Autoincrementing jista 'jkun perikoluż

AUTOINCREMENT huwa mod komuni biex tiġġenera ċwievet primarji. Ħafna drabi jkun hemm każijiet meta d-databases jintużaw bħala ġeneraturi tal-ID, u d-database fiha tabelli ddisinjati biex jiġġeneraw identifikaturi. Hemm diversi raġunijiet għaliex il-ġenerazzjoni ta 'ċwievet primarji bl-użu ta' inkrementazzjoni awtomatika hija 'l bogħod milli tkun ideali:

  • F'database mqassma, l-inkrementazzjoni awtomatika hija problema serja. Biex tiġġenera l-ID, hija meħtieġa serratura globali. Minflok, tista 'tiġġenera UUID: dan ma jeħtieġx interazzjoni bejn nodi ta' database differenti. L-inkrementazzjoni awtomatika b'serraturi tista 'twassal għal kontenzjoni u tnaqqas b'mod sinifikanti l-prestazzjoni fuq inserzjonijiet f'sitwazzjonijiet distribwiti. Xi DBMSs (per eżempju, MySQL) jistgħu jeħtieġu konfigurazzjoni speċjali u attenzjoni aktar bir-reqqa biex jorganizzaw sew ir-replikazzjoni master-master. U huwa faċli li tagħmel żbalji meta tikkonfigura, li jwassal għal fallimenti ta 'reġistrazzjoni.
  • Xi databases għandhom algoritmi ta' qsim ibbażati fuq ċwievet primarji. IDs konsekuttivi jistgħu jwasslu għal hot spots imprevedibbli u żieda fit-tagħbija fuq xi diviżorji filwaqt li oħrajn jibqgħu inattivi.
  • Ċavetta primarja hija l-aktar mod mgħaġġel biex taċċessa ringiela f'database. B'modi aħjar biex jidentifikaw ir-rekords, IDs sekwenzjali jistgħu jibdlu l-aktar kolonna importanti fit-tabelli f'kolonna inutli mimlija b'valuri bla sens. Għalhekk, kull meta jkun possibbli, jekk jogħġbok agħżel ċavetta primarja unika u naturali globalment (eż. username).

Qabel ma tiddeċiedi dwar approċċ, ikkunsidra l-impatt tal-IDs u l-UUIDs awto-inkrementali fuq l-indiċjar, il-qsim, u t-tqassim.

Id-dejta mhux użata tista' tkun utli u ma teħtieġx qfil

Multiversion Concurrency Control (MVCC) jimplimenta ħafna mir-rekwiżiti ta 'konsistenza li ġew diskussi fil-qosor hawn fuq. Xi databases (per eżempju, Postgres, Spanner) jużaw MVCC biex "jimgħu" tranżazzjonijiet b'snapshots—verżjonijiet eqdem tad-database. Tranżazzjonijiet snapshot jistgħu wkoll jiġu serializzati biex tiġi żgurata l-konsistenza. Meta taqra minn snapshot antik, tinqara data skaduta.

Il-qari ta' dejta kemmxejn skaduta jista' jkun utli, pereżempju, meta tiġġenera analitika mid-dejta jew tikkalkula valuri aggregati approssimattivi.

L-ewwel vantaġġ ta 'ħidma ma' data legacy huwa latency baxx (speċjalment jekk id-database hija mqassma fuq ġeografiji differenti). It-tieni hija li t-tranżazzjonijiet li jinqraw biss huma mingħajr lock. Dan huwa vantaġġ sinifikanti għall-applikazzjonijiet li jaqraw ħafna, sakemm ikunu jistgħu jimmaniġġjaw data skaduta.

Aktar żviluppaturi għandhom ikunu jafu dan dwar id-databases
Is-server tal-applikazzjoni jaqra dejta mir-replika lokali li hija skaduta 5 sekondi, anki jekk l-aħħar verżjoni hija disponibbli fuq in-naħa l-oħra tal-Oċean Paċifiku

Id-DBMSs awtomatikament inaddfu verżjonijiet eqdem u, f'xi każijiet, jippermettulek tagħmel dan fuq talba. Pereżempju, Postgres jippermetti lill-utenti jagħmlu VACUUM fuq talba, u wkoll perjodikament twettaq din l-operazzjoni awtomatikament. Spanner imexxi kollettur taż-żibel biex jeħles minn snapshots ta’ aktar minn siegħa.

Kwalunkwe sorsi ta' ħin huma soġġetti għal distorsjoni

Is-sigriet l-aħjar li jinżamm fix-xjenza tal-kompjuter huwa li l-APIs kollha tal-ħin jinsabu. Fil-fatt, il-magni tagħna ma jafux il-ħin attwali eżatt. Il-kompjuters fihom kristalli tal-kwarz li jiġġeneraw vibrazzjonijiet li jintużaw biex iżommu l-ħin. Madankollu, mhumiex preċiżi biżżejjed u jistgħu jkunu 'l quddiem / lura fil-ħin eżatt. Il-bidla tista 'tilħaq 20 sekonda kuljum. Għalhekk, il-ħin fuq il-kompjuters tagħna għandu jkun perjodikament sinkronizzat ma 'dak tan-netwerk.

Is-servers NTP jintużaw għas-sinkronizzazzjoni, iżda l-proċess ta 'sinkronizzazzjoni innifsu huwa soġġett għal dewmien tan-netwerk. Anke s-sinkronizzazzjoni ma' server NTP fl-istess ċentru tad-dejta tieħu xi żmien. Huwa ċar li l-ħidma ma 'server NTP pubbliku jista' jwassal għal distorsjoni saħansitra akbar.

L-arloġġi atomiċi u l-kontropartijiet tal-GPS tagħhom huma aħjar biex jiddeterminaw il-ħin kurrenti, iżda huma għaljin u jeħtieġu setup kumpless, għalhekk ma jistgħux jiġu installati fuq kull karozza. Minħabba dan, iċ-ċentri tad-dejta jużaw approċċ f'saffi. Arloġġi atomiċi u/jew GPS juru l-ħin eżatt, u wara jixxandar lil magni oħra permezz ta' servers sekondarji. Dan ifisser li kull magna se tesperjenza ċertu offset mill-ħin eżatt.

Is-sitwazzjoni hija aggravata mill-fatt li l-applikazzjonijiet u d-databases spiss jinsabu fuq magni differenti (jekk mhux f'ċentri tad-dejta differenti). Għalhekk, il-ħin se jvarja mhux biss fuq nodi DB mqassma fuq magni differenti. Ikun differenti wkoll fuq is-server tal-applikazzjoni.

Google TrueTime jieħu approċċ kompletament differenti. Ħafna nies jemmnu li l-progress ta 'Google f'din id-direzzjoni huwa spjegat mit-tranżizzjoni banali għal arloġġi atomiċi u GPS, iżda dan huwa biss parti mill-istampa l-kbira. Hawn kif jaħdem TrueTime:

  • TrueTime juża żewġ sorsi differenti: GPS u arloġġi atomiċi. Dawn l-arloġġi għandhom modi ta 'falliment mhux korrelatati. [ara paġna 5 għad-dettalji hawn - madwar. trad.), għalhekk l-użu konġunt tagħhom iżid l-affidabbiltà.
  • TrueTime għandu API mhux tas-soltu. Jirritorna l-ħin bħala intervall bi żball tal-kejl u inċertezza mibnija fih. Il-mument attwali fiż-żmien huwa x'imkien bejn il-konfini ta 'fuq u t'isfel tal-intervall. Spanner, id-database mqassma ta' Google, sempliċement jistenna sakemm ikun tajjeb li wieħed jgħid li l-ħin attwali huwa barra mill-firxa. Dan il-metodu jintroduċi xi latency fis-sistema, speċjalment jekk l-inċertezza fuq il-kaptani hija għolja, iżda jiżgura l-korrettezza anke f'sitwazzjoni mqassma globalment.

Aktar żviluppaturi għandhom ikunu jafu dan dwar id-databases
Il-komponenti Spanner jużaw TrueTime, fejn TT.now() jirritorna intervall, għalhekk l-Ispanner sempliċement jorqod sal-punt fejn jista 'jkun kunfidenti li l-ħin kurrenti għadda ċertu punt

Preċiżjoni mnaqqsa fid-determinazzjoni tal-ħin kurrenti tfisser żieda fit-tul tal-operazzjonijiet tal-Ispanner u tnaqqis fil-prestazzjoni. Huwa għalhekk li huwa importanti li tinżamm l-ogħla preċiżjoni possibbli anki jekk huwa impossibbli li tinkiseb għassa kompletament preċiża.

Id-dewmien għandu ħafna tifsiriet

Jekk tistaqsi tużżana esperti dwar x'inhu dewmien, probabilment ikollok tweġibiet differenti. Fid-DBMS il-latency spiss tissejjaħ "database latency" u hija differenti minn dak li jiġi pperċepit mill-klijent. Il-fatt hu li l-klijent josserva s-somma tad-dewmien tan-netwerk u d-dewmien tad-database. Il-kapaċità li tiżola t-tip ta 'latency hija kritika meta jiġu debugging problemi li qed jikbru. Meta tiġbor u turi metriċi, dejjem ipprova żomm għajnejk fuq iż-żewġ tipi.

Ir-rekwiżiti tal-prestazzjoni għandhom jiġu evalwati għal tranżazzjoni speċifika

Xi drabi l-karatteristiċi tal-prestazzjoni ta 'DBMS u l-limitazzjonijiet tiegħu huma speċifikati f'termini ta' throughput ta 'kitba/qari u latency. Dan jipprovdi ħarsa ġenerali lejn il-parametri ewlenin tas-sistema, iżda meta tiġi evalwata l-prestazzjoni ta 'DBMS ġdid, approċċ ħafna aktar komprensiv huwa li jiġu evalwati separatament operazzjonijiet kritiċi (għal kull mistoqsija u/jew transazzjoni). Eżempji:

  • Ikteb throughput u latency meta ddaħħal ringiela ġdida fit-tabella X (b'50 miljun ringiela) b'restrizzjonijiet speċifikati u kkuttunar ta 'ringiela f'tabelli relatati.
  • Dewmien fil-wiri ta 'ħbieb ta' ħbieb ta 'ċertu utent meta n-numru medju ta' ħbieb huwa 500.
  • Latency fl-irkupru tal-aqwa 100 daħla mill-istorja tal-utent meta l-utent isegwi 500 utent ieħor b'X entrati fis-siegħa.

L-evalwazzjoni u l-esperimentazzjoni jistgħu jinkludu każijiet kritiċi bħal dawn sakemm tkun kunfidenti li d-database tissodisfa r-rekwiżiti tal-prestazzjoni. Regola ġenerali simili tqis ukoll dan it-tqassim meta tiġbor metriċi tal-latency u tiddetermina SLOs.

Kun konxju tal-kardinalità għolja meta tiġbor metriċi għal kull operazzjoni. Uża zkuk, ġbir ta 'avvenimenti, jew traċċar imqassam biex tikseb data ta' debugging ta 'qawwa għolja. Fl-artiklu "Trid Debug Latency?» tista' tiffamiljarizza ruħek mal-metodoloġiji tad-debugging tad-dewmien.

Tranżazzjonijiet nested jistgħu jkunu perikolużi

Mhux kull DBMS jappoġġa tranżazzjonijiet nested, iżda meta jagħmlu dan, tranżazzjonijiet bħal dawn jistgħu jirriżultaw fi żbalji mhux mistennija li mhux dejjem ikunu faċli biex jinstabu (jiġifieri, għandu jkun ovvju li hemm xi tip ta 'anomalija).

Tista' tevita li tuża tranżazzjonijiet ibdew bl-użu ta' libreriji tal-klijenti li jistgħu jiskopruhom u jevitawhom. Jekk it-tranżazzjonijiet imdawwar ma jistgħux jiġu abbandunati, ħu attenzjoni speċjali fl-implimentazzjoni tagħhom biex tevita sitwazzjonijiet mhux mistennija fejn tranżazzjonijiet kompluti jiġu abortiti aċċidentalment minħabba dawk imdaħħla.

L-inkapsulament ta 'tranżazzjonijiet f'saffi differenti jista' jwassal għal tranżazzjonijiet imnaqqsa mhux mistennija, u mil-lat tal-leġibbiltà tal-kodiċi, jista 'jagħmilha diffiċli biex wieħed jifhem l-intenzjonijiet tal-awtur. Agħti ħarsa lejn il-programm li ġej:

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

X'se jkun l-output tal-kodiċi ta 'hawn fuq? Se jreġġa' lura ż-żewġ tranżazzjonijiet, jew biss dik ta' ġewwa? X'jiġri jekk niddependu fuq saffi multipli ta 'libreriji li jiġbru l-ħolqien ta' tranżazzjonijiet għalina? Se nkunu nistgħu nidentifikaw u ntejbu każijiet bħal dawn?

Immaġina saff ta’ dejta b’diversi operazzjonijiet (eż. newAccount) diġà hija implimentata fit-tranżazzjonijiet tagħha stess. X'jiġri jekk tmexxihom bħala parti minn loġika tan-negozju ta' livell ogħla li timxi fi ħdan it-tranżazzjoni tagħha stess? X'se jkunu l-iżolament u l-konsistenza f'dan il-każ?

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

Minflok ma tfittex tweġibiet għal mistoqsijiet bla tmiem bħal dawn, huwa aħjar li tevita tranżazzjonijiet imnaqqsa. Wara kollox, is-saff tad-dejta tiegħek jista 'faċilment iwettaq operazzjonijiet ta' livell għoli mingħajr ma joħloq it-tranżazzjonijiet tiegħu stess. Barra minn hekk, il-loġika tan-negozju nnifisha hija kapaċi li tibda tranżazzjoni, twettaq operazzjonijiet fuqha, tikkommetti jew tħassar transazzjoni.

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.

It-tranżazzjonijiet m'għandhomx ikunu marbuta mal-istat tal-applikazzjoni

Xi drabi jitħajjar li tuża l-istat tal-applikazzjoni fit-tranżazzjonijiet biex tbiddel ċerti valuri jew ttejjeb il-parametri tal-mistoqsija. L-isfumatura kritika li għandha tiġi kkunsidrata hija l-ambitu korrett tal-applikazzjoni. Il-klijenti spiss jerġgħu jibdew it-tranżazzjonijiet meta jkun hemm problemi tan-netwerk. Jekk it-tranżazzjoni mbagħad tiddependi fuq stat li qed jinbidel minn xi proċess ieħor, tista 'tagħżel il-valur ħażin skont il-possibbiltà ta' tellieqa tad-dejta. It-tranżazzjonijiet għandhom iqisu r-riskju tal-kundizzjonijiet tat-tellieqa tad-dejta fl-applikazzjoni.

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

It-tranżazzjoni ta 'hawn fuq se żżid in-numru tas-sekwenza kull darba li tiġi esegwita, irrispettivament mir-riżultat finali. Jekk il-kommit ifalli minħabba problemi tan-netwerk, it-talba tiġi esegwita b'numru ta' sekwenza differenti meta terġa' tipprova.

Il-pjanifikaturi tal-mistoqsijiet jistgħu jgħidulek ħafna dwar database

Il-pjanifikaturi tal-mistoqsijiet jiddeterminaw kif mistoqsija se tiġi eżegwita f'database. Huma janalizzaw ukoll it-talbiet u jottimizzawhom qabel jibagħtuhom. Il-pjanifikaturi jistgħu jipprovdu biss xi stimi possibbli bbażati fuq is-sinjali għad-dispożizzjoni tagħhom. Per eżempju, x'inhu l-aħjar metodu ta 'tfittxija għall-mistoqsija li ġejja?

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

Ir-riżultati jistgħu jiġu rkuprati b'żewġ modi:

  • Skan tal-mejda sħiħa: Tista' tħares lejn kull entrata fit-tabella u tirritorna artikli b'isem ta' awtur li jaqbel, u mbagħad tordnahom.
  • Skan tal-indiċi: Tista' tuża indiċi biex issib IDs li jaqblu, tikseb dawk ir-ringieli, u mbagħad tordnahom.

Ix-xogħol tal-pjanifikatur tal-mistoqsijiet huwa li jiddetermina liema strateġija hija l-aħjar. Ta 'min jikkunsidra li l-pjanifikaturi tal-mistoqsijiet għandhom biss kapaċitajiet ta' tbassir limitati. Dan jista’ jwassal għal deċiżjonijiet ħżiena. Id-DBAs jew l-iżviluppaturi jistgħu jużawhom biex jiddijanjostikaw u jirranġaw mistoqsijiet li ma jagħmlux tajjeb. Verżjonijiet ġodda tad-DBMS jistgħu jikkonfiguraw pjanifikaturi tal-mistoqsijiet, u l-awtodijanjosi tista 'tgħin meta taġġorna d-database jekk il-verżjoni l-ġdida twassal għal problemi ta' prestazzjoni. Reġistri tal-mistoqsijiet bil-mod, rapporti tal-ħruġ ta' latenza, jew statistika tal-ħin tal-eżekuzzjoni jistgħu jgħinu biex jidentifikaw mistoqsijiet li jeħtieġu ottimizzazzjoni.

Xi metriċi ppreżentati mill-pjanifikatur tal-mistoqsijiet jistgħu jkunu suġġetti għall-istorbju (speċjalment meta tiġi stmata l-latenza jew il-ħin tas-CPU). Żieda tajba għall-iskedaturi huma għodod għat-traċċar u t-traċċar tal-mogħdija tal-eżekuzzjoni. Huma jippermettulek tiddijanjostika problemi bħal dawn (sfortunatament, mhux id-DBMSs kollha jipprovdu għodod bħal dawn).

Il-migrazzjoni onlajn hija diffiċli iżda possibbli

Migrazzjoni onlajn, migrazzjoni diretta, jew migrazzjoni f'ħin reali tfisser li tiċċaqlaq minn database għal oħra mingħajr waqfien jew korruzzjoni tad-dejta. Il-migrazzjoni diretta hija aktar faċli biex titwettaq jekk it-tranżizzjoni sseħħ fl-istess DBMS/magna. Is-sitwazzjoni ssir aktar ikkumplikata meta jkun meħtieġ li nimxu għal DBMS ġdid b'rekwiżiti ta 'prestazzjoni u skema differenti.

Hemm mudelli differenti ta' migrazzjoni onlajn. Hawn wieħed minnhom:

  • Ippermetti d-dħul doppju fiż-żewġ databases. Id-database l-ġdida f'dan l-istadju m'għandhiex id-data kollha, iżda taċċetta biss l-aħħar data. Ladarba tkun ċert minn dan, tista 'tgħaddi għall-pass li jmiss.
  • Ippermetti l-qari miż-żewġ databases.
  • Ikkonfigura s-sistema sabiex il-qari u l-kitba jitwettqu primarjament fuq id-database l-ġdida.
  • Tieqaf tikteb fid-database l-antika filwaqt li tkompli taqra d-dejta minnha. F'dan l-istadju, id-database l-ġdida għadha nieqsa minn xi dejta. Għandhom jiġu kkupjati mid-database l-antika.
  • Id-database l-antika hija ta' qari biss. Ikkopja d-dejta nieqsa mid-database l-antika għal dik il-ġdida. Wara li titlesta l-migrazzjoni, aqleb il-mogħdijiet għad-database l-ġdida, u waqqaf dik l-antika u ħassarha mis-sistema.

Għal informazzjoni addizzjonali, nirrakkomanda li tikkuntattja artikolu, li tagħti dettalji dwar l-istrateġija ta' migrazzjoni ta' Stripe bbażata fuq dan il-mudell.

Żieda sinifikanti fid-database tinvolvi żieda fl-imprevedibbiltà

It-tkabbir tad-database jwassal għal problemi imprevedibbli assoċjati mal-iskala tagħha. Iktar ma nkunu nafu dwar l-istruttura interna ta 'database, aħjar nistgħu nbassru kif se tiskala. Madankollu, xi mumenti għadhom impossibbli li jiġu previsti.
Hekk kif il-bażi tikber, is-suppożizzjonijiet u l-aspettattivi preċedenti dwar il-volum tad-dejta u r-rekwiżiti tal-bandwidth tan-netwerk jistgħu jsiru skaduti. Dan huwa meta tqum il-kwistjoni ta 'reviżjonijiet maġġuri tad-disinn, titjib operattiv fuq skala kbira, skjeramenti mill-ġdid, jew migrazzjoni għal DBMSs oħra biex jiġu evitati problemi potenzjali.

Imma ma taħsibx li l-għarfien eċċellenti tal-istruttura interna tad-database eżistenti hija l-unika ħaġa li hija meħtieġa. Skali ġodda se jġibu magħhom mhux magħrufa ġodda. Punti ta 'uġigħ imprevedibbli, distribuzzjoni irregolari tad-dejta, kwistjonijiet ta' bandwidth u hardware mhux mistennija, traffiku li dejjem qed jiżdied u segmenti ġodda tan-netwerk se jġiegħlek terġa 'taħseb l-approċċ tad-database tiegħek, il-mudell tad-data, il-mudell ta' skjerament u d-daqs tad-database.

...

Fiż-żmien li bdejt naħseb biex nippubblika dan l-artiklu, diġà kien hemm ħames oġġetti oħra fil-lista oriġinali tiegħi. Imbagħad daħal numru kbir ideat ġodda dwar x'iktar jista' jiġi kopert. Għalhekk, l-artiklu jmiss l-inqas problemi ovvji li jeħtieġu attenzjoni massima. Madankollu, dan ma jfissirx li s-suġġett ġie eżawrit u mhux se nkompli nirritorna għalih fil-materjali futuri tiegħi u mhux se nagħmel bidliet għal dak attwali.

PS

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment