Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 1

Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 1 De echte databasezwaarden – globals – zijn al lang bekend, maar nog steeds weten maar weinigen hoe ze effectief te gebruiken of bezitten dit superwapen helemaal niet.

Als je globals gebruikt bij het oplossen van de problemen waar ze echt goed in zijn, kun je uitstekende resultaten behalen. Hetzij in productiviteit, hetzij in het vereenvoudigen van de oplossing van het probleem (1, 2).

Globals zijn een speciale manier om gegevens op te slaan en te verwerken, totaal anders dan tabellen in SQL. Ze verschenen in 1966 in de taal M(UMPS) (evolutionaire ontwikkeling - Cache ObjectScript, hierna COS) in de medische database en is daar nog steeds actief gebruikt, en is ook doorgedrongen tot enkele andere gebieden waar betrouwbaarheid en hoge prestaties vereist zijn: financiën, handel, enz.

Globals in moderne DBMS'en ondersteunen transacties, logboekregistratie, replicatie en partitionering. Die. ze kunnen worden gebruikt om moderne, betrouwbare, gedistribueerde en snelle systemen te bouwen.

Globals beperken je niet tot het relationele model. Ze geven u de vrijheid om datastructuren te ontwikkelen die zijn geoptimaliseerd voor specifieke taken. Voor veel toepassingen kan slim gebruik van globals werkelijk een geheim wapen zijn, dat prestaties levert waar ontwikkelaars van relationele toepassingen alleen maar van kunnen dromen.

Globals als een manier om gegevens op te slaan kunnen in veel moderne programmeertalen worden gebruikt, zowel op hoog als op laag niveau. Daarom zal ik me in dit artikel specifiek richten op globals, en niet op de taal waaruit ze ooit voortkwamen.

2. Hoe globalen werken

Laten we eerst begrijpen hoe globals werken en wat hun sterke punten zijn. Globals kunnen vanuit verschillende invalshoeken worden bekeken. In dit deel van het artikel zullen we ze beschouwen als bomen. Of zoals hiërarchische datawarehouses.

Simpel gezegd: een global is een persistente array. Een array die automatisch op schijf wordt opgeslagen.
Het is moeilijk om je iets eenvoudiger voor te stellen voor het opslaan van gegevens. In code (in COS/M-talen) verschilt het alleen van een reguliere associatieve array in het symbool ^ vóór de naam.

Om gegevens in een globale versie op te slaan, hoeft u de SQL-querytaal niet te leren; de opdrachten om ermee te werken zijn heel eenvoudig. Ze kunnen binnen een uur worden geleerd.

Laten we beginnen met het eenvoudigste voorbeeld. Boom met één niveau met 2 takken. De voorbeelden zijn geschreven in COS.

Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 1

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



Bij het invoegen van informatie in een globaal (Set-commando) gebeuren er automatisch 3 dingen:

  1. Gegevens op schijf opslaan.
  2. Indexering. Wat tussen haakjes staat, is de sleutel (in de Engelse literatuur - "subscript"), en rechts van gelijken staat de waarde ("knooppuntwaarde").
  3. Sorteren. De gegevens zijn gesorteerd op sleutel. In de toekomst, bij het doorkruisen van de array, zal het eerste element "Sergey Smith" zijn, en het tweede "John Sidorov". Bij het ontvangen van een lijst met gebruikers uit de hele wereld verspilt de database geen tijd met sorteren. Bovendien kunt u de uitvoer van een gesorteerde lijst opvragen, beginnend bij elke sleutel, zelfs een niet-bestaande (de uitvoer begint bij de eerste echte sleutel, die na de niet-bestaande sleutel komt).

Al deze operaties gebeuren ongelooflijk snel. Op mijn thuiscomputer kreeg ik in één proces waarden tot 750 inserts/sec. Op multi-coreprocessors kunnen de waarden oplopen tientallen miljoenen inzetstukken/sec.

De invoegsnelheid zelf zegt natuurlijk niet veel. U kunt bijvoorbeeld heel snel informatie in tekstbestanden schrijven, zoals deze geruchten Visumverwerking werkt. Maar in het geval van globals krijgen we daardoor een gestructureerde geïndexeerde opslag, waar in de toekomst gemakkelijk en snel mee gewerkt kan worden.

Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 1

  • De grootste kracht van globals is de snelheid waarmee nieuwe knooppunten kunnen worden ingevoegd.
  • Gegevens in de globale wereld worden altijd geïndexeerd. Het doorkruisen ervan, zowel op één niveau als diep in de boom, gaat altijd snel.

Laten we nog een paar takken van het tweede en derde niveau aan het globale toevoegen.

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

Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 1

Het is duidelijk dat bomen met meerdere niveaus kunnen worden gebouwd op basis van globale gegevens. Bovendien is de toegang tot elk knooppunt vrijwel onmiddellijk dankzij automatische indexering tijdens het invoegen. En op elk niveau van de boom worden alle takken op sleutel gesorteerd.

Zoals u kunt zien, kan informatie zowel in een sleutel als in een waarde worden opgeslagen. De totale sleutellengte (de som van de lengtes van alle indexen) kan oplopen 511 bytesen de waarden 3.6 MB voor cache. Het aantal niveaus in de boom (aantal dimensies) is 31.

Nog een interessant punt. U kunt een boom bouwen zonder de waarden van de knooppunten van de bovenste niveaus op te geven.

Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 1

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

Lege cirkels zijn knooppunten waaraan geen waarde is toegewezen.

Laten we, om globalen beter te begrijpen, ze vergelijken met andere bomen: tuinbomen en bestandssysteemnaambomen.

Laten we bomen op globals vergelijken met de voor ons meest bekende hiërarchische structuren: met gewone bomen die in tuinen en velden groeien, maar ook met bestandssystemen.

Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 1

Zoals we bij tuinbomen zien, zijn bladeren en vruchten alleen aan de uiteinden van de takken te vinden.
Bestandssystemen - informatie wordt alleen opgeslagen aan de uiteinden van vertakkingen, dit zijn volledig gekwalificeerde bestandsnamen.

En hier is de mondiale datastructuur.

Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 1verschillen:

  1. Interne knooppunten: informatie in een global kan in elk knooppunt worden opgeslagen, niet alleen aan de uiteinden van vertakkingen.
  2. Externe knooppunten: De globale moeten gedefinieerde waarden hebben aan de uiteinden van de takken, terwijl FS en tuinbomen dat niet doen.



In termen van interne knooppunten kunnen we zeggen dat de structuur van de globale een superset is van de structuur van naambomen in bestandssystemen en tuinbomen. Die. flexibeler.

Over het algemeen is het mondiaal geordende boom met de mogelijkheid om gegevens in elk knooppunt op te slaan.

Laten we, om het werk van globals beter te begrijpen, ons eens voorstellen wat er zou gebeuren als de makers van bestandssystemen een benadering zouden gebruiken die vergelijkbaar is met die van globals om informatie op te slaan?

  1. Als u één enkel bestand in een map verwijdert, wordt automatisch de map verwijderd, evenals alle bovenliggende mappen die alleen de map bevatten die zojuist is verwijderd.
  2. Er zouden geen mappen nodig zijn. Er zouden eenvoudigweg bestanden zijn met subbestanden en bestanden zonder subbestanden. Als je het vergelijkt met een gewone boom, zou elke tak een vrucht worden.

    Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 1

  3. Dingen zoals README.txt-bestanden zijn mogelijk niet nodig. Alles wat over de inhoud van de map gezegd moest worden, kon in het mapbestand zelf worden geschreven. In de padruimte is de bestandsnaam niet te onderscheiden van de directorynaam, dus het was mogelijk om met alleen bestanden rond te komen.
  4. De snelheid van het verwijderen van mappen met geneste submappen en bestanden zou dramatisch toenemen. Op Habré zijn er vaak artikelen verschenen over hoe lang en moeilijk het is om miljoenen kleine bestanden te verwijderen (1, 2). Als u echter een pseudo-bestandssysteem op een global maakt, duurt het seconden of fracties daarvan. Toen ik het verwijderen van substructuren op een thuiscomputer testte, werden in 1 seconde 96-341 miljoen knooppunten verwijderd uit een structuur met twee lagen op een HDD (niet SSD). Bovendien hebben we het over het verwijderen van een deel van de boom, en niet alleen over het hele bestand met globalen.

Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 1
Het verwijderen van substructuren is een ander sterk punt van globals. Hiervoor heb je geen recursie nodig. Dit gebeurt ongelooflijk snel.

In onze boom kan dit gedaan worden met het commando Doden.

Kill ^a("+7926X")

Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 1

Om een ​​beter begrip te krijgen van welke acties er voor ons beschikbaar zijn in de globalisering, zal ik een korte tabel geven.

Basisopdrachten en functies voor het werken met globalen in COS

Zet de
Vertakkingen naar een knooppunt instellen (indien nog niet gedefinieerd) en knooppuntwaarden

gaan
Een subboom kopiëren

Doden
Een subboom verwijderen

Zmoor
De waarde van een specifiek knooppunt verwijderen. De subboom die uit het knooppunt tevoorschijn komt, wordt niet aangeraakt

$Vraag
Volledige doortocht door de boom, diep de boom in

$Bestelling
Het doorkruisen van takken van een specifiek knooppunt

$Gegevens
Controleren of een knooppunt is gedefinieerd

$Verhoging
Een knooppuntwaarde atomair verhogen. Om lezen en schrijven te voorkomen, voor ACID. Onlangs werd aanbevolen om over te schakelen naar $Reeks

Bedankt voor uw aandacht, wij staan ​​klaar om uw vragen te beantwoorden.

Disclaimer: Dit artikel en mijn commentaar daarop zijn mijn mening en hebben geen betrekking op het officiële standpunt van InterSystems Corporation.

Uitbreiding Globals zijn schatzwaarden voor het opslaan van gegevens. Bomen. Deel 2. U leert welke soorten gegevens op globals kunnen worden weergegeven en voor welke taken ze het maximale voordeel opleveren.

Bron: www.habr.com

Voeg een reactie