Globale — shpata-kasafortĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 1

Globale — shpata-kasafortĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 1 Shkurtat e vĂ«rteta tĂ« bazave tĂ« tĂ« dhĂ«nave — globalet — janĂ« njohur prej kohĂ«sh, por ende pak njerĂ«z e dinĂ« si t'i pĂ«rdorin ato eficentisht ose fare nuk e zotĂ«rojnĂ« kĂ«tĂ« armĂ« super.

Nëse përdoren globalet për zgjidhjen e problemeve në të cilat ata vërtet janë të shkëlqyer, mund të arrihen rezultate të jashtëzakonshme. Ose në performancë, ose në thjeshtësimin e zgjidhjes së problemit (1, 2).

Globalet janĂ« njĂ« mĂ«nyrĂ« e veçantĂ« pĂ«r ruajtjen dhe pĂ«rpunimin e tĂ« dhĂ«nave, krejt ndryshe nga tabelat nĂ« SQL. Ato u shfaqĂ«n nĂ« vitin 1966 nĂ« gjuhĂ«n M(UMPS) (evolucioni i zhvillimit — CachĂ© ObjectScript, mĂ« pas COS) nĂ« bazat e tĂ« dhĂ«nave mjekĂ«sore dhe ende pĂ«rdoren aktivisht , si dhe kanĂ« depĂ«rtuar nĂ« disa fusha tĂ« tjera, ku kĂ«rkohet qĂ«ndrueshmĂ«ri dhe performancĂ« e lartĂ«: financa, tregtimi etj.Globalet nĂ« sistemet moderne tĂ« menaxhimit tĂ« tĂ« dhĂ«nave mbĂ«shtesin transaksionet, regjistrimin, replikimin, dhe ndarjen. KĂ«shtu, mbi to mund tĂ« ndĂ«rtohen sisteme moderne, tĂ« besueshme, tĂ« shpĂ«rndara dhe tĂ« shpejta.

Globalet nuk të kufizojnë brenda kufijve të modelit relacional. Ato ofrojnë liri për zhvillimin e strukturave të dhënash, të optimizuara për probleme të caktuara. Për shumë aplikacione, përdorimi i arsyeshëm i globalëve mund të jetë vërtet një armë sekrete, duke ofruar performancën për të cilën zhvilluesit e aplikacioneve relacionale mund vetëm të ëndërrojnë.

Globalet si një mënyrë ruajtjeje të të dhënave mund të përdoren në shumë gjuhë moderne programimi, qoftë në ato të nivelit të lartë, ashtu edhe në ato të nivelit të ulët. Prandaj, në këtë artikull do të fokusohem pikërisht te globalet, dhe jo në gjuhën nga e cila ato filluan.

2. Si funksionojnë globalet

Le të fillojmë me një shpjegim se si funksionojnë globalet dhe çfarë i bën ata të fortë. Globalet mund të shihen nga kënde të ndryshme. Në këtë pjesë të artikullit do t'i shohim ato si pemë. Ose si magazina hierarkike të të dhënave.

Thënë thjesht, një global është një array i përhershëm. Një array që ruhen automatikisht në disq.

ËshtĂ« e vĂ«shtirĂ« tĂ« imagjinosh diçka mĂ« tĂ« thjeshtĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. NĂ« kod (nĂ« gjuhĂ«t COS/M) ai Ă«shtĂ« ndryshe nga njĂ« array asociativ i zakonshĂ«m vetĂ«m me simbolet
para emrit. ^ Për të ruajtur të dhënat në një global nuk është e nevojshme të studiohet gjuha e pyetjeve SQL, komandat për të punuar me to janë shumë të thjeshta. Ato mund të mësohen brenda një ore.

Le të fillojmë me shembullin më të thjeshtë. Një pemë një-nivel me 2 degë. Shembujt janë shkruar në COS.

Set ^a("+7926X") = "John Sidorov" Set ^a("+7916Y") = "Sergey Smith"

Globale — shpata-kasafortĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 1

Kur futet informacioni në një global (komanda Set), automatikisht ndodhin 3 gjëra:



Ruajtja e të dhënave në disk.

  1. Indeksimi.
  2. Ajo qĂ« Ă«shtĂ« nĂ« kllapa Ă«shtĂ« çelĂ«si (nĂ« literaturĂ«n anglisht — "subscript"), dhe nĂ« tĂ« djathtĂ« tĂ« barazimit Ă«shtĂ« vlera ("node value"). Shtresa.
  3. Të dhënat renditen sipas çelësit. Më pas, gjatë kalimit nëpër array, elementi i parë do të jetë "Sergey Smith", dhe i dyti "John Sidorov". Kur kërkohet lista e përdoruesve nga globali, baza nuk humb kohë për renditjen. Madje mund të kërkohet një listë të renditur, duke filluar nga çdo çelës, madje edhe të paekzistueshëm (shfaqja do të fillojë nga çelësi i parë real që vijon pas asaj që nuk ekziston). Të gjitha këto operacione ndodhin jashtëzakonisht shpejt. Në një kompjuter shtëpie doja të merrja deri në 750,000 futje në sekondë në një proces. Në procesorë shumë-bërthamore vlerat mund të arrijnë

dhjetĂ«ra miliona futjesh nĂ« sekondĂ«. Sigurisht, vetĂ« shpejtĂ«sia e futjes nuk thotĂ« shumĂ«. PĂ«r shembull, mund tĂ« shkruash informacion shumĂ« shpejt nĂ« skedarĂ« teksti — kĂ«shtu

Sigurisht, shpejtĂ«sia e vendosjes vetĂ« nuk thotĂ« shumĂ«. PĂ«r shembull, mund tĂ« shkruash informacionin shumĂ« shpejt nĂ« skedarĂ«t tekstualĂ« — kĂ«shtu sipash fjalĂ«ve Pika mĂ« e fortĂ« e globalĂ«ve Ă«shtĂ« shpejtĂ«sia e futjes sĂ« nyjeve tĂ« reja.

Globale — shpata-kasafortĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 1

  • TĂ« dhĂ«nat nĂ« global gjithmonĂ« janĂ« tĂ« indeksuara. Kalimi nĂ«pĂ«r to, si nĂ« njĂ« nivel ashtu edhe nĂ« thellĂ«si tĂ« pemĂ«s, Ă«shtĂ« gjithmonĂ« i shpejtĂ«.
  • Le tĂ« shtojmĂ« nĂ« global disa degĂ« tĂ« tjera tĂ« nivelit tĂ« dytĂ« dhe tĂ« tretĂ«.

Set ^a("+7926X", "city") = "Moscow" Set ^a("+7926X", "city", "street") = "Req Square" Set ^a("+7926X", "age") = 25 Set ^a("+7916Y", "city") = "London" Set ^a("+7916Y", "city", "street") = "Baker Street" Set ^a("+7916Y", "age") = 36

E dukshme është se mbi bazën e globalëve mund të ndërtohen pemë me shumë nivele. Dhe qasje në çdo nyje është pothuajse e menjëhershme për shkak të autoindeksimit gjatë futjes. Dhe në çdo nivel të pemës, të gjitha degët janë të renditura sipas çelësit.

Globale — shpata-kasafortĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 1

Siç shihet, informacioni mund të ruhet si në çelës, ashtu edhe në vlerë. Gjatësia totale e çelësit (shuma e gjatësi të gjithë indekseve) mund të arrijë

511 byte , dhe vlerat3.6 MB pĂ«r CachĂ©. Numri i niveleve nĂ« pemĂ« (numri i dimensioneve) — 31. NjĂ« moment tjetĂ«r interesant. Mund tĂ« ndĂ«rtohet njĂ« pemĂ« pa caktuar vlerat e nyjeve tĂ« niveleve tĂ« sipĂ«rme.

Set ^b("a", "b", "c", "d") = 1 Set ^b("a", "b", "c", "e") = 2 Set ^b("a", "b", "f", "g") = 3

Globale — shpata-kasafortĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 1

Set ^b("a", "b", "c", "d") = 1
Set ^b("a", "b", "c", "e") = 2
Set ^b("a", "b", "f", "g") = 3

Kanavitet e zbrazëta janë nyje që nuk kanë marrë një vlerë.

Për të kuptuar më mirë globalët, le të krahasojmë ata me pemë të tjera: me pemë të kopshteve dhe me pemë të sistemeve të skedarëve.

Le të krahasojmë pemët në globalë me strukturat hierarkike më të njohura: me pemët e zakonshme që rriten në kopshte dhe fusha, si dhe me sistemet e skedarëve.

Globale — shpata-kasafortĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 1

Siç e shohim tek pemët e kopshteve, gjethet dhe frutat janë vetëm në skajet e degëve.
Në sistemet e skedarëve, informacioni ruhet vetëm në skajet e degëve, të cilat janë emra të plotë të skedarëve.

Ja struktura e të dhënave të globalit.

Globale — shpata-kasafortĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 1Dallimet:

  1. Nyjet e brendshme: informacioni në global mund të ruhet në çdo nyje, dhe jo vetëm në skajet e degëve.
  2. Nyjet e jashtme: në global duhet patjetër të ketë vlera të përcaktuara në skajet e degëve, në pemët e FS dhe të kopshteve - jo.



Në disa nyje të brendshme, mund të thuhet se struktura e globalit është një nëngrup i strukturës së pemëve të emrit në sistemet e skedarëve dhe të pemëve të kopshteve, dmth. më e fleksibël.

Në rastin më të përgjithshëm, globali paraqet një pemë të renditur me mundësinë e ruajtjes së të dhënave në çdo nyje..

Për të kuptuar më mirë funksionimin e globalëve, imagjinoni se çfarë do të ndodhte nëse krijuesit e sistemeve të skedarëve do të përdornin një qasje të ngjashme me globalët për ruajtjen e informacionit?

  1. Kur fshihej një skedar i vetëm në direktor, do të fshihej automatikisht dhe direktorja, si dhe të gjitha direktorët e lartë që përmbanin vetëm atë direktor të sapo fshirë.
  2. Nevoja për direktorët do të zhdukej. Simple do të ishin skedarët me nënskedarë dhe skedarët pa nënskedarë. Nëse e krahasojmë me një pemë të zakonshme, çdo degë do të bëhej frut.

    Globale — shpata-kasafortĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 1

  3. GjĂ«rat si skedarĂ«t README.txt, ndoshta do tĂ« ishin zhdukur. Çdo gjĂ« qĂ« duhet tĂ« thuhej pĂ«r pĂ«rmbajtjen e direktorĂ«s do tĂ« mund tĂ« shkruhej brenda skedarit tĂ« direktorĂ«s. NĂ« hapĂ«sirĂ«n e rrugĂ«ve, emri i skedarit nuk Ă«shtĂ« i dallueshĂ«m nga emri i direktorĂ«s, kĂ«shtu qĂ« mund tĂ« pĂ«rfundonim me skedarĂ« tĂ« vetĂ«m.
  4. Shpejtësia e fshirjes së direktorëve me nën-direktor dhe skedarë do të rritej ndjeshëm. Shumë herë në Habrë kanë kaluar artikuj se sa kohë dhe vështirësi ka për të fshirë miliona skedarë të vegjël (1, 2). Megjithatë, nëse do të krijohej një sistem pseudo-skedari mbi global, kjo do të zinte sekonda ose pjesë të sekondës. Kur kam testuar fshirjen e nën-pemëve në kompjuterin tim të shtëpisë, për 1 sekondë, fshija 96-341 milion nyje nga një pemë me dy nivele në HDD (jo SSD). Së këndejmi, bëhet fjalë për fshirjen e pjesës së pemës, dhe jo thjesht të gjithë skedarit me globalët.

Globale — shpata-kasafortĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 1
Fshirja e nën-pemëve është një tjetër forte e globalëve. Për këtë nuk nevojitet rekursivitet. Kjo ndodh jashtëzakonisht shpejt.

Në pemën tonë, këtë mund ta bëjmë me komandën Kill.

Kill ^a("+7926X")

Globale — shpata-kasafortĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 1

Për të kuptuar më mirë se cilat veprime kemi në dispozicion mbi globalët, do të jap një tabelë të shkurtër.

Komandat dhe funksionet kryesore për punën me globalët në COS

Set
Vendosja e degëve deri në nyje (nëse ende nuk janë të përcaktuara) dhe vlera e nyjës.

Merge
Kopjimi i nën-pemës.

Kill
Fshirja e nën-pemës.

ZKill
Fshirja e vlerës së një nyje specifike. Nën-pema që del nga nyja nuk preket.

$Query
Kalo në të gjithë pemën duke shkuar thellë.

$Order
Kalimi në degët e një nyje specifike.

$Data
Kontrolli nëse nyja është e përcaktuar.

$Increment
Rritja atomike e vlerës së nyjës. Për të shmangur leximet dhe shkruajtjet, për ACID. Kohët e fundit është e rekomandueshme të ndryshoni në $Sequence

Faleminderit për vëmendjen, jemi në gatishmëri për t'iu përgjigjur pyetjeve tuaja.

Shënim ligjor: Ky artikull dhe komentet e mia për të janë mendimi im dhe nuk kanë lidhje me pozitat zyrtare të korporatës InterSystems.

Vazhdim GlobalĂ«t — shpatujt e vĂ«rtetĂ« pĂ«r ruajtjen e tĂ« dhĂ«nave. PemĂ«t. Pjesa 2. Do tĂ« mĂ«soni se cilat lloje tĂ« tĂ« dhĂ«nave mund tĂ« pĂ«rfaqĂ«sohen nĂ« globalĂ« dhe nĂ« cilat detyra ata ofrojnĂ« pĂ«rfitimin maksimal.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster