Verkliga databaser med globala kluster har varit kÀnda lÀnge, men fortfarande Àr det fÄ som vet hur de effektivt anvÀnder dessa supervapen.
Om man anvÀnder globala kluster för de uppgifter dÀr de verkligen Àr bra kan man uppnÄ utmÀrkta resultat. Antingen i prestanda eller genom att förenkla lösningen av uppgiften (, ).
Globala kluster Ă€r ett speciellt sĂ€tt att lagra och bearbeta data, helt annorlunda Ă€n tabeller i SQL. De introducerades 1966 i sprĂ„ket (evolutionĂ€r utveckling â , senare COS) inom medicinska databaser och anvĂ€nds fortfarande dĂ€r , samt har Ă€ven trĂ€ngt in i andra omrĂ„den dĂ€r hög tillförlitlighet och prestanda krĂ€vs: finans, handel etc.
Globala kluster i moderna databasystem stöder transaktioner, loggning, replikering och partitionering. Det vill sÀga, de kan anvÀndas för att bygga moderna, pÄlitliga, distribuerade och snabba system.
Globala kluster begrÀnsar dig inte till grÀnserna för den relationella modellen. De ger frihet att utveckla datastrukturer som Àr optimerade för specifika uppgifter. För mÄnga applikationer kan rimlig anvÀndning av globala kluster vara ett verkligt hemligt vapen, som ger prestanda som utvecklare av relationella applikationer bara kan drömma om.
Globala kluster som ett sÀtt att lagra data kan anvÀndas i mÄnga moderna programmeringssprÄk, bÄde hög- och lÄgnivÄsprÄk. DÀrför kommer jag i denna artikel att fokusera specifikt pÄ globala kluster, snarare Àn pÄ sprÄket de en gÄng hÀrrörde frÄn.
2. Hur globala kluster fungerar
LÄt oss först förstÄ hur globala kluster fungerar och vad deras styrkor Àr. Globala kluster kan ses frÄn olika perspektiv. I denna del av artikeln kommer vi att betrakta dem som trÀd. Eller som hierarkiska datalagringar.
Ett förenklat sÀtt att se pÄ globala kluster Àr att de Àr ett persistent array. Ett array som automatiskt sparas pÄ disken.
Det Àr svÄrt att förestÀlla sig nÄgot enklare för datalagring. I kod (i sprÄken COS/M) skiljer det sig frÄn en vanlig associativ array endast genom tecknet ^ före namnet.
För att spara data i ett globalt kluster behöver du inte lÀra dig SQL-frÄgesprÄket, kommandona för att arbeta med dem Àr mycket enkla. Du kan lÀra dig dem pÄ en timme.
LÄt oss börja med det mest grundlÀggande exemplet. Ett enskiktstrÀd med 2 grenar. Exemplet Àr skrivet i COS.

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"
Vid inmatning av information i globalen (kommandot Set) sker automatiskt 3 saker:
- Sparar data pÄ disk.
- Indeksering. Det som stĂ„r inom parentes fungerar som en nyckel (i den engelsksprĂ„kiga litteraturen â "subscript"), medan vĂ€rdet till höger om likhetstecknet Ă€r "node value".
- Sortering. Data sorteras efter nyckeln. Vid traversal av arrayen blir den första elementen "Sergey Smith" och den andra "John Sidorov". Vid hÀmtning av anvÀndarlistan frÄn globalen Àgnar databasen ingen tid Ät sortering. Dessutom kan en sorterad lista begÀras att visas, med start frÄn vilken nyckel som helst, Àven en icke-existerande (utskriften börjar med den första verkliga nyckeln efter den icke-existerande).
Alla dessa operationer sker otroligt snabbt. PÄ min hemmadator fick jag vÀrden upp till 750 000 insÀttningar/s i en process. PÄ flerkÀrniga processorer kan vÀrdena nÄ insÀttningar/s.
SjÀlvklart sÀger hastigheten pÄ insÀttningar i sig inte mycket. Man kan till exempel vÀldigt snabbt skriva information till textfiler - sÄ att Visa-processering fungerar. Men i fallet med globaler fÄr vi en strukturerad indexerad lagring som kan hanteras enkelt och snabbt i framtiden.

- Den starkaste sidan av globaler Àr hastigheten pÄ insÀttning av nya noder.
- Data i globalen Àr alltid indexerade. Traversalen, bÄde pÄ en nivÄ och djupt ner i trÀdet, Àr alltid snabb.
LÄt oss lÀgga till nÄgra fler grenar av andra och tredje nivÄn i globalen.
Set ^a("+7926X", "city") = "Moskva"
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 
Det Àr tydligt att flerdimensionella trÀd kan byggas pÄ grundval av globaler. Dessutom Àr tillgÄngen till vilken nod som helst praktiskt taget omedelbar tack vare autoindexeringen vid insÀttning. Och pÄ vilken nivÄ i trÀdet som helst Àr alla grenar sorterade efter nyckel.
Som man kan se kan information lagras bÄde i nyckeln och vÀrdet. Den totala lÀngden pÄ nyckeln (summan av lÀngderna pÄ alla index) kan nÄ , och vÀrdena för Caché. Antalet nivÄer i trÀdet (antal dimensioner) Àr 31.
Ytterligare en intressant punkt. Ett trÀd kan byggas utan att ange vÀrden för noderna pÄ de övre nivÄerna.

Set ^b("a", "b", "c", "d") = 1
Set ^b("a", "b", "c", "e") = 2
Set ^b("a", "b", "f", "g") = 3 Tomma noder Àr de som inte har tilldelats nÄgot vÀrde.
För att bÀttre förstÄ globala variabler kan vi jÀmföra dem med andra trÀd: med trÀdgÄrdstrÀd och med filsystemets trÀd.
Vi jÀmför de globala variablernas trÀd med de mest bekanta hierarkiska strukturerna: med vanliga trÀd som vÀxer i trÀdgÄrdar och fÀlt, samt med filsystem.

Som vi ser har trÀdgÄrdstrÀd blad och frukter bara pÄ Àndarna av grenarna.
I filsystem lagras informationen endast i Àndarna av grenarna, som Àr de fullstÀndiga filnamnen.
Och hÀr Àr strukturen för en global variabel.
Skillnader:
- Internt noder: Information i den globala variabeln kan lagras i varje nod, inte bara pÄ Àndarna av grenarna.
- Externa noder: Den globala variabeln mÄste ha definierade vÀrden pÄ Àndarna av grenarna, medan trÀd i filsystem och trÀdgÄrdar inte behöver det.
NÀr det gÀller interna noder kan man sÀga att den globala variabelns struktur Àr en superset av strukturen hos filsystemets namntrÀd och trÀdgÄrdstrÀd. Dvs. mer flexibel.
I allmÀnhet representerar en global variabel ett ordnat trÀd med möjlighet att lagra data i varje nod..
För att bÀttre förstÄ hur globala variabler fungerar, förestÀll dig vad som skulle hÀnda om skaparna av filsystem anvÀnde en metod för att lagra information som liknar den för globala variabler?
- Vid radering av en enda fil i en katalog skulle katalogen samt alla överordnade kataloger som endast innehÄller just den nyligen raderade katalogen automatiskt raderas.
- Behovet av kataloger skulle försvinna. Det skulle bara finnas filer med underfiler och filer utan underfiler. Om man jÀmför med ett vanligt trÀd, skulle varje gren bli en frukt.

- Saker som filer som README.txt skulle kanske försvinna. Allt som behövde sÀgas om innehÄllet i katalogen skulle kunna skrivas direkt i filen för katalogen. I sökvÀgsrummet Àr filnamnet inte Ätskiljbart frÄn katalognamnet, sÄ man skulle kunna klara sig med enbart filer.
- Hastigheten för att radera kataloger med inbÀddade underkataloger och filer skulle öka kraftigt. MÄnga gÄnger har det cirkulerat artiklar pÄ Habrahabr om hur lÄng tid och hur svÄrt det Àr att radera miljoner smÄ filer., ). Men om man gör ett pseudofilsystem pÄ globalt plan, kommer det att ta sekunder eller delar av sekunder. NÀr jag testade att ta bort undertrÀd pÄ min hemcomputer, raderades 96-341 miljoner noder frÄn ett tvÄnivÄtrÀd pÄ HDD (inte SSD) pÄ 1 sekund. Det handlar alltsÄ om att ta bort delar av trÀdet, inte bara hela filen med globala variabler.

Att ta bort undertrÀd Àr ytterligare en styrka hos globala variabler. För detta behövs ingen rekursion. Det gÄr otroligt snabbt.
I vÄrt trÀd kan detta göras med kommandot Kill.
Kill ^a("+7926X") 
För att bÀttre förstÄ vilka ÄtgÀrder som Àr tillgÀngliga för oss över globala variabler, presenterar jag en kort tabell.
Huvudkommandon och funktioner för att arbeta med globala variabler i COS
StÀlla in grenar fram till noden (om de fortfarande Àr obestÀmda) och nodens vÀrde
Kopiera undertrÀd
Ta bort undertrÀd
Ta bort vÀrdet av en specifik nod. UndertrÀdet som gÄr ut frÄn noden berörs inte.
FullstÀndig genomgÄng av trÀdet med djupdykning
GĂ„ igenom grenar av en specifik nod
Kontrollera om noden Àr definierad
AtomÀr inkrementering av nodens vÀrde. För att undvika lÀsningar och skrivningar, för ACID. Nuförtiden rekommenderas det att byta till
Tack för er uppmÀrksamhet, vi Àr redo att svara pÄ era frÄgor.
Ansvarsfriskrivning: Denna artikel och mina kommentarer till den Àr min Äsikt och har ingen koppling till företagets officiella stÀllning, InterSystems.
FortsÀttning . Du kommer att lÀra dig vilka datatyper som kan visas pÄ globala och pÄ vilka uppgifter de ger maximal vinning.
KĂ€lla: habr.com

