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 (, ).
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 (evolucioni i zhvillimit â , mĂ« pas COS) nĂ« bazat e tĂ« dhĂ«nave mjekĂ«sore dhe ende pĂ«rdoren aktivisht 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"

Kur futet informacioni në një global (komanda Set), automatikisht ndodhin 3 gjëra:
Ruajtja e të dhënave në disk.
- Indeksimi.
- Ajo qĂ« Ă«shtĂ« nĂ« kllapa Ă«shtĂ« çelĂ«si (nĂ« literaturĂ«n anglisht â "subscript"), dhe nĂ« tĂ« djathtĂ« tĂ« barazimit Ă«shtĂ« vlera ("node value"). Shtresa.
- 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 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 Pika mĂ« e fortĂ« e globalĂ«ve Ă«shtĂ« shpejtĂ«sia e futjes sĂ« nyjeve tĂ« reja.

- 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. 
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 3.6 MB 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

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.

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.
Dallimet:
- Nyjet e brendshme: informacioni në global mund të ruhet në çdo nyje, dhe jo vetëm në skajet e degëve.
- 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?
- 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ë.
- 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.

- 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.
- 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 (, ). 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.

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") 
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
Vendosja e degëve deri në nyje (nëse ende nuk janë të përcaktuara) dhe vlera e nyjës.
Kopjimi i nën-pemës.
Fshirja e nën-pemës.
Fshirja e vlerës së një nyje specifike. Nën-pema që del nga nyja nuk preket.
Kalo në të gjithë pemën duke shkuar thellë.
Kalimi në degët e një nyje specifike.
Kontrolli nëse nyja është e përcaktuar.
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ë
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 . 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

