Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 1

Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 1 De echte database-swurden - globalen - binne al lang bekend, mar noch in pear witte hoe't se se effektyf kinne brûke of hawwe dit superwapen hielendal net.

As jo ​​globals brûke by it oplossen fan dy problemen wêryn se echt goed binne, kinne jo treflike resultaten berikke. Of yn produktiviteit of yn it ferienfâldigjen fan de oplossing fan it probleem (1, 2).

Globalen binne in spesjale manier om gegevens op te slaan en te ferwurkjen, folslein oars as tabellen yn SQL. Se ferskynden yn 1966 yn de taal M(UMPS) (evolúsjonêre ûntwikkeling - Cache ObjectScript, hjirnei COS) yn 'e medyske databank en is der noch aktyf brûkt, en ek penetrearre yn guon oare gebieten dêr't betrouberens en hege prestaasjes binne fereaske: finânsjes, hannel, ensfh.

Globalen yn moderne DBMS's stypje transaksjes, logging, replikaasje en partitionearring. Dy. se kinne brûkt wurde om moderne, betroubere, ferspraat en snelle systemen te bouwen.

Globalen beheine jo net ta it relaasjemodel. Se jouwe jo de frijheid om gegevensstruktueren te ûntwikkeljen dy't binne optimalisearre foar spesifike taken. Foar in protte tapassingen kin tûk gebrûk fan globalen wirklik in geheim wapen wêze, it leverjen fan prestaasjes wêrfan relaasjeûntwikkelders allinich kinne dreame.

Globals as manier om gegevens op te slaan kinne brûkt wurde yn in protte moderne programmeartalen, sawol op heech nivo as op leech nivo. Dêrom sil ik yn dit artikel spesifyk rjochtsje op globalen, en net op 'e taal dêr't se eartiids út kamen.

2. Hoe globals wurkje

Litte wy earst begripe hoe't globalen wurkje en wat har sterke punten binne. Globals kinne wurde besjoen út ferskate stânpunten. Yn dit diel fan it artikel sille wy se sjen as beammen. Of lykas hiërargyske datapakhuzen.

Om it gewoan te sizzen, in globale is in oanhâldende array. In array dy't automatysk op skiif bewarre wurdt.
It is lestich om wat ienfâldiger foar te stellen foar it opslaan fan gegevens. Yn koade (yn COS/M-talen) ferskilt it allinnich yn it symboal fan in gewoane assosjatyf array ^ foar de namme.

Om gegevens te bewarjen yn in globale, jo hoege net te learen de SQL query taal de kommando's foar wurkjen mei harren binne hiel simpel. Se kinne wurde leard yn in oere.

Litte wy begjinne mei it ienfâldichste foarbyld. Single-level beam mei 2 tûken. De foarbylden binne skreaun yn COS.

Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 1

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



By it ynfoegjen fan ynformaasje yn in globale (Set kommando), 3 dingen automatysk barre:

  1. Bewarje gegevens op skiif.
  2. Yndeksearje. Wat tusken heakjes stiet is de kaai (yn Ingelske literatuer - "ûnderskrift"), en rjochts fan gelikense is de wearde ("knooppuntwearde").
  3. Sort. De gegevens wurde sortearre op kaai. Yn 'e takomst, as jo troch de array gean, sil it earste elemint "Sergey Smith" wêze, en it twadde "John Sidorov". By it ûntfangen fan in list mei brûkers fan 'e globale, fergrieme de databank gjin tiid mei sortearjen. Boppedat kinne jo de útfier fan in sorteare list oanfreegje, begjinnend fan elke kaai, sels in net-besteande (de útfier sil begjinne fan 'e earste echte kaai, dy't komt nei de net-besteande).

Al dizze operaasjes barre ongelooflijk fluch. Op myn thúskompjûter krige ik wearden oant 750 ynserts / sek yn ien proses. Op multi-core processors kinne de wearden berikke tsientallen miljoenen ynfoeg / sek.

Fansels seit de ynfoegje snelheid sels net folle. Jo kinne bygelyks heul fluch ynformaasje skriuwe yn tekstbestannen - lykas dit geroften Visa ferwurking wurket. Mar yn it gefal fan globalen krije wy as resultaat in strukturearre yndeksearre opslach, wêrmei't yn 'e takomst maklik en fluch wurke wurde kin.

Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 1

  • De grutste krêft fan globalen is de snelheid wêrop nije knopen kinne wurde ynfoege.
  • Gegevens yn 'e globale wurde altyd yndeksearre. Troch har hinne, sawol op ien nivo as djip yn 'e beam, is altyd fluch.

Litte wy in pear mear tûken fan it twadde en tredde nivo tafoegje oan it 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

Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 1

It is fanselssprekkend dat multi-level beammen kinne wurde boud op basis fan globals. Boppedat is tagong ta elke knooppunt hast daliks troch auto-yndeksearring by ynfoegje. En op elk nivo fan 'e beam wurde alle tûken sorteare op kaai.

Sa't jo sjen kinne, kin ynformaasje wurde opslein yn sawol in kaai as in wearde. De totale kaai lingte (de som fan de lingten fan alle yndeksen) kin berikke 511 byt, en de wearden 3.6 MB foar Cache. It oantal nivo's yn 'e beam (oantal diminsjes) is 31.

In oar nijsgjirrich punt. Jo kinne in beam bouwe sûnder de wearden fan 'e knopen fan' e boppeste nivo's op te jaan.

Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 1

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

Lege sirkels binne knopen dy't gjin wearde hawwe tawiisd.

Om globalen better te begripen, litte wy se fergelykje mei oare beammen: túnbeammen en beammen fan triemsysteemnamme.

Litte wy beammen op globalen fergelykje mei de meast bekende hierargyske struktueren foar ús: mei gewoane beammen dy't groeie yn tunen en fjilden, lykas mei triemsystemen.

Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 1

As wy sjogge yn túnbeammen, wurde blêden en fruchten allinich oan 'e úteinen fan' e tûken fûn.
Bestânssystemen - ynformaasje wurdt allinich opslein oan 'e ein fan tûken, dy't folslein kwalifisearre bestânsnammen binne.

En hjir is de globale gegevensstruktuer.

Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 1Difference:

  1. Ynterne knopen: ynformaasje yn in globale kin wurde opslein yn elke knooppunt, net allinich oan 'e ein fan tûken.
  2. Eksterne knooppunten: De globale moat definieare wearden hawwe oan 'e ein fan' e tûken, wylst FS en túnbeammen dat net dogge.



Yn termen fan ynterne knopen kinne wy ​​​​sizze dat de struktuer fan 'e globale in superset is fan' e struktuer fan nammebeammen yn triemsystemen en túnbeammen. Dy. fleksibeler.

Yn 't algemien is de globale bestelde beam mei de mooglikheid om gegevens yn elke knoop te bewarjen.

Om it wurk fan globalen better te begripen, stel jo foar wat der barre soe as de makkers fan bestânsystemen in oanpak brûke dy't fergelykber is mei globalen om ynformaasje op te slaan?

  1. It wiskjen fan in inkele triem yn in map soe automatysk de map wiskje, lykas alle boppelizzende mappen dy't allinich de iene map befetsje dy't krekt wiske binne.
  2. D'r soe gjin ferlet fan mappen wêze. D'r soene gewoan bestannen wêze mei subbestannen en bestannen sûnder subbestannen. As fergelike mei in gewoane beam, dan soe elke tûke in frucht wurde.

    Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 1

  3. Dingen lykas README.txt-bestannen binne miskien net nedich. Alles wat sein wurde moast oer de ynhâld fan 'e map koe wurde skreaun yn it mapbestân sels. Yn paadromte is de triemnamme net te ûnderskieden fan de mapnamme, dus it wie mooglik om te kommen mei gewoan triemmen.
  4. De snelheid fan it wiskjen fan mappen mei geneste submappen en bestannen soe dramatysk tanimme. In protte kearen op Habré binne d'r artikels west oer hoe lang en dreech it is om miljoenen lytse bestannen te wiskjen (1, 2). As jo ​​​​lykwols in pseudo-bestânsysteem meitsje op in globale, sil it sekonden of fraksjes dêrfan nimme. Doe't ik hifke wiskjen subtrees op in thús kompjûter, it fuorthelle 1-96 miljoen knopen út in twa-tier beam op in HDD (net SSD) yn 341 sekonde. Boppedat hawwe wy it oer it wiskjen fan in diel fan 'e beam, en net allinich it hiele bestân mei globalen.

Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 1
It fuortheljen fan subtrees is in oar sterk punt fan globalen. Jo hawwe gjin rekursje nedich foar dit. Dit bart ongelooflijk fluch.

Yn ús beam koe dat mei it kommando Fermoardzje.

Kill ^a("+7926X")

Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 1

Foar in better begryp fan hokker aksjes binne beskikber foar ús oer globals, Ik sil foarsjen in koarte tabel.

Basis kommando's en funksjes foar wurkjen mei globalen yn COS

set
It ynstellen fan tûken nei in knooppunt (as noch net definiearre) en knooppuntwearden

Fusearje
It kopiearjen fan in subtree

Fermoardzje
It fuortsmiten fan in subtree

ZKill
It wiskjen fan de wearde fan in spesifike knooppunt. De subtree dy't út it knooppunt komt, wurdt net oanrekke

$Query
Folsleine trochsneed fan 'e beam, gean djip yn' e beam

$Oarder
Trochrinnende tûken fan in spesifike knooppunt

$Data
Kontrolearje oft in knooppunt is definiearre

$ Ferheging
Atomysk inkrementearjen fan in knooppuntwearde. Om foar te kommen lêzen en skriuwen dwaan, foar ACID. Koartlyn is it oanrikkemandearre om te feroarjen nei $ Sequence

Tankewol foar jo oandacht, wy binne ree om jo fragen te beantwurdzjen.

Disclaimer: Dit artikel en myn opmerkingen dêrop binne myn miening en hawwe gjin relaasje mei de offisjele posysje fan InterSystems Corporation.

Continuation Globalen binne skat-swurden foar it bewarjen fan gegevens. Beammen. Diel 2. Jo sille leare hokker soarten gegevens kinne wurde werjûn op globalen en op hokker taken se it maksimale foardiel leverje.

Boarne: www.habr.com

Add a comment