Globale is skatte-swaarde vir die stoor van data. Bome. Deel 1

Globale is skatte-swaarde vir die stoor van data. Bome. Deel 1 Die werklike databasis-swaarde - globale - is lank reeds bekend, maar steeds weet min hoe om dit effektief te gebruik of besit glad nie hierdie superwapen nie.

As jy globale gebruike gebruik om daardie probleme op te los waarmee hulle regtig goed is, kan jy uitstekende resultate behaal. Of in produktiwiteit of in die vereenvoudiging van die oplossing van die probleem (1, 2).

Globale is 'n spesiale manier om data te stoor en te verwerk, heeltemal anders as tabelle in SQL. Hulle het in 1966 in die taal verskyn M(UMPS) (evolusionêre ontwikkeling - Kas ObjectScript, hierna COS) in die mediese databasis en is steeds daar aktief gebruik word, en het ook deurgedring tot 'n paar ander gebiede waar betroubaarheid en hoë werkverrigting vereis word: finansies, handel, ens.

Globale in moderne DBBS'e ondersteun transaksies, logging, replikasie en partisionering. Dié. hulle kan gebruik word om moderne, betroubare, verspreide en vinnige stelsels te bou.

Globale beperk jou nie tot die verhoudingsmodel nie. Dit gee jou die vryheid om datastrukture te ontwikkel wat vir spesifieke take geoptimaliseer is. Vir baie toepassings kan slim gebruik van globals werklik 'n geheime wapen wees, wat prestasie lewer waarvan relasionele toepassingsontwikkelaars net kan droom.

Globale as 'n manier om data te stoor kan in baie moderne programmeertale, beide hoëvlak en laevlak, gebruik word. Daarom sal ek in hierdie artikel spesifiek fokus op globals, en nie op die taal waaruit hulle eens gekom het nie.

2. Hoe globals werk

Kom ons verstaan ​​eers hoe globale werke en wat hul sterk punte is. Globale kan vanuit verskillende oogpunte gekyk word. In hierdie deel van die artikel sal ons na hulle kyk as bome. Of soos hiërargiese datapakhuise.

Om dit eenvoudig te stel, 'n globale is 'n aanhoudende skikking. 'n Skikking wat outomaties op skyf gestoor word.
Dit is moeilik om iets eenvoudigers voor te stel vir die stoor van data. In kode (in COS/M-tale) verskil dit van 'n gewone assosiatiewe skikking slegs in die simbool ^ voor die naam.

Om data in 'n globale te stoor, hoef jy nie die SQL-navraagtaal te leer nie; die opdragte om daarmee te werk is baie eenvoudig. Hulle kan binne 'n uur geleer word.

Kom ons begin met die eenvoudigste voorbeeld. Enkelvlak boom met 2 takke. Die voorbeelde is in COS geskryf.

Globale is skatte-swaarde vir die stoor van data. Bome. Deel 1

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



Wanneer inligting in 'n globale (Stel opdrag) ingevoeg word, gebeur 3 dinge outomaties:

  1. Stoor data op skyf.
  2. Indeksering. Wat tussen hakies is, is die sleutel (in Engelse literatuur - "subscript"), en regs van gelyke is die waarde ("knooppuntwaarde").
  3. Sorteer. Die data word volgens sleutel gesorteer. In die toekoms, wanneer jy die skikking deurkruis, sal die eerste element "Sergey Smith" wees, en die tweede "John Sidorov". Wanneer 'n lys van gebruikers van die wêreld ontvang word, mors die databasis nie tyd om te sorteer nie. Boonop kan u die uitvoer van 'n gesorteerde lys versoek, vanaf enige sleutel, selfs 'n nie-bestaande een (die afvoer sal begin vanaf die eerste regte sleutel, wat na die nie-bestaande een kom).

Al hierdie operasies gebeur ongelooflik vinnig. Op my tuisrekenaar het ek waardes van tot 750 inserts/sek in 'n enkele proses gekry. Op multi-kern verwerkers kan die waardes bereik tienmiljoene insetsels/sek.

Natuurlik sê die invoegspoed self nie veel nie. Jy kan byvoorbeeld baie vinnig inligting in tekslêers skryf – soos hierdie gerugte Visumverwerking werk. Maar in die geval van globale, kry ons 'n gestruktureerde geïndekseerde berging as gevolg, waarmee maklik en vinnig in die toekoms gewerk kan word.

Globale is skatte-swaarde vir die stoor van data. Bome. Deel 1

  • Die grootste sterkpunt van globale is die spoed waarteen nuwe nodusse ingevoeg kan word.
  • Data in die globale is altyd geïndekseer. Om hulle te deurkruis, beide op een vlak en diep in die boom, is altyd vinnig.

Kom ons voeg nog 'n paar takke van die tweede en derde vlakke by die globale.

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

Globale is skatte-swaarde vir die stoor van data. Bome. Deel 1

Dit is duidelik dat multi-vlak bome gebou kan word gebaseer op globale. Boonop is toegang tot enige nodus byna onmiddellik as gevolg van outo-indeksering tydens invoeging. En op enige vlak van die boom word alle takke volgens sleutel gesorteer.

Soos u kan sien, kan inligting in beide 'n sleutel en 'n waarde gestoor word. Die totale sleutellengte (die som van die lengtes van alle indekse) kan bereik 511 grepe, en die waardes 3.6 MB vir Cache. Die aantal vlakke in die boom (aantal afmetings) is 31.

Nog 'n interessante punt. U kan 'n boom bou sonder om die waardes van die nodusse van die boonste vlakke te spesifiseer.

Globale is skatte-swaarde vir die stoor van data. Bome. Deel 1

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

Leë kringe is nodusse wat geen waarde toegeken het nie.

Om globale beter te verstaan, kom ons vergelyk hulle met ander bome: tuinbome en lêerstelselnaambome.

Kom ons vergelyk bome op globale bome met die bekendste hiërargiese strukture vir ons: met gewone bome wat in tuine en landerye groei, sowel as met lêerstelsels.

Globale is skatte-swaarde vir die stoor van data. Bome. Deel 1

Soos ons in tuinbome sien, word blare en vrugte net aan die punte van die takke aangetref.
Lêerstelsels - inligting word slegs aan die punte van takke gestoor, wat volledig gekwalifiseerde lêername is.

En hier is die globale datastruktuur.

Globale is skatte-swaarde vir die stoor van data. Bome. Deel 1verskille:

  1. Interne nodusse: inligting in 'n globale kan in elke nodus gestoor word, nie net aan die punte van takke nie.
  2. Eksterne nodusse: Die globale moet gedefinieerde waardes aan die punte van die takke hê, terwyl FS en tuinbome nie.



In terme van interne nodusse kan ons sê dat die struktuur van die globale 'n superset is van die struktuur van naambome in lêerstelsels en tuinbome. Dié. meer buigsaam.

In die algemeen is die globale geordende boom met die vermoë om data in elke nodus te stoor.

Om die werk van globale beter te verstaan, stel jou voor wat sou gebeur as die skeppers van lêerstelsels 'n benadering soortgelyk aan globale gebruik om inligting te stoor?

  1. Deur 'n enkele lêer in 'n gids uit te vee, sal die gids outomaties uitvee, sowel as alle oorliggende gidse wat slegs die een gids bevat wat sopas uitgevee is.
  2. Daar sou geen behoefte aan gidse wees nie. Daar sal eenvoudig lêers wees met sublêers en lêers sonder sublêers. As dit met 'n gewone boom vergelyk word, sal elke tak 'n vrug word.

    Globale is skatte-swaarde vir die stoor van data. Bome. Deel 1

  3. Dinge soos README.txt-lêers is dalk nie nodig nie. Alles wat oor die inhoud van die gids gesê moet word, kan in die gidslêer self geskryf word. In padspasie is die lêernaam nie onderskeibaar van die gidsnaam nie, so dit was moontlik om met net lêers oor die weg te kom.
  4. Die spoed van die verwydering van dopgehou met geneste subgidse en lêers sal dramaties toeneem. Baie keer op Habré was daar artikels oor hoe lank en moeilik dit is om miljoene klein lêers uit te vee (1, 2). As jy egter 'n pseudo-lêerstelsel op 'n globale maak, sal dit sekondes of breukdele daarvan neem. Toe ek die verwydering van subbome op 'n tuisrekenaar getoets het, het dit 1-96 miljoen nodusse van 'n tweevlak-boom op 'n HDD (nie SSD nie) in 341 sekonde verwyder. Boonop praat ons van die verwydering van 'n deel van die boom, en nie net die hele lêer met globals nie.

Globale is skatte-swaarde vir die stoor van data. Bome. Deel 1
Die verwydering van subbome is nog 'n sterk punt van globale. Jy het nie rekursie hiervoor nodig nie. Dit gebeur ongelooflik vinnig.

In ons boom kan dit gedoen word met die opdrag dood.

Kill ^a("+7926X")

Globale is skatte-swaarde vir die stoor van data. Bome. Deel 1

Vir 'n beter begrip van watter aksies vir ons beskikbaar is oor globale, sal ek 'n kort tabel verskaf.

Basiese opdragte en funksies om met globals in COS te werk

Stel
Stel vertakkings na 'n nodus (indien nog nie gedefinieer nie) en noduswaardes

Kombineer
Kopieer 'n subboom

dood
Verwyder 'n subboom

ZKill
Deur die waarde van 'n spesifieke nodus uit te vee. Die subboom wat uit die nodus opkom, word nie aangeraak nie

$Query
Voltooi die deurkruising van die boom, gaan diep in die boom in

$Bestelling
Vertakking van takke van 'n spesifieke nodus

$Data
Kontroleer of 'n nodus gedefinieer is

$verhoging
Atoomverhoging van 'n noduswaarde. Om te verhoed dat jy lees en skryf, vir ACID. Onlangs is aanbeveel om na te verander $Sequence

Dankie vir u aandag, ons is gereed om u vrae te beantwoord.

Vrywaring: Hierdie artikel en my kommentaar daarop is my mening en verteenwoordig nie die amptelike standpunt van InterSystems Corporation nie.

Uitbreiding Globale is skatte-swaarde vir die stoor van data. Bome. Deel 2. Jy sal leer watter tipe data op globales vertoon kan word en op watter take hulle die maksimum voordeel bied.

Bron: will.com

Voeg 'n opmerking