Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 1

Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 1 Adevăratele săbii de bază de date - globale - sunt cunoscute de mult, dar încă puțini știu să le folosească eficient sau nu dețin deloc această super-arma.

Dacă utilizați globale pentru a rezolva acele probleme la care sunt foarte buni, puteți obține rezultate remarcabile. Fie în productivitate, fie în simplificarea soluționării problemei (1, 2).

Globalurile sunt o modalitate specială de stocare și procesare a datelor, complet diferită de tabelele din SQL. Au apărut în 1966 în limbă OREION) (dezvoltare evolutivă - Cache ObjectScript, denumită în continuare COS) în baza de date medicală și se află încă acolo folosit activ, și, de asemenea, a pătruns în alte domenii în care sunt necesare fiabilitate și performanță ridicată: finanțe, comerț etc.

Globalele din SGBD-urile moderne acceptă tranzacții, înregistrare, replicare și partiționare. Acestea. pot fi folosite pentru a construi sisteme moderne, fiabile, distribuite și rapide.

Globalurile nu te limitează la modelul relațional. Vă oferă libertatea de a dezvolta structuri de date care sunt optimizate pentru sarcini specifice. Pentru multe aplicații, utilizarea inteligentă a globalităților poate fi cu adevărat o armă secretă, oferind performanțe la care dezvoltatorii de aplicații relaționale nu pot decât să viseze.

Globalurile ca modalitate de stocare a datelor pot fi utilizate în multe limbaje de programare moderne, atât la nivel înalt, cât și la nivel scăzut. Prin urmare, în acest articol mă voi concentra în mod special pe global, și nu pe limba din care au provenit cândva.

2. Cum funcționează globalurile

Să înțelegem mai întâi cum funcționează globalitățile și care sunt punctele lor forte. Globalurile pot fi privite din diferite puncte de vedere. În această parte a articolului îi vom privi ca pe niște copaci. Sau ca depozitele ierarhice de date.

Pentru a spune simplu, un global este o matrice persistentă. O matrice care este salvată automat pe disc.
Este greu de imaginat ceva mai simplu pentru stocarea datelor. În cod (în limbile COS/M) diferă de o matrice asociativă obișnuită doar prin simbol ^ înaintea numelui.

Pentru a salva datele într-un mod global, nu trebuie să învățați limbajul de interogare SQL; comenzile pentru lucrul cu acestea sunt foarte simple. Ele pot fi învățate într-o oră.

Să începem cu cel mai simplu exemplu. Copac cu un singur nivel cu 2 ramuri. Exemplele sunt scrise în COS.

Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 1

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



Când inserați informații într-o comandă globală (Set), se întâmplă automat 3 lucruri:

  1. Salvarea datelor pe disc.
  2. Indexarea. Ceea ce este în paranteză este cheia (în literatura engleză - „subscript”), iar în dreapta lui equals este valoarea („valoarea nodului”).
  3. Sortare. Datele sunt sortate după cheie. În viitor, la traversarea matricei, primul element va fi „Sergey Smith”, iar al doilea „John Sidorov”. La primirea unei liste de utilizatori din global, baza de date nu pierde timp sortând. Mai mult, puteți solicita ieșirea unei liste sortate, începând de la orice cheie, chiar și una inexistentă (ieșirea va începe de la prima cheie reală, care vine după cea inexistentă).

Toate aceste operațiuni se întâmplă incredibil de repede. Pe computerul meu de acasă primeam valori de până la 750 de inserții/sec într-un singur proces. Pe procesoarele multi-core valorile pot ajunge zeci de milioane inserții/sec.

Desigur, viteza de inserare în sine nu spune mare lucru. Puteți, de exemplu, să scrieți foarte rapid informații în fișiere text - astfel zvonit Procesarea vizelor funcționează. Dar, în cazul globalurilor, obținem ca rezultat o stocare indexată structurată, cu care se poate lucra ușor și rapid în viitor.

Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 1

  • Cea mai mare putere a globale este viteza cu care pot fi introduse noduri noi.
  • Datele din global sunt întotdeauna indexate. Traversarea lor, atât la un nivel, cât și adânc în copac, este întotdeauna rapidă.

Să mai adăugăm câteva ramuri ale celui de-al doilea și al treilea nivel la global.

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

Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 1

Este evident că arborii cu mai multe niveluri pot fi construiți pe baza globalelor. Mai mult, accesul la orice nod este aproape instantaneu datorită auto-indexării în timpul inserării. Și la orice nivel al arborelui, toate ramurile sunt sortate după cheie.

După cum puteți vedea, informațiile pot fi stocate atât într-o cheie, cât și într-o valoare. Lungimea totală a cheii (suma lungimilor tuturor indicilor) poate ajunge 511 octeți, și valorile 3.6 MB pentru Cache. Numărul de niveluri din arbore (numărul de dimensiuni) este 31.

Un alt punct interesant. Puteți construi un arbore fără a specifica valorile nodurilor de la nivelurile superioare.

Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 1

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

Cercurile goale sunt noduri care nu au nicio valoare atribuită.

Pentru a înțelege mai bine globalurile, să le comparăm cu alți copaci: arbori de grădină și arbori de nume ale sistemului de fișiere.

Să comparăm copacii pe global cu cele mai familiare structuri ierarhice nouă: cu copacii obișnuiți care cresc în grădini și câmpuri, precum și cu sisteme de fișiere.

Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 1

După cum vedem în copacii de grădină, frunzele și fructele se găsesc doar la capetele ramurilor.
Sisteme de fișiere - informațiile sunt stocate numai la capetele ramurilor, care sunt nume de fișiere complet calificate.

Și aici este structura globală a datelor.

Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 1diferențe:

  1. Noduri interne: informațiile într-un global pot fi stocate în fiecare nod, nu doar la capetele ramurilor.
  2. Noduri externe: Globalul trebuie să aibă valori definite la capetele ramurilor, în timp ce FS și copacii de grădină nu au.



În ceea ce privește nodurile interne, putem spune că structura globalului este un supraset al structurii arborilor de nume din sistemele de fișiere și arborii de grădină. Acestea. mai flexibil.

În general, globalul este arbore ordonat cu capacitatea de a stoca date în fiecare nod.

Pentru a înțelege mai bine munca globalurilor, imaginați-vă ce s-ar întâmpla dacă creatorii sistemelor de fișiere ar folosi o abordare similară cu cele globale pentru a stoca informații?

  1. Ștergerea unui singur fișier dintr-un director ar șterge automat directorul, precum și toate directoarele de deasupra care conțin doar un director tocmai șters.
  2. Nu ar fi nevoie de directoare. Pur și simplu ar exista fișiere cu subfișiere și fișiere fără subfișiere. Dacă este comparată cu un copac obișnuit, atunci fiecare ramură ar deveni un fruct.

    Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 1

  3. Lucruri precum fișierele README.txt ar putea să nu fie necesare. Tot ceea ce trebuia spus despre conținutul directorului putea fi scris în fișierul director în sine. În spațiul de cale, numele fișierului nu se poate distinge de numele directorului, așa că a fost posibil să te descurci doar cu fișiere.
  4. Viteza de ștergere a directoarelor cu subdirectoare și fișiere imbricate ar crește dramatic. De multe ori pe Habré au apărut articole despre cât de lungă și dificilă este să ștergi milioane de fișiere mici (1, 2). Cu toate acestea, dacă creați un pseudo-sistem de fișiere pe o globală, va dura câteva secunde sau fracțiuni din acesta. Când am testat ștergerea subarborilor de pe un computer de acasă, a eliminat 1-96 de milioane de noduri dintr-un arbore cu două niveluri pe un HDD (nu SSD) într-o secundă. Mai mult, vorbim despre ștergerea unei părți a arborelui, și nu doar a întregului fișier cu globale.

Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 1
Eliminarea subarborilor este un alt punct forte al globalurilor. Nu aveți nevoie de recursivitate pentru asta. Acest lucru se întâmplă incredibil de repede.

În arborele nostru, acest lucru se poate face cu comanda Ucide.

Kill ^a("+7926X")

Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 1

Pentru o mai bună înțelegere a acțiunilor care ne sunt disponibile la nivel global, voi oferi un scurt tabel.

Comenzi și funcții de bază pentru lucrul cu globale în COS

set
Setarea ramurilor la un nod (dacă nu este încă definit) și valorile nodului

Îmbina
Copierea unui subarboresc

Ucide
Eliminarea unui subarbore

ZKill
Ștergerea valorii unui anumit nod. Subarborele care iese din nod nu este atins

$Query
Parcurgerea completă a copacului, mergând adânc în copac

$Comandă
Traversarea ramurilor unui anumit nod

$Data
Verificarea dacă un nod este definit

$Increment
Incrementarea atomică a valorii unui nod. Pentru a evita citirea și scrierea, pentru ACID. Recent s-a recomandat schimbarea la $Sequence

Vă mulțumim pentru atenție, suntem gata să vă răspundem la întrebări.

Declinare a responsabilităţii: Acest articol și comentariile mele la acesta sunt părerea mea și nu au nicio legătură cu poziția oficială a InterSystems Corporation.

Extensie Globalurile sunt comori-sabii pentru stocarea datelor. Copaci. Partea 2. Veți învăța ce tipuri de date pot fi afișate pe globale și pe ce sarcini oferă beneficiul maxim.

Sursa: www.habr.com

Adauga un comentariu