I Globali — spade-treasure per la conservazione dei dati. Alberi. Parte 1

I Globali — spade-treasure per la conservazione dei dati. Alberi. Parte 1 Le vere armi segrete delle banche dati — i globali — sono conosciute da tempo, ma fino ad oggi pochi sanno come utilizzarle in modo efficace o non le possiedono affatto, questo superpotere.

Se si utilizzano i globali per risolvere i problemi per i quali sono realmente vantaggiosi, è possibile ottenere risultati eccezionali, sia in termini di prestazioni che semplificando la soluzione del problema (1, 2).

I globali rappresentano un modo speciale di memorizzare e elaborare i dati, completamente diverso dalle tabelle SQL. Sono stati introdotti nel 1966 nel linguaggio M(UMPS) (evoluzione di - Caché ObjectScript, poi COS) nelle banche dati mediche e sono ancora ampiamente utilizzati , oltre a essere penetrati in alcune altre aree dove sono richiesti affidabilità e alte prestazioni: finanza, trading, ecc.I globali nei moderni DBMS supportano transazioni, logging, replicazione e partizionamento. Ovvero, su di essi è possibile costruire sistemi moderni, affidabili, distribuiti e veloci.

I database moderni supportano transazioni, registrazione, replica, partizionamento. Cioè, su di essi è possibile costruire sistemi moderni, affidabili, distribuiti e veloci.

I globali non ti limitano ai confini del modello relazionale. Ti danno la libertà di sviluppare strutture dati ottimizzate per compiti specifici. Per molte applicazioni, un uso intelligente dei globali può essere una vera arma segreta, offrendo prestazioni che gli sviluppatori di applicazioni relazionali possono solo sognare.

I globali come metodo di archiviazione dei dati possono essere utilizzati in molti linguaggi di programmazione moderni, sia ad alto che a basso livello. In questo articolo mi concentrerò proprio sui globali, e non sul linguaggio da cui sono originati.

2. Come funzionano i globali

Iniziamo a capire come funzionano i globali e quali sono i loro punti di forza. I globali possono essere visti da diverse prospettive. In questa parte dell'articolo li considereremo come alberi. O come archivi di dati gerarchici.

In termini semplici, un globale è un array persistente. Un array che si salva automaticamente su disco.
È difficile immaginare qualcosa di più semplice per la memorizzazione dei dati. In code (nei linguaggi COS/M) si differenzia da un normale array associativo solo per un simbolo ^ prima del nome.

Per memorizzare i dati nel globale non è necessario studiare il linguaggio delle query SQL; i comandi per lavorarci sono molto semplici. Possono essere appresi in un'ora.

Iniziamo con il più semplice esempio. Un albero a un livello con 2 rami. Gli esempi sono scritti in COS.

I Globali — spade-treasure per la conservazione dei dati. Alberi. Parte 1

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



Quando si inseriscono informazioni nel globale (comando Set) avvengono automaticamente 3 cose:

  1. Memorizzazione dei dati su disco.
  2. Indicizzazione. Ciò che è tra parentesi funge da chiave (nella letteratura anglofona - "subscript"), e a destra dell'uguale c'è il valore ("node value").
  3. Ordinamento. I dati sono ordinati per chiave. In seguito, durante l'attraversamento dell'array, il primo elemento sarà "Sergey Smith" e il secondo "John Sidorov". Quando si ottiene un elenco di utenti dal globale, il database non perde tempo nell'ordinamento. Inoltre, si può richiedere l'output di un elenco ordinato, a partire da qualsiasi chiave, anche non esistente (l'output inizierà dalla prima chiave reale che segue quella non esistente).

Tutte queste operazioni avvengono incredibilmente velocemente. Sul computer di casa ho ottenuto valori fino a 750.000 inserimenti/sec in un solo processo. Su processori multi-core, i valori possono raggiungere decine di milioni inserimenti/sec.

Certo, la velocità di inserimento da sola dice poco. Ad esempio, è possibile scrivere molto rapidamente informazioni in file di testo — così secondo voci funziona il processamento di Visa. Ma nel caso dei globali otteniamo come risultato un deposito strutturato e indicizzato, con cui è possibile lavorare in modo semplice e veloce in seguito.

I Globali — spade-treasure per la conservazione dei dati. Alberi. Parte 1

  • Il punto di forza dei globali è la velocità di inserimento di nuovi nodi.
  • I dati nei globali sono sempre indicizzati. Il loro attraversamento, sia a livello che in profondità nell'albero, è sempre rapido.

Aggiungiamo al globale ancora alcuni rami di secondo e terzo livello.

Set ^a("+7926X", "city") = "Mosca"
Set ^a("+7926X", "city", "street") = "Piazza Req"
Set ^a("+7926X", "age") = 25
Set ^a("+7916Y", "city") = "Londra"
Set ^a("+7916Y", "city", "street") = "Baker Street"
Set ^a("+7916Y", "age") = 36

I Globali — spade-treasure per la conservazione dei dati. Alberi. Parte 1

È evidente che sulla base delle variabili globali si possono costruire alberi a più livelli. Inoltre, l'accesso a qualsiasi nodo è praticamente istantaneo grazie all'autoindicizzazione durante l'inserimento. E a qualsiasi livello dell'albero, tutti i rami sono ordinati secondo la chiave.

Come si può notare, le informazioni possono essere conservate sia nella chiave che nel valore. La lunghezza totale della chiave (la somma delle lunghezze di tutti gli indici) può raggiungere 511 byte, e i valori 3,6 MB per Caché. Il numero di livelli nell'albero (numero di dimensioni) è 31.

Un altro aspetto interessante. È possibile costruire un albero senza specificare i valori dei nodi dei livelli superiori.

I Globali — spade-treasure per la conservazione dei dati. Alberi. Parte 1

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

I cerchi vuoti sono nodi a cui non è stato assegnato alcun valore.

Per capire meglio le variabili globali, confrontiamole con altri alberi: quelli da giardino e quelli delle strutture gerarchiche dei file.

Confrontiamo gli alberi delle variabili globali con le strutture gerarchiche a noi più familiari: gli alberi che crescono nei giardini e nei campi, e le strutture dei file.

I Globali — spade-treasure per la conservazione dei dati. Alberi. Parte 1

Come possiamo vedere, negli alberi da giardino le foglie e i frutti si trovano solo alle estremità dei rami.
I file system — le informazioni sono memorizzate solo alle estremità dei rami, che sono i nomi completi dei file.

Ecco la struttura dei dati del global.

I Globali — spade-treasure per la conservazione dei dati. Alberi. Parte 1Differenze:

  1. Nodi interni: le informazioni nel global possono essere memorizzate in ogni nodo, non solo alle estremità dei rami.
  2. Nodi esterni: il global deve avere valori definiti alle estremità dei rami, mentre gli alberi FS e gli alberi giardino non hanno questa necessità.



In parte dei nodi interni, si può dire che la struttura del global è un sovrainsieme della struttura degli alberi dei nomi nei file system e negli alberi giardino. Cioè, più flessibile.

In generale, il global rappresenta un albero ordinato con la possibilità di memorizzare dati in ogni nodo..

Per comprendere meglio il funzionamento dei global, immaginiamo cosa succederebbe se i creatori dei file system utilizzassero per la memorizzazione delle informazioni un approccio simile a quello dei global?

  1. Eliminando un singolo file in una directory, verrebbe automaticamente eliminata la directory, così come tutte le directory superiori che contengono solo quella directory appena eliminata.
  2. La necessità di directory scomparirebbe. Esisterebbero semplicemente file con sottofile e file senza sottofile. Se si confronta con un albero normale, ogni ramo diventerebbe un frutto.

    I Globali — spade-treasure per la conservazione dei dati. Alberi. Parte 1

  3. Elementi come i file README.txt potrebbero non essere più necessari. Tutto ciò che è necessario dire sul contenuto di una directory potrebbe essere incluso direttamente nel file della directory. Nello spazio dei percorsi, il nome del file è indistinguibile dal nome della directory, quindi sarebbe possibile limitarsi a utilizzare solo file.
  4. La velocità di eliminazione delle directory con sottodirectory e file aumenterebbe notevolmente. Molte volte su Habr sono apparse articoli su quanto fosse lungo e difficile eliminare milioni di piccoli file (1, 2). Tuttavia, se si realizzasse un pseudo-sistema di file a livello globale, questo richiederebbe secondi o frazioni di secondo. Quando ho testato l'eliminazione di sotto-alberi sul mio computer di casa, in 1 secondo riuscivo a eliminare da 96 a 341 milioni di nodi da un albero a due livelli su HDD (non SSD). Si tratta di eliminare una parte dell'albero, non semplicemente dell'intero file a livello globale.

I Globali — spade-treasure per la conservazione dei dati. Alberi. Parte 1
L'eliminazione di sotto-alberi è un'altra forte caratteristica dei globali. Per questo non è necessaria la ricorsione. Accade in modo incredibilmente veloce.

Nel nostro albero, si potrebbe fare con un comando Uccidi.

Kill ^a("+7926X")

I Globali — spade-treasure per la conservazione dei dati. Alberi. Parte 1

Per una migliore comprensione delle azioni che possiamo intraprendere con i globali, fornirò una breve tabella.

Comandi e funzioni principali per lavorare con i globali in COS

Set
Impostazione dei rami fino al nodo (se non ancora definiti) e valore del nodo

Merge
Copia di un sottoalbero

Uccidi
Cancellazione di un sottoalbero

ZKill
Eliminazione del valore di un nodo specifico. Il sottoalbero che esce dal nodo non viene toccato

$Query
Visita completa dell'albero approfondendo

$Order
Scorrimento dei rami di un nodo specifico

$Data
Verifica se il nodo è definito

$Increment
Incremento atomico del valore del nodo. Per evitare letture e scritture, per ACID. Recentemente si raccomanda di cambiare in $Sequence

Grazie per l'attenzione, siamo pronti a rispondere alle vostre domande.

Avvertenza: Questo articolo e i miei commenti sono solo il mio punto di vista e non rappresentano la posizione ufficiale della corporation InterSystems.

Continuazione I globali sono forzieri per la memorizzazione dei dati. Alberi. Parte 2. Scoprirete quali tipi di dati possono essere visualizzati sui globali e quali compiti offrono il massimo vantaggio.

Fonte: habr.com

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster