Globaliai yra lobis-kardai duomenims saugoti. medžiai. 1 dalis

Globaliai yra lobis-kardai duomenims saugoti. medžiai. 1 dalis Tikrieji duomenų bazių kardai – globaliai – žinomi jau seniai, tačiau vis dar mažai kas moka jais efektyviai naudotis arba visai neturi šio superginklo.

Jei naudosite globalus spręsdami tas problemas, kuriose jie tikrai gerai, galite pasiekti puikių rezultatų. Arba dėl produktyvumo, arba supaprastinant problemos sprendimą (1, 2).

Globaliai yra ypatingas duomenų saugojimo ir apdorojimo būdas, visiškai kitoks nei SQL lentelės. Kalboje jie pasirodė 1966 m M (UMPS) (evoliucinis vystymasis - Talpyklos „ObjectScript“., toliau COS) medicinos duomenų bazėje ir vis dar ten aktyviai naudojamas, taip pat įsiskverbė į kai kurias kitas sritis, kur reikalingas patikimumas ir didelis našumas: finansus, prekybą ir kt.

Šiuolaikinės DBVS globalios programos palaiko operacijas, registravimą, replikavimą ir skaidymą. Tie. iš jų galima kurti modernias, patikimas, paskirstytas ir greitas sistemas.

Globalūs dalykai neapsiriboja santykiniu modeliu. Jie suteikia jums laisvę kurti duomenų struktūras, optimizuotas konkrečioms užduotims atlikti. Daugeliui programų protingas globalų naudojimas iš tikrųjų gali būti slaptas ginklas, užtikrinantis našumą, apie kurį reliacinių programų kūrėjai gali tik pasvajoti.

Globalus kaip duomenų saugojimo būdą galima naudoti daugelyje šiuolaikinių programavimo kalbų – tiek aukšto, tiek žemo lygio. Todėl šiame straipsnyje daugiausia dėmesio skirsiu globaliams, o ne kalbai, iš kurios jie kažkada kilo.

2. Kaip veikia globaliai

Pirmiausia išsiaiškinkime, kaip veikia globaliai ir kokios yra jų stipriosios pusės. Į globalius dalykus galima pažvelgti iš skirtingų požiūrių. Šioje straipsnio dalyje pažvelgsime į juos kaip į medžius. Arba kaip hierarchinės duomenų saugyklos.

Paprasčiau tariant, globalus yra nuolatinis masyvas. Masyvas, kuris automatiškai išsaugomas diske.
Sunku įsivaizduoti ką nors paprastesnio duomenų saugojimui. Kode (COS/M kalbomis) nuo įprasto asociatyvaus masyvo jis skiriasi tik simboliu ^ prieš vardą.

Norint išsaugoti duomenis globalioje formoje, nereikia mokytis SQL užklausos kalbos, darbo su jais komandos yra labai paprastos. Jų galima išmokti per valandą.

Pradėkime nuo paprasčiausio pavyzdžio. Vieno lygio medis su 2 šakomis. Pavyzdžiai parašyti COS.

Globaliai yra lobis-kardai duomenims saugoti. medžiai. 1 dalis

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



Įterpiant informaciją į visuotinį (Set komanda), automatiškai nutinka 3 dalykai:

  1. Duomenų išsaugojimas diske.
  2. Indeksavimas. Skliausteliuose yra raktas (anglų literatūroje - „subscript“), o lygių dešinėje yra reikšmė („mazgo vertė“).
  3. Rūšiuoti. Duomenys rūšiuojami pagal raktą. Ateityje, einant per masyvą, pirmasis elementas bus „Sergey Smith“, o antrasis „John Sidorov“. Gavusi vartotojų sąrašą iš globalaus, duomenų bazė negaišta laiko rūšiuojant. Be to, galite paprašyti surūšiuoto sąrašo išvesties, pradedant nuo bet kurio rakto, net ir neegzistuojančio (išvestis prasidės nuo pirmojo tikrojo rakto, kuris ateina po neegzistuojančio).

Visos šios operacijos atliekamos neįtikėtinai greitai. Namų kompiuteryje vienu procesu gaudavau vertes iki 750 000 įterpimų per sekundę. Kelių branduolių procesoriuose vertės gali pasiekti dešimtys milijonų įdėklai/sek.

Žinoma, pats įterpimo greitis nieko nesako. Galite, pavyzdžiui, labai greitai įrašyti informaciją į tekstinius failus – taip pagal gandus Vizų tvarkymo darbai. Tačiau globalų atveju gauname struktūrizuotą indeksuotą saugyklą, su kuria bus galima lengvai ir greitai dirbti ateityje.

Globaliai yra lobis-kardai duomenims saugoti. medžiai. 1 dalis

  • Didžiausias globalių pranašumas yra greitis, kuriuo galima įterpti naujus mazgus.
  • Pasaulio duomenys visada indeksuojami. Perėjimas jais tiek viename lygyje, tiek giliai į medį visada yra greitas.

Prie globalaus pridėkime dar keletą antrojo ir trečiojo lygių šakų.

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

Globaliai yra lobis-kardai duomenims saugoti. medžiai. 1 dalis

Akivaizdu, kad remiantis globaliais galima statyti kelių lygių medžius. Be to, prieiga prie bet kurio mazgo yra beveik akimirksniu dėl automatinio indeksavimo įterpimo metu. Ir bet kuriame medžio lygyje visos šakos rūšiuojamos pagal raktą.

Kaip matote, informacija gali būti saugoma ir rakte, ir reikšmėje. Bendras rakto ilgis (visų indeksų ilgių suma) gali siekti 511 baitasir vertybes 3.6 МБ talpyklai. Medžio lygių skaičius (dimensijų skaičius) yra 31.

Kitas įdomus momentas. Galite sukurti medį nenurodydami viršutinių lygių mazgų verčių.

Globaliai yra lobis-kardai duomenims saugoti. medžiai. 1 dalis

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

Tušti apskritimai yra mazgai, kuriems nėra priskirta vertė.

Norėdami geriau suprasti globalius, palyginkime juos su kitais medžiais: sodo medžiais ir failų sistemos vardų medžiais.

Palyginkime medžius globaliuose su mums žinomiausiomis hierarchinėmis struktūromis: su įprastais medžiais, augančiais soduose ir laukuose, taip pat su failų sistemomis.

Globaliai yra lobis-kardai duomenims saugoti. medžiai. 1 dalis

Kaip matome sodo medžiuose, lapai ir vaisiai randami tik šakų galuose.
Failų sistemos – informacija saugoma tik šakų galuose, kurios yra visiškai kvalifikuoti failų pavadinimai.

O štai pasaulinė duomenų struktūra.

Globaliai yra lobis-kardai duomenims saugoti. medžiai. 1 dalisSkirtumai:

  1. Vidiniai mazgai: Informacija globaliame pasaulyje gali būti saugoma kiekviename mazge, ne tik šakų galuose.
  2. Išoriniai mazgai: Pasaulyje turi būti apibrėžtos reikšmės šakų galuose, o FS ir sodo medžiai neturi.



Kalbant apie vidinius mazgus, galime pasakyti, kad globalaus struktūra yra failų sistemose ir sodo medžių vardų medžių struktūros superrinkinys. Tie. lankstesnis.

Apskritai pasaulinis yra sutvarkytas medis su galimybe saugoti duomenis kiekviename mazge.

Norėdami geriau suprasti globalų darbą, įsivaizduokite, kas nutiktų, jei failų sistemų kūrėjai naudotų metodą, panašų į globalius, saugodami informaciją?

  1. Ištrynus vieną failą iš katalogo, katalogas automatiškai ištrintų, taip pat visi viršutiniai katalogai, kuriuose yra tik vienas ką tik ištrintas katalogas.
  2. Nereikėtų katalogų. Tiesiog būtų failai su subfailais ir failai be subfailų. Palyginus su paprastu medžiu, kiekviena šaka taptų vaisiumi.

    Globaliai yra lobis-kardai duomenims saugoti. medžiai. 1 dalis

  3. Tokių dalykų kaip README.txt failai gali būti nereikalingi. Viską, ką reikėjo pasakyti apie katalogo turinį, buvo galima įrašyti į patį katalogo failą. Kelio erdvėje failo pavadinimas nesiskiria nuo katalogo pavadinimo, todėl buvo galima apsieiti tik su failais.
  4. Katalogų su įdėtais pakatalogiais ir failais ištrynimo greitis labai padidėtų. Daug kartų Habré buvo straipsnių apie tai, kaip ilgai ir sunku ištrinti milijonus mažų failų (1, 2). Tačiau, jei sukursite pseudofailų sistemą visame pasaulyje, tai užtruks kelias sekundes arba jų dalis. Kai išbandžiau pomedžių ištrynimą namų kompiuteryje, jis per 1 sekundę pašalino 96–341 milijoną mazgų iš HDD (ne SSD) dviejų pakopų medžio. Be to, mes kalbame apie medžio dalies, o ne tik viso failo su globaliais ištrynimą.

Globaliai yra lobis-kardai duomenims saugoti. medžiai. 1 dalis
Pomedžių pašalinimas yra dar viena stiprioji globalių pusė. Tam jums nereikia rekursijos. Tai nutinka neįtikėtinai greitai.

Mūsų medyje tai galima padaryti su komanda nužudyti.

Kill ^a("+7926X")

Globaliai yra lobis-kardai duomenims saugoti. medžiai. 1 dalis

Kad geriau suprastume, kokius veiksmus galime atlikti pasauliniu mastu, pateiksiu trumpą lentelę.

Pagrindinės komandos ir funkcijos, skirtos darbui su globaliais COS

Nustatyti
Atšakų nustatymas mazgui (jei dar neapibrėžtas) ir mazgo reikšmės

eiti
Pomedžio kopijavimas

nužudyti
Pomedžio pašalinimas

ZKill
Tam tikro mazgo vertės ištrynimas. Iš mazgo atsirandantis pomedis neliečiamas

$Query
Visiškas medžio perėjimas, einant gilyn į medį

$Order
Konkretaus mazgo šakų kirtimas

$Data
Tikrinama, ar mazgas yra apibrėžtas

$ Prieaugis
Atomiškai didinama mazgo reikšmė. Kad būtų išvengta skaitymo ir rašymo, skirta ACID. Neseniai buvo rekomenduota pakeisti į $Sequence

Dėkojame už dėmesį, esame pasiruošę atsakyti į jūsų klausimus.

Atsakomybės neigimas: Šis straipsnis ir mano komentarai yra mano nuomonė ir nesusiję su oficialia InterSystems Corporation pozicija.

Pratęsimas Globaliai yra lobis-kardai duomenims saugoti. medžiai. 2 dalis. Sužinosite, kokių tipų duomenys gali būti rodomi globaliuose įrenginiuose ir kokiomis užduotimis jie teikia didžiausią naudą.

Šaltinis: www.habr.com

Добавить комментарий