I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 1

I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 1 I veri spade di basa di dati - globals - sò longu cunnisciuti, ma ancu pochi sanu cumu aduprà in modu efficace o ùn anu micca pussede sta superarma.

Sè vo aduprate globals per risolve quelli prublemi chì sò veramente boni, pudete ottene risultati eccezziunali. Sia in produtividade o in simplificà a suluzione di u prublema (1, 2).

I Globali sò un modu speciale di almacenà è trasfurmà e dati, completamente sfarente da e tavule in SQL. Apparsu in u 1966 in a lingua M (UMPS) (sviluppu evolutivu - Cache ObjectScript, in seguitu COS) in a basa di dati medica è hè sempre quì attivamente utilizatu, è ancu penetratu in certi altri spazii induve l'affidabilità è l'altu rendiment sò necessarii: finanza, cummerciu, etc.

Globali in i DBMS muderni supportanu transazzioni, logging, replicazione è particionamentu. Quelli. ponu esse usatu per custruisce sistemi muderni, affidabili, distribuiti è veloci.

I Globali ùn vi limitanu micca à u mudellu relazionale. Vi danu a libertà di sviluppà strutture di dati chì sò ottimisate per compiti specifichi. Per parechje applicazioni, l'usu intelligente di globals pò esse veramente un'arma secreta, chì furnisce prestazioni chì i sviluppatori di applicazioni relazionali ponu solu sognu.

Globals cum'è un modu per almacenà e dati pò esse usatu in parechje linguaggi di prugrammazione muderni, sia à livellu altu sia à livellu bassu. Dunque, in questu articulu, mi cuncintraraghju specificamente nantu à i globals, è micca in a lingua da quale sò vinuti.

2. Cumu travaglianu i globals

Capemu prima cumu travaglianu i globali è quali sò i so punti di forza. Globals ponu esse guardati da diversi punti di vista. In questa parte di l'articulu avemu da guardà à elli cum'è arburi. O cum'è magazzini di dati gerarchichi.

Per esse simplicemente, un globale hè un array persistente. Un array chì hè salvatu automaticamente à u discu.
Hè difficiuli d'imagine qualcosa di più simplice per almacenà e dati. In u codice (in lingue COS / M) differe da un array assuciativu regulare solu in u simbulu ^ prima di u nome.

Per salvà dati in un globale, ùn avete micca bisognu di amparà a lingua di query SQL; i cumandamenti per travaglià cun elli sò assai simplici. Puderanu esse amparatu in una ora.

Cuminciamu cù l'esempiu più simplice. Arbulu unicu livellu cù 2 rami. L'esempii sò scritti in COS.

I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 1

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



Quandu inserisce l'infurmazioni in un globale (Set command), 3 cose succede automaticamente:

  1. Salvà dati à u discu.
  2. Indexazione. Ciò chì hè in parentesi hè a chjave (in a literatura inglese - "subscript"), è à a diritta di uguali hè u valore ("valore di node").
  3. Sorting. I dati sò ordinati per chjave. In u futuru, à traversu l'array, u primu elementu serà "Sergey Smith", è u sicondu "John Sidorov". Quandu riceve una lista di utilizatori da u glubale, a basa di dati ùn perde micca u tempu di sorte. Inoltre, pudete dumandà l'output di una lista ordinata, partendu da ogni chjave, ancu una inesistente (a pruduzzioni principiarà da a prima chjave vera, chì vene dopu à quella inesistente).

Tutte queste operazioni passanu incredibbilmente rapidamente. In u mo computer di casa, aghju ottene valori finu à 750 000 inserti / sec in un solu prucessu. In i processori multi-core i valori ponu ghjunghje decine di milioni inseriti/sec.

Di sicuru, a velocità d'inserimentu stessu ùn dice micca assai. Pudete, per esempiu, scrive assai rapidamente l'infurmazioni in i schedarii di testu - cum'è questu sicondu i rumuri Trattamentu di visa travaglia. Ma in u casu di globals, avemu un almacenamentu indexatu strutturatu in u risultatu, chì pò esse facilmente è rapidamente travagliatu in u futuru.

I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 1

  • A più grande forza di i globals hè a veloce à quale i novi nodi ponu esse inseriti.
  • I dati in u mondu sò sempre indexati. Traversà elli, sia à un livellu sia in fondu à l'arbulu, hè sempre veloce.

Aghjunghjemu uni pochi di più rami di u sicondu è u terzu livellu à u glubale.

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

I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 1

Hè ovvi chì l'arbureti multi-livellu pò esse custruitu nantu à i globals. Inoltre, l'accessu à qualsiasi nodu hè quasi istantaneu per via di l'auto-indexazione durante l'inserimentu. È à ogni livellu di l'arbulu, tutti i rami sò ordenati per chjave.

Comu pudete vede, l'infurmazione pò esse guardata in una chjave è un valore. A durata chjave tutale (a summa di e lunghezze di tutti l'indici) pò ghjunghje Byte 511, è i valori 3.6 MB per Cache. U numaru di livelli in l'arbulu (numaru di dimensioni) hè 31.

Un altru puntu interessante. Pudete custruisce un arbre senza specificà i valori di i nodi di i livelli superiori.

I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 1

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

I circles vacanti sò nodi chì ùn anu micca valore assignatu.

Per capisce megliu i globals, paragunemu cù l'altri arburi: arburi di giardinu è arburi di nomi di sistema di schedari.

Comparamu l'arbureti nantu à i globals cù e strutture gerarchiche più familiari per noi: cù l'arbureti ordinali chì crescenu in giardini è campi, è ancu cù sistemi di schedari.

I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 1

Comu avemu vistu in l'arbureti di giardinu, foglie è frutti si trovanu solu à l'estremità di e rami.
Sistemi di schedari - l'infurmazione hè almacenata solu à l'estremità di e rami, chì sò nomi di schedari cumpletamente qualificati.

È quì hè a struttura di dati globale.

I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 1Differences:

  1. Nodi interni: infurmazione in un glubale pò esse guardatu in ogni node, micca solu à l'estremità di e rami.
  2. Nodi esterni: U glubale deve avè valori definiti à l'estremità di i rami, mentri FS è l'arbureti di giardinu ùn anu micca.



In termini di nodi internu, pudemu dì chì a struttura di u glubale hè un superset di a struttura di l'arbureti di nomi in i sistemi di schedari è l'arbureti di giardinu. Quelli. più flexible.

In generale, u mondu hè arbre urdinatu cù a capacità di almacenà dati in ogni node.

Per capisce megliu u travagliu di i globals, imagine ciò chì succede se i creatori di i sistemi di schedari anu utilizatu un approcciu simili à i globals per almacenà l'infurmazioni?

  1. L'eliminazione di un unicu schedariu in un repertoriu sguasserà automaticamente u cartulare, è ancu tutti i repertorii soprastanti chì cuntenenu solu u repertoriu appena sguassatu.
  2. Ùn ci saria micca bisognu di cartulari. Ci saria simpricimenti schedari cù subfiles è schedari senza subfiles. Se paragunatu à un arbulu ordinariu, ogni ramu diventerà un fruttu.

    I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 1

  3. Cose cum'è i schedari README.txt ùn anu micca bisognu. Tuttu ciò chì ci vole à dì nantu à u cuntenutu di u repertoriu puderia esse scrittu in u schedariu di u cartulare stessu. In u spaziu di u percorsu, u nome di l'archiviu hè indistinguibile da u nome di u repertoriu, per quessa, era pussibule di ottene solu cù i schedari.
  4. A rapidità di sguassà cartulari cù i subdirectory nidificate è i fugliali aumenterebbe dramaticamente. Parechje volte in Habré ci sò stati articuli nantu à quantu longu è difficiule hè di sguassà milioni di picculi schedari (1, 2). In ogni casu, se fate un pseudo-sistema di schedari nantu à un globale, ci hà da piglià seconde o fraccionarii. Quandu aghju pruvatu l'eliminazione di subtrees in un computer di casa, hà eliminatu 1-96 milioni di nodi da un arbulu di dui livelli in un HDD (micca SSD) in 341 secondu. Inoltre, parlemu di sguassà una parte di l'arbulu, è micca solu u schedariu sanu cù globals.

I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 1
Eliminazione di subtrees hè un altru puntu forte di globals. Ùn avete bisognu di ricursione per questu. Questu succede incredibilmente rapidamente.

In u nostru arbulu questu puderia esse fattu cù u cumandamentu flippe.

Kill ^a("+7926X")

I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 1

Per un megliu capiscenu di ciò chì l'azzioni sò dispunibuli per noi nantu à i globals, furniraghju una tavola corta.

Cumandamenti basi è funzioni per travaglià cù globals in COS

Piazzà
Définition des branches à un noeud (s'il n'est pas encore défini) et des valeurs de noeuds

Merge
Copia un subtree

flippe
Eliminazione di un subarbre

ZKill
Eliminazione di u valore di un node specificu. U subtree chì emerge da u node ùn hè micca toccu

$Query
Trasversale cumpletu di l'arbulu, andendu in fondu à l'arbulu

$ ordine
Traversà i rami di un node specificu

$Data
Verificate se un node hè definitu

$ Incrementu
Incrementazione atomica di un valore di node. Per evitari di fà leghje è scrive, per ACID. Recentemente hè statu cunsigliatu di cambià à $Sequenza

Grazie per a vostra attenzione, simu pronti à risponde à e vostre dumande.

Légales: Questu articulu è i mo cumenti sò a mo opinione è ùn anu micca relazione cù a pusizione ufficiale di InterSystems Corporation.

Continuazione I Globali sò spade di tesoru per almacenà dati. Arburi. Parte 2. Ampararete chì tipi di dati ponu esse affissati nantu à i globals è nantu à quali compiti furniscenu u massimu benefiziu.

Source: www.habr.com

Add a comment