I globali sono spade di acciaio per la memorizzazione dei dati. Alberi. Parte 1

I globali sono spade di acciaio per la memorizzazione dei dati. Alberi. Parte 1 Le vere armi segrete dei database — i globali — sono conosciute da tempo, ma fino ad oggi poche persone sanno utilizzarle in modo efficace o non le possiedono affatto come super-armi.

Se si utilizzano i globali per risolvere i compiti per i quali sono realmente efficaci, si possono ottenere risultati straordinari. O nella performance, o nella semplificazione della soluzione del problema (1, 2).

I globali sono un modo speciale di memorizzare e elaborare i dati, completamente diverso dalle tabelle in SQL. Sono stati introdotti nel 1966 nel linguaggio M(UMPS) (sviluppo evolutivo — Caché ObjectScript, successivamente COS) nei database medici e sono ancora utilizzati attivamente , e hanno trovato applicazione anche in altri settori dove è richiesta affidabilità e alta performance: finanza, trading, ecc.I globali nei moderni DBMS supportano transazioni, registrazione, replicazione, partizionamento. In altre parole, su di essi è possibile costruire sistemi moderni, affidabili, distribuiti e veloci.

I globali non vi limitano ai confini del modello relazionale. Offrono libertà nella progettazione di strutture dati ottimizzate per compiti specifici. Per molte applicazioni, un utilizzo ragionevole dei globali può essere una vera arma segreta, garantendo prestazioni di cui gli sviluppatori di applicazioni relazionali possono solo sognare.

I globali come metodo di memorizzazione dei dati possono essere utilizzati in molti linguaggi di programmazione moderni, sia di alto che di basso livello. Pertanto, in questo articolo mi concentrerò sui globali, e non sul linguaggio da cui sono derivati.

2. Come funzionano i globali

Iniziamo con il comprendere 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. Oppure come archivi gerarchici di dati.

In termini semplici, un globale è un array persistente. Un array che viene salvato automaticamente su disco.

È difficile immaginare qualcosa di più semplice per memorizzare dati. Nel codice (in linguaggi COS/M) si distingue da un normale array associativo solo per il simbolo
prima del nome. ^ Per memorizzare dati in un globale non è necessario studiare il linguaggio di query SQL, i comandi per lavorare con essi sono molto semplici. Si possono apprendere in un'ora.

Per memorizzare dati in una variabile globale non è necessario apprendere un linguaggio di query SQL, i comandi per lavorare con esse sono molto semplici. Si possono imparare in un'ora.

Iniziamo con il più semplice degli esempi. Un albero unilivello con 2 rami. Gli esempi sono scritti in COS.

I globali sono spade di acciaio per la memorizzazione 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. Salvataggio dei dati su disco.
  2. Indicizzazione. Ciò che si trova tra parentesi funge da chiave (nella letteratura anglofona - «subscript»), mentre a destra del segno di uguale si trova il valore («node value»).
  3. Ordinamento. I dati vengono ordinati per chiave. In seguito, durante la navigazione dell'array, il primo elemento sarà «Sergey Smith», e il secondo «John Sidorov». Quando si riceve un elenco di utenti dal globale, il database non spende tempo per ordinare. Inoltre, è possibile richiedere l'output di un elenco ordinato, partendo da qualsiasi chiave, anche inesistente (l'output inizierà dalla prima chiave reale che segue quella inesistente).

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

Naturalmente, la velocità di inserimento da sola dice poco. Ad esempio, si possono registrare informazioni molto rapidamente nei file di testo—così si dice funziona il processo di Visa. Ma nel caso dei globali, otteniamo in uscita un deposito strutturato indicizzato, con cui è possibile lavorare in modo semplice e veloce.

I globali sono spade di acciaio per la memorizzazione dei dati. Alberi. Parte 1

  • Il punto di forza dei globali è la rapidità di inserimento di nuovi nodi.
  • I dati nel globale sono sempre indicizzati. La loro navigazione, sia a un livello che in profondità nell'albero, è sempre veloce.

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 sono spade di acciaio per la memorizzazione dei dati. Alberi. Parte 1

È evidente che sulla base dei globali sia possibile costruire alberi multilivello. 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 per chiave.

Come si può vedere, le informazioni possono essere memorizzate 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 (il numero di dimensioni) è 31.

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

I globali sono spade di acciaio per la memorizzazione dei dati. Alberi. Parte 1

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

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

Per comprendere meglio i globali, li confrontiamo con altri alberi: con gli alberi da giardino e con gli alberi dei nomi dei file.

Confrontiamo gli alberi nei globali con le strutture gerarchiche a noi più familiari: con i normali alberi che crescono nei giardini e nei campi, e anche con i sistemi di file.

I globali sono spade di acciaio per la memorizzazione dei dati. Alberi. Parte 1

Come vediamo, negli alberi da giardino le foglie e i frutti si trovano solo sulle estremità dei rami.
Nei sistemi di file, le informazioni si trovano solo sulle estremità dei rami, che sono i nomi completi dei file.

Ecco la struttura dei dati del globale.

I globali sono spade di acciaio per la memorizzazione dei dati. Alberi. Parte 1Differenze:

  1. Nodi interni: Le informazioni nel globale possono essere memorizzate in ogni nodo, non solo sulle estremità dei rami.
  2. Nodi esterni: Nel globale devono essere definiti valori sulle estremità dei rami, mentre negli alberi FS e negli alberi da giardino non è necessario.



In parte degli nodi interni, si può dire che la struttura del globale è un insieme superiore alla struttura degli alberi dei nomi nei sistemi di file e negli alberi da giardino. Cioè, è più flessibile.

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

Per comprendere meglio il funzionamento dei globali, immaginiamo cosa potrebbe succedere se i creatori dei sistemi di file utilizzassero un approccio simile a quello dei globali per la memorizzazione delle informazioni?

  1. Eliminando un singolo file in una directory, la directory verrebbe automaticamente eliminata, così come tutte le directory superiori che contengono solo quella directory appena eliminata.
  2. Non ci sarebbe più bisogno di directory. Ci sarebbero semplicemente file con sottocartelle e file senza sottocartelle. Se confrontato con un albero normale, ogni ramo diventerebbe un frutto.

    I globali sono spade di acciaio per la memorizzazione dei dati. Alberi. Parte 1

  3. Elementi come file README.txt potrebbero scomparire. Tutto ciò che era necessario dire sul contenuto di una directory poteva essere scritto all'interno del file di directory stesso. Nello spazio dei percorsi, il nome di un file è indistinguibile dal nome di una directory, quindi ci si potrebbe accontentare di file singoli.
  4. La velocità di eliminazione delle directory con sottodirectory e file aumenterebbe drasticamente. Molte volte su Habr sono apparsi articoli su quanto possa essere lungo e difficile eliminare milioni di piccoli file.1, 2). Tuttavia, se si crea un sistema di file pseudo globale, ci vorranno solo secondi o frazioni di essi. Quando ho testato la rimozione di sotto-alberi sul computer di casa, in un secondo rimuovevo da 96 a 341 milioni di nodi da un albero a due livelli su HDD (non SSD). Si tratta della rimozione di una parte dell'albero, non semplicemente di tutto il file con i globali.

I globali sono spade di acciaio per la memorizzazione dei dati. Alberi. Parte 1
La rimozione di sotto-alberi è un altro punto di forza dei globali. Non è necessaria la ricorsione. Questo avviene incredibilmente rapidamente.

Nel nostro albero si potrebbe fare con il comando Kill.

Kill ^a("+7926X")

I globali sono spade di acciaio per la memorizzazione dei dati. Alberi. Parte 1

Per una migliore comprensione delle azioni disponibili sui globali, presenterò una tabella riassuntiva.

Strumenti e funzioni principali per lavorare con i globali in COS

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

Merge
Copia di sotto-albero

Kill
Rimozione di sotto-albero

ZKill
Rimozione del valore di un nodo specifico. Il sotto-albero che esce dal nodo non viene toccato.

$Query
Visita completa dell'albero con accesso in profondità

$Order
Visita dei rami di un nodo specifico

$Data
Verifica se il nodo è definito

$Increment
Incremento atomico del valore di un nodo. Per evitare letture e scritture, per ACID. Negli ultimi tempi si raccomanda di sostituire con $Sequence

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

Avviso: Questo articolo e i miei commenti sono la mia opinione e non riflettono la posizione ufficiale della società InterSystems.

Continua Globali — spade-macchine per la memorizzazione dei dati. Alberi. Parte 2. Scoprirete quali tipi di dati possono essere visualizzati sui globali e in quali attività offrono il massimo vantaggio.

Fonte: habr.com

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