Meçal e vĂ«rteta tĂ« bazave tĂ« tĂ« dhĂ«nave â globalĂ«t â janĂ« tĂ« njohura prej kohĂ«sh, por ende shumĂ« pak njerĂ«z dinĂ« t'i pĂ«rdorin ato nĂ« mĂ«nyrĂ« efektive ose nuk e zotĂ«rojnĂ« fare kĂ«tĂ« superarmĂ«.
Nëse përdorni globalët për të zgjidhur problemet ku ata janë vërtet të mirë, mund të arrini rezultate të shkëlqyera. Ose në performancë, ose në përmirësimin e zgjidhjes së problemit (, ).
GlobalĂ«t janĂ« njĂ« mĂ«nyrĂ« speciale e ruajtjes dhe pĂ«rpunimit tĂ« tĂ« dhĂ«nave, krejtĂ«sisht ndryshe nga tabelat nĂ« SQL. Ata u shfaqĂ«n nĂ« vitin 1966 nĂ« gjuhĂ«n (evolucioni â , mĂ« pas COS) nĂ« bazat e tĂ« dhĂ«nave mjekĂ«sore dhe ende atje , si dhe kanĂ« depĂ«rtuar nĂ« disa fusha tĂ« tjera ku kĂ«rkohet besueshmĂ«ri dhe performancĂ« e lartĂ«: financa, tregtimi etj.
Globalët në sistemet moderne të menaxhimit të të dhënave mbështesin transaksionet, regjistrimin, replikimin, dhe ndarjen. Pra, mbi ta mund të ndërtohen sisteme moderne, të besueshme, të shpërndara dhe të shpejta.
Globalët nuk ju kufizojnë brenda kufijve të modelit relacionar. Ata ofrojnë liri për zhvillimin e strukturave të të dhënave, të optimizuara për detyra specifike. Për shumicën e aplikacioneve, përdorimi i arsyeshëm i globalëve mund të jetë me të vërtetë arma e fshehtë, duke ofruar performancën për të cilën zhvilluesit e aplikacioneve relacionale mund të ëndërrojnë.
Globalët si një mënyrë për të ruajtur të dhënat mund të përdoren në shumë gjuhë moderne programimi, si në ato të nivelit të lartë ashtu edhe në ato të nivelit të ulët. Prandaj, në këtë artikull do të fokusohëm pikërisht te globalët, dhe jo në gjuhën nga e cila ata janë nxjerrë dikur.
2. Si funksionojnë globalët
Le të kuptojmë së pari se si funksionojnë globalët dhe cili është forca e tyre. Globalët mund të shihen nga këndvështrime të ndryshme. Në këtë pjesë të artikullit ne do t'i shohim ata si pemë. Ose si depo të hierarkizuara të të dhënave.
Thënë thjeshtë, një global është një masiv i qëndrueshëm. Një masiv që ruhet automatikisht në disk.
Ă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 dallon nga njĂ« masiv asociativ tĂ« zakonshĂ«m vetĂ«m me simbolet ^ para emrit.
Për të ruajtur të dhënat në një global, nuk është e nevojshme të mësosh gjuhën e pyetjeve SQL, komandat për të punuar me to janë shumë të thjeshtë. Mund të mësohen brenda një ore.
Të fillojmë me shembullin më të thjeshtë. Një pemë një-niveli me 2 degë. Shembujt janë shkruar në COS.

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"
Kur shtoni informacion në global (komanda Set) ndodhin automatikisht 3 gjëra:
- Ruajtja e të dhënave në disk.
- Indeksimi. ĂfarĂ« Ă«shtĂ« nĂ« kllapa vepron si çelĂ«s (nĂ« literaturĂ«n anglisht - "subscript"), ndĂ«rsa djathtas nga barazimi Ă«shtĂ« vlera ("node value").
- Klasifikimi. Të dhënat klasifikohen sipas çelësit. Në vijim, gjatë kalimit të masës, elementi i parë do të jetë "Sergey Smith", dhe i dyti "John Sidorov". Kur merrni një listë përdoruesish nga global, baza nuk e shpenzon kohën për klasifikim. Për më tepër, është e mundur të kërkoni shfaqjen e një liste të klasifikuar, duke filluar nga çdo çelës, madje edhe ai që nuk ekziston (shfaqja do të fillojë nga çelësi real i parë që vjen pas atij që nuk ekziston).
Të gjitha këto operacione ndodhin jashtëzakonisht shpejt. Në kompjuterin tim shtëpiak kam marrë deri në 750,000 futje/sekon në një proces. Në procesorë multinivel, vlerat mund të arrijnë futje/sekon.
Natyrisht, shpejtësia e futjes vetvetiu nuk tregon shumë. Për shembull, është shumë e shpejtë të shkruani informacion në skedarë tekstualë - kështu funksionon procesimi i Visa. Por në rastin e globalëve, ne marrim një depo të strukturuar të indeksuar, me të cilin më pas është e lehtë dhe shpejt të punojmë.

- Pika më e fortë e globalëve është shpejtësia e futjes së nyjave të reja.
- Të dhënat në global janë gjithmonë të indeksuara. Kalimi i tyre si në një nivel, ashtu edhe thellë në pemë, është gjithmonë i shpejtë.
Le të shtojmë në global disa degë 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 
ĂshtĂ« e qartĂ« se mbi bazĂ«n e globalĂ«ve mund tĂ« ndĂ«rtohen pemĂ« me shumĂ« nivele. Dhe aksesin nĂ« çdo nyje Ă«shtĂ« praktikisht momental pĂ«r shkak tĂ« autoindeksimit gjatĂ« futjes. Dhe nĂ« çdo nivel tĂ« pemĂ«s, tĂ« gjitha degĂ«t janĂ« tĂ« klasifikuara sipas çelĂ«sit.
Siç duket, informacioni mund të ruhet si në çelës ashtu edhe në vlerë. Gjatësia totale e çelësit (shuma e gjatësi të gjitha indekset) mund të arrijë , ndërsa vlerat për Caché. Numri i niveleve në pemë (numri i dimensioneve) është 31.
Një pikë tjetër interesante. Mund të ndërtoni një pemë, pa përcaktuar vlerat e nyjave 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 Rrethet e zbrazët janë nyje të cilëve nuk u është caktuar asnjë vlerë.
Për të kuptuar më mirë globalët, le të krahasojmë ata me struktura të tjera: me pemë kopështesh dhe me pemët e sistemeve të skedarëve.
Le të krahasojmë pemët në globalë me strukturat hierarkike më të njohura për ne: me pemët e zakonshme, që rriten në kopshte dhe fusha, si dhe me sistemet e skedarëve.

Siç e shohim te pemët e kopshteve, gjethet dhe frutat ndodhen vetëm në fundin e degëve.
Sistemet e skedarĂ«ve â informacioni ruhet vetĂ«m nĂ« fundet e degĂ«ve, tĂ« cilat janĂ« emra tĂ« plotĂ« skedarĂ«sh.
Ja struktura e të dhënave në global.
Dallimet:
- Nyjet e brendshme: informacioni në global mund të ruhet në çdo nyje, dhe jo vetëm në fundet e degëve.
- Nyjet e jashtme: nĂ« global, Ă«shtĂ« e domosdoshme qĂ« tĂ« jenĂ« tĂ« caktuara vlerat nĂ« fundet e degĂ«ve, ndĂ«rsa te pemĂ«t e FS dhe atyre tĂ« kopshteve â jo.
Për pjesën e nyjeve të brendshme, mund të themi se struktura e global është një nënkuptim i strukturës së pemëve të emrave në sistemet e skedarëve dhe pemëve të kopshteve. Domethënë, më fleksibile.
Në rastin më të përgjithshëm, globali përfaqëson një pemë të renditur me mundësi për ruajtjen e të dhënave në çdo nyje..
Për të kuptuar më mirë funksionimin e globalëve, le të imagjinojmë se çfarë do të kishte ndodhur, nëse krijuesit e sistemeve të skedarëve do të kishin përdorur një qasje të ngjashme me atë të globalëve për ruajtjen e informacionit?
- Me fshirjen e një skedari të vetëm në një dosje, automatikisht do të fshiheshin edhe dosja dhe të gjitha dosjet mbi të që përmbanin vetëm atë dosje të sapofshirë.
- Nevojën për dosje do ta humbisnim. Thjesht do të ishim skedarë me nënskedare dhe skedarë pa nënskedare. Nëse e krahasojmë me një pemë të zakonshme, secila degë do të bëhej një frut.

- GjĂ«rat si skedari README.txt, ndoshta, do tĂ« ishin eliminuar. Ădo gjĂ« qĂ« duhej tĂ« thoshte rreth pĂ«rmbajtjes sĂ« dosjes mund tĂ« ishte shkruar brenda skedarit tĂ« dosjes. NĂ« hapĂ«sirĂ«n e rrugĂ«ve, emri i skedarit nuk Ă«shtĂ« i diferencueshĂ«m nga emri i dosjes, kĂ«shtu qĂ« mund tĂ« shkonim vetĂ«m me skedarĂ«.
- Shpejtësia e fshirjes së dosjeve me nën-dosje dhe skedarë do të rritej ndjeshëm. Shumë herë në Habrë kanë kaluar artikuj rreth sa e gjatë dhe e vështirë është të fshijmë miliona skedarë të vegjël., ). Megjithatë, nëse krijoni një sistem pseudo-fajllor në global, kjo do të marrë sekonda ose disa pjesë të tyre. Kur testova fshirjen e nënpjerrjeve në kompjuterin tim të shtëpisë, 96-341 milion nyje në një pemë me dy nivele fshiheshin për 1 sekondë nga HDD (jo SSD). Dhe është fjala për fshirjen e një pjese të pemës, jo thjesht të gjithë skedarit me globalet.

Fshirja e nënpjerrjeve është një tjetër pikë e fortë e globalëve. Për këtë nuk nevojitet rekursivitet. Kjo ndodh jashtëzakonisht shpejt.
Në pemën tonë, kjo mund të bëhet me komandën Kill.
Kill ^a("+7926X") 
Për një kuptim më të mirë të veprimeve që na janë në dispozicion mbi globalet, do të jap një tabelë të shkurtër.
Komandat dhe funksionet kryesore për punën me globalet në COS
Vendosja e degeve deri në nyje (nëse ende nuk janë të përcaktuara) dhe vlera e nyjes
Kopjimi i nënpjerrjeve
Fshirja e nënpjerrjes
Fshirja e vlerës së një nyjeje specifike. Nënpjerrja që del nga nyja nuk preket
Shfrytëzimi i plotë i pemës me futje në thellësi
Përshkimin e degëve të një nyjeje specifike
Kontrolli nëse nyja është e përcaktuar
Inkrementimi atomik i vlerës së nyjes. Për të mos bërë lexime dhe shkrime, për ACID. Së fundmi rekomandohet ta ndërroni në
Faleminderit për vëmendjen, jemi të gatshëm të përgjigjemi për pyetjet tuaja.
Kufizimi: Ky artikull dhe komentet e mia për të janë mendimi im dhe nuk kanë të bëjnë me pozitat zyrtare të kompanisë InterSystems.
Vazhdimi . Ju do të mësoni se cilat lloje të të dhënave mund të shfaqen në global dhe për cilat detyra ato ofrojnë përfitimin maksimal.
Burimi: habr.com

