A valódi adatbázisok globális szuperfegyverei régóta ismertek, de még mindig kevesen tudják őket hatékonyan használni, vagy egyáltalán nem rendelkeznek ezzel a szuperfegyverrel.
Ha a globális adatokat olyan feladatok megoldására használjuk, amelyekben valóban jók, figyelemre méltó eredményeket érhetünk el. Legyen szó teljesítményről vagy a feladat egyszerűsítéséről., ).
A globálisok egy speciális adatkezelési és tárolási módot jelentenek, teljesen eltérőek a SQL tábláitól. 1966-ban jelentek meg a M(UMPS) programozási nyelvben. (evolúciós fejlődés — , később COS) orvosi adatbázisokban, és azóta is aktívan használják őket, és más területekre is behatoltak, ahol megbízhatóságra és magas teljesítményre van szükség: pénzügy, kereskedés stb. és behatoltak más területekre is, ahol megbízhatóságra és magas teljesítményre van szükség: pénzügy, kereskedés stb.
A modern DBMS-ekben a globálisok támogatják a tranzakciókat, naplózást, replikációt és partícionálást. Azaz, korunk modern, megbízható, elosztott és gyors rendszereinek alapját képezhetik.
A globálisok nem korlátoznak a relációs modell határai között. Szabadságot adnak az adatstruktúrák megalkotásában, amelyek az adott feladatokhoz optimalizáltak. Sok alkalmazás esetében a globálisok értelmes használata valóban titkos fegyver lehet, biztosítva a teljesítményt, amelyről a relációs alkalmazások fejlesztői csak álmodozhatnak.
A globálisok mint adat tárolási módszer számos modern programozási nyelvben felhasználhatóak, legyenek azok magas- vagy alacsony szintűek. Ezért ebben a cikkben kifejezetten a globálisokra fogok koncentrálni, nem pedig arra a nyelvre, amelyből valaha származtak.
2. Hogyan működnek a globálisok
Kezdjük azzal, hogy megértjük, hogyan működnek a globálisok, és mi az erősségük. A globálisokra többféleképpen is tekinthetünk. A cikk ezen részében úgy fogunk róluk beszélni, mint fákról. Vagy mint hierarchikus adatkezelési tárolókról.
Egyszerűsítve, a globális egy tartós tömb. Egy tömb, amely automatikusan mentésre kerül a lemezre.
Nehezen elképzelhető ennél egyszerűbb módszer az adatok tárolására. A kódban (COS/M nyelveken) csupán a név előtt lévő szimbólummal különbözik a szokásos asszociatív tömbtől. ^ jelzi a név előtt.
A globálisban történő adatmentéshez nincs szükség SQL lekérdező nyelv ismeretére; a velük való munka parancsai nagyon egyszerűek. Ezeket egy óra alatt meg lehet tanulni.
Kezdjük a legegyszerűbb példával. Egy szintű fa 2 ággal. A példák COS-ban íródtak.

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"
Amikor információt illesztünk a globálisba (Set parancs), automatikusan 3 dolog történik:
- Az adatok mentése a lemezre.
- Indexelés. A zárójelben szereplő kulcs (az angol szakirodalomban – „subscript”), míg a jobb oldalon található egyenlőségjel után a szintaktikus érték („node value”).
- Rendezés. Az adatok kulcs szerint rendeződnek. A továbbiakban, amikor bejárjuk a tömböt, az első elem „Sergey Smith”, a második „John Sidorov” lesz. A globálból felhasználói lista lekérdezésekor az adatbázis nem pazarolja az időt a rendezésre. Ezen kívül bármilyen kulccsal kérhetjük a rendezett lista előállítását, még akkor is, ha az nem létezik (a kimenet az első valódi kulcs után kezdődik, ami a nem létező után következik).
Mindezek az operációk elképesztően gyorsan zajlanak. Az otthoni számítógépemen akár 750 000 bejegyzést is kaptam másodpercenként egy folyamatban. Többmagos processzorokon ezek az értékek elérhetik bejegyzés/másodperc.
Természetesen az önmagában vett beillesztési sebesség nem mond sokat. Például nagyon gyorsan írhatunk információt szöveges fájlokba – így működik a Visa feldolgozás. De globálok esetén strukturált, indexelt tárolót kapunk, amellyel később egyszerűen és gyorsan dolgozhatunk.

- A globálok legnagyobb előnye az új csomópontok beillesztésének sebessége.
- A globálban az adatok mindig indexelve vannak. Azok bejárása, akár egy szinten, akár a fa mélyén, mindig gyors.
Adjunk hozzá még néhány második és harmadik szintű ágat a globálishoz.
Set ^a("+7926X", "city") = "Moszkva"
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 
Nyilvánvaló, hogy a globálok alapján sokszintű fákat lehet építeni. A hozzáférés bármely csomóponthoz gyakorlatilag azonnali a beillesztésnél végzett automatikus indexelés miatt. Ráadásul a fa bármely szintjén az összes ág kulcs szerint rendezett.
Ahogy látható, az információkat tárolhatjuk akár a kulcsban, akár az értékben. A kulcs általános hossza (az összes index hosszának összege) elérheti , az értékek pedig a Caché számára. A fa szintjeinek száma (a dimenziók száma) – 31.
Még egy érdekes pont. Fát lehet építeni anélkül, hogy a felső szintek csomópontjainak értékeit meghatároznánk.

Állítsa be ^b("a", "b", "c", "d") = 1
Állítsa be ^b("a", "b", "c", "e") = 2
Állítsa be ^b("a", "b", "f", "g") = 3 Üres körök azok a csomópontok, amelyeknek nincs értéke.
A globális változók jobb megértéséhez hasonlítsuk össze őket más fákat: a kerti fákkal és a fájlrendszerek fáival.
Hasonlítsuk össze a globális fát a legjobban ismert hierarchikus struktúrákkal: a hétköznapi fákkal, amelyek kertekben és mezőkön nőnek, valamint a fájlrendszerekkel.

Mint láthatjuk, a kerti fák levelei és gyümölcsei csak az ágak végén vannak.
A fájlrendszerekben az információ csak az ágak végén tárolódik, amelyek a fájlok teljes neveit jelentik.
Íme a globális változó adatstruktúrája.
Különbségek:
- Belső csomópontok: A globális változókban az információ bármely csomópontban tárolható, nem csak az ágak végén.
- Külső csomópontok: A globális változóknál a végpontoknál kötelező a definált érték, míg a fájl- és kerti fák esetében ez nem szükséges.
A belső csomópontok egy részénél elmondható, hogy a globális struktúra a fájlrendszerek neveinek fáira és a kerti fáknak egy túlsó halmazát képezi. Tehát rugalmasabb.
Általános esetben a globális változó egy sorrendbe állított fa, amely lehetővé teszi az adatok tárolását minden csomópontban.
A globális változók működésének jobb megértése érdekében képzeljük el, mi lett volna, ha a fájlrendszerek készítői a globális változókhoz hasonló tárolási megközelítést alkalmaztak volna?
- Ha egy fájlt törölünk a könyvtárból, automatikusan törlődne a könyvtár is, valamint az összes felette lévő könyvtár, amelyek csak a nemrég törölt könyvtárat tartalmazták.
- A könyvtárak szükségessége megszűnne. Csak fájlok lennének almappákkal és fájlok almappa nélkül. Ha a hagyományos fára hasonlítunk, akkor minden ág gyümölcse lenne.

- Olyan dolgok, mint a README.txt fájlok valószínűleg eltűnnének. Minden, amit a könyvtár tartalmáról tudni kell, a könyvtár fájljába lenne írva. Az útvonalak térében a fájl neve megkülönböztethetetlen a könyvtár nevéhez, így elegendő lenne csak fájlokat használni.
- A könyvtárak törlésének sebessége, amelyek almappákat és fájlokat tartalmaznak, drasztikusan megnövekedne. Sokszor olvashattunk az interneten arról, mennyire hosszú és nehéz több millió kis fájl törlése., ). Azonban, ha globális szintű ál-fájlrendszert hozunk létre, az másodperceket vagy azok töredékeit fogja igénybe venni. Amikor a fáfák alsóbb ágait töröltem a saját számítógépemen, egy másodperc alatt 96-341 millió csomópontot töröltem egy kéte szintű fáfából HDD-n (nem SSD-n). Itt a fa egy részének törléséről van szó, nem csupán a globális fájl teljes törléséről.

A fáfa alsóbb ágainak törlése egy újabb erőssége a globálisoknak. Ehhez nincs szükség rekurzióra. Ez hihetetlenül gyorsan történik.
A mi fáfánkban ezt a parancssal lehetne megtenni Kill.
Kill ^a("+7926X") 
A globálisokon végrehajtható műveletek jobb megértése érdekében itt egy rövid táblázat.
Fő parancsok és funkciók a globálisokkal kapcsolatban a COS-ban
Ágak beállítása a csomópontig (ha még nincsenek meghatározva) és a csomópont értéke
Alfáfa másolása
Alfáfa törlése
Egy adott csomópont értékének törlése. A csomópontból kivezető alfával nem foglalkozik
Teljes fáfa bejárás mélyre hatolva
Egy adott csomópont ágának bejárása
Ellenőrzés, hogy a csomópont meghatározott-e
A csomópont értékének atomikus növelése. Olvasás és írás elkerülésére, az ACID-ért. Az utóbbi időben ajánlott a következőre váltani
Köszönjük a figyelmet, szívesen válaszolunk kérdéseikre.
Megjegyzés: Ez a cikk és az ehhez fűzött megjegyzéseim a saját véleményemet tükrözik, és nem állnak kapcsolatban az InterSystems vállalat hivatalos álláspontjával.
Folytatás . Megtudhatja, milyen adat típusokat lehet megjeleníteni a globálisokon és mely feladatoknál nyújtanak maximális előnyt.
Forrás: habr.com

