Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 1

Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 1 Les espases de base de dades reals - globals - es coneixen des de fa temps, però encara pocs saben com utilitzar-les de manera eficaç o no posseeixen aquesta superarma.

Si utilitzeu globals per resoldre aquells problemes en els quals són realment bons, podeu aconseguir resultats excel·lents. Ja sigui en productivitat o en simplificar la solució del problema (1, 2).

Els globals són una manera especial d'emmagatzemar i processar dades, completament diferent de les taules en SQL. Van aparèixer l'any 1966 a la llengua M(UMPS) (desenvolupament evolutiu - Cache ObjectScript, d'ara endavant COS) a la base de dades mèdica i encara hi és utilitzat activament, i també va penetrar en algunes altres àrees on es requereix fiabilitat i alt rendiment: finances, comerç, etc.

Els globals dels DBMS moderns admeten transaccions, registres, replicacions i particions. Aquells. es poden utilitzar per construir sistemes moderns, fiables, distribuïts i ràpids.

Els globals no us limiten al model relacional. Us donen la llibertat de desenvolupar estructures de dades optimitzades per a tasques específiques. Per a moltes aplicacions, l'ús intel·ligent dels globals pot ser realment una arma secreta, proporcionant un rendiment que els desenvolupadors d'aplicacions relacionals només poden somiar.

Els globals com a forma d'emmagatzemar dades es poden utilitzar en molts llenguatges de programació moderns, tant d'alt nivell com de baix nivell. Per tant, en aquest article em centraré específicament en els globals, i no en la llengua d'on provenien.

2. Com funcionen els globals

Primer entenem com funcionen els globals i quins són els seus punts forts. Els globals es poden veure des de diferents punts de vista. En aquesta part de l'article els veurem com arbres. O com els magatzems de dades jeràrquics.

Per dir-ho simplement, un global és una matriu persistent. Una matriu que es desa automàticament al disc.
És difícil imaginar alguna cosa més senzilla per emmagatzemar dades. En codi (en llenguatges COS/M) es diferencia d'una matriu associativa normal només en el símbol ^ abans del nom.

Per desar dades en un global, no cal aprendre el llenguatge de consulta SQL; les ordres per treballar-hi són molt senzilles. Es poden aprendre en una hora.

Comencem per l'exemple més senzill. Arbre d'un sol nivell amb 2 branques. Els exemples estan escrits en COS.

Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 1

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



Quan s'insereix informació en una ordre global (configuració), passen automàticament 3 coses:

  1. Desar dades al disc.
  2. Indexació. El que està entre parèntesis és la clau (a la literatura anglesa - "subíndex"), i a la dreta d'equals hi ha el valor ("valor del node").
  3. Ordena. Les dades estan ordenades per clau. En el futur, en recórrer la matriu, el primer element serà "Sergey Smith" i el segon "John Sidorov". En rebre una llista d'usuaris del global, la base de dades no perd temps ordenant. A més, podeu sol·licitar la sortida d'una llista ordenada, a partir de qualsevol clau, fins i tot una inexistent (la sortida començarà des de la primera clau real, que ve després de la inexistent).

Totes aquestes operacions es fan amb una rapidesa increïble. Al meu ordinador de casa estava obtenint valors de fins a 750 insercions/s en un sol procés. En els processadors multinucli els valors poden assolir desenes de milions insercions/s.

Per descomptat, la velocitat d'inserció en si no diu gaire. Podeu, per exemple, escriure informació molt ràpidament en fitxers de text, com aquest segons els rumors La tramitació de visats funciona. Però en el cas dels globals, obtenim com a resultat un emmagatzematge indexat estructurat, amb el qual es pot treballar fàcilment i ràpidament en el futur.

Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 1

  • La força més gran dels globals és la velocitat a la qual es poden inserir nous nodes.
  • Les dades del global sempre estan indexades. Travessar-los, tant a un nivell com en el fons de l'arbre, sempre és ràpid.

Afegim algunes branques més del segon i tercer nivell al 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

Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 1

És obvi que es poden construir arbres multinivell basats en globals. A més, l'accés a qualsevol node és gairebé instantani a causa de la indexació automàtica durant la inserció. I a qualsevol nivell de l'arbre, totes les branques estan ordenades per clau.

Com podeu veure, la informació es pot emmagatzemar tant en una clau com en un valor. La longitud total de la clau (la suma de les longituds de tots els índexs) pot assolir 511 byte, i els valors 3.6 MB per a la memòria cau. El nombre de nivells de l'arbre (nombre de dimensions) és 31.

Un altre punt interessant. Podeu construir un arbre sense especificar els valors dels nodes dels nivells superiors.

Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 1

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

Els cercles buits són nodes que no tenen cap valor assignat.

Per entendre millor els globals, comparem-los amb altres arbres: arbres de jardí i arbres de noms del sistema de fitxers.

Comparem arbres en globals amb les estructures jeràrquiques més conegudes per a nosaltres: amb arbres normals que creixen en jardins i camps, així com amb sistemes de fitxers.

Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 1

Com veiem als arbres del jardí, les fulles i els fruits només es troben als extrems de les branques.
Sistemes de fitxers: la informació només s'emmagatzema als extrems de les branques, que són noms de fitxers totalment qualificats.

I aquí hi ha l'estructura global de dades.

Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 1Diferències:

  1. Nodes interns: La informació en un global es pot emmagatzemar a cada node, no només als extrems de les branques.
  2. Nodes externs: El global ha de tenir valors definits als extrems de les branques, mentre que els FS i els arbres de jardí no.



Pel que fa als nodes interns, podem dir que l'estructura del global és un superconjunt de l'estructura dels arbres de noms en sistemes de fitxers i arbres de jardí. Aquells. més flexible.

En general, el global és arbre ordenat amb la capacitat d'emmagatzemar dades a cada node.

Per entendre millor el treball dels globals, imaginem què passaria si els creadors de sistemes de fitxers utilitzessin un enfocament similar al global per emmagatzemar informació?

  1. L'eliminació d'un sol fitxer d'un directori s'eliminaria automàticament, així com tots els directoris que contenen només el directori que s'acaba d'esborrar.
  2. No hi hauria necessitat de directoris. Simplement hi hauria fitxers amb subfitxers i fitxers sense subfitxers. Si es compara amb un arbre normal, llavors cada branca es convertiria en un fruit.

    Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 1

  3. És possible que no calguin coses com ara els fitxers README.txt. Tot el que calia dir sobre el contingut del directori es podia escriure al fitxer del directori mateix. A l'espai del camí, el nom del fitxer no es distingeix del nom del directori, de manera que només era possible amb fitxers.
  4. La velocitat d'eliminació de directoris amb subdirectoris i fitxers imbricats augmentaria dràsticament. Moltes vegades a Habré hi ha hagut articles sobre com de llarg i difícil és esborrar milions de fitxers petits (1, 2). Tanmateix, si feu un pseudosistema de fitxers en un global, trigarà segons o fraccions. Quan vaig provar la supressió de subarbres en un ordinador domèstic, va eliminar 1-96 milions de nodes d'un arbre de dos nivells en un disc dur (no SSD) en 341 segon. A més, estem parlant d'eliminar part de l'arbre, i no només el fitxer sencer amb globals.

Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 1
L'eliminació dels subarbres és un altre punt fort dels globals. No necessiteu recursivitat per a això. Això passa increïblement ràpid.

Al nostre arbre això es podria fer amb l'ordre Matar.

Kill ^a("+7926X")

Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 1

Per a una millor comprensió de quines accions tenim disponibles a nivell global, oferiré una breu taula.

Ordres i funcions bàsiques per treballar amb globals en COS

Establir
Establiment de ramificacions a un node (si encara no està definit) i valors de node

Unir
Còpia d'un subarbre

Matar
Eliminació d'un subarbre

ZKill
Eliminació del valor d'un node específic. El subarbre que surt del node no es toca

$Query
Travessa completa de l'arbre, endinsant-se en l'arbre

$Ordre
Travessant branques d'un node específic

$Data
Comprovació de si un node està definit

$ Increment
Increment atòmic del valor d'un node. Per evitar fer lectures i escriptures, per ACID. Recentment s'ha recomanat canviar a $Seqüència

Gràcies per la vostra atenció, estem preparats per respondre les vostres preguntes.

renúncia: Aquest article i els meus comentaris al respecte són la meva opinió i no representen la posició oficial d'InterSystems Corporation.

Extensió Els globals són espases de tresor per emmagatzemar dades. Arbres. Part 2. Aprendràs quins tipus de dades es poden mostrar als globals i sobre quines tasques proporcionen el màxim benefici.

Font: www.habr.com

Afegeix comentari