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.
Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"
Quandu inserisce l'infurmazioni in un globale (Set command), 3 cose succede automaticamente:
Salvà dati à u discu.
Indexazione. Ciò chì hè in parentesi hè a chjave (in a literatura inglese - "subscript"), è à a diritta di uguali hè u valore ("valore di node").
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.
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
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.
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.
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.
Differences:
Nodi interni: infurmazione in un glubale pò esse guardatu in ogni node, micca solu à l'estremità di e rami.
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?
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.
Ù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.
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.
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.
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")
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
$ 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.