A globálisok kincses kardok az adatok tárolására. fák. 1. rész

A globálisok kincses kardok az adatok tárolására. fák. 1. rész Az igazi adatbázis-kardok - a globálisok - régóta ismertek, de még mindig kevesen tudják, hogyan kell hatékonyan használni őket, vagy egyáltalán nem birtokolják ezt a szuperfegyvert.

Ha a globalokat olyan problémák megoldására használja, amelyekben igazán jók, akkor kiemelkedő eredményeket érhet el. Akár a termelékenységben, akár a probléma megoldásának egyszerűsítésében (1, 2).

A globálisok az adatok tárolásának és feldolgozásának egy speciális módja, amely teljesen különbözik az SQL tábláitól. 1966-ban jelentek meg a nyelven MUMPSZ) (evolúciós fejlődés - Cache ObjectScript, a továbbiakban COS) szerepel az orvosi adatbázisban, és még mindig ott van aktívan használják, és behatoltak néhány más olyan területre is, ahol megbízhatóság és nagy teljesítmény szükséges: pénzügy, kereskedés stb.

A modern DBMS-ek globálisai támogatják a tranzakciókat, a naplózást, a replikációt és a particionálást. Azok. modern, megbízható, elosztott és gyors rendszerek építésére használhatók.

A globálisok nem korlátozzák a relációs modellre. Lehetőséget adnak bizonyos feladatokra optimalizált adatstruktúrák fejlesztésére. Sok alkalmazás számára a globálisok intelligens használata valóban titkos fegyver lehet, olyan teljesítményt nyújtva, amelyről a relációs alkalmazások fejlesztői csak álmodhatnak.

A globalok az adatok tárolásának módjaként számos modern, magas és alacsony szintű programozási nyelvben használhatók. Ezért ebben a cikkben kifejezetten a globálisokra fogok összpontosítani, nem pedig arra a nyelvre, amelyről egykor származtak.

2. Hogyan működnek a globálisok

Először is értsük meg, hogyan működnek a globálisok, és mik az erősségeik. A globálisokat különböző nézőpontokból lehet szemlélni. A cikk ezen részében fákként fogjuk őket tekinteni. Vagy mint a hierarchikus adattárházak.

Egyszerűen fogalmazva, a globális egy állandó tömb. Egy tömb, amely automatikusan lemezre kerül.
Nehéz elképzelni valami egyszerűbb adattárolást. A kódban (COS/M nyelveken) csak a szimbólumban tér el a szabályos asszociatív tömbtől ^ a név előtt.

Az adatok globális mentéséhez nem kell megtanulnia az SQL lekérdezési nyelvet, a velük való munkavégzés parancsai nagyon egyszerűek. Egy óra alatt megtanulhatók.

Kezdjük a legegyszerűbb példával. Egyszintes fa 2 ággal. A példák COS-ben vannak megírva.

A globálisok kincses kardok az adatok tárolására. fák. 1. rész

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



Amikor információt szúr be egy globálisba (Set parancs), 3 dolog történik automatikusan:

  1. Adatok mentése lemezre.
  2. Indexelés. Ami a zárójelben van, az a kulcs (az angol szakirodalomban - „al index”), az egyenlők jobb oldalán pedig az érték („node value”).
  3. Válogatás. Az adatok kulcs szerint vannak rendezve. A jövőben a tömb áthaladásakor az első elem „Sergey Smith”, a második „John Sidorov” lesz. Amikor a globális felhasználók listáját kapja, az adatbázis nem vesztegeti az időt a válogatással. Sőt, kérhető egy rendezett lista kimenete, bármilyen kulcsból kiindulva, akár nem létezőből is (a kimenet az első valódi kulcstól indul, ami a nem létező után következik).

Mindezek a műveletek hihetetlenül gyorsan történnek. Otthoni számítógépemen akár 750 000 beszúrás/sec értéket kaptam egyetlen folyamatban. A többmagos processzorokon az értékek elérhetik tízmilliókat betétek/mp.

Természetesen maga a beillesztési sebesség nem mond sokat. Például nagyon gyorsan írhat információkat szöveges fájlokba - így pletykáltak A vízumfeldolgozás működik. Ám a globalok esetében így egy strukturált indexelt tárhelyet kapunk, amivel a jövőben könnyen és gyorsan lehet dolgozni.

A globálisok kincses kardok az adatok tárolására. fák. 1. rész

  • A globalok legnagyobb erőssége az új csomópontok beillesztésének sebessége.
  • A globális adatok mindig indexelve vannak. Áthaladni rajtuk, mind egy szinten, mind mélyen a fába, mindig gyors.

Adjunk hozzá még néhány ágat a második és harmadik szintből a globálishoz.

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

A globálisok kincses kardok az adatok tárolására. fák. 1. rész

Nyilvánvaló, hogy a globálisok alapján többszintű fákat lehet építeni. Sőt, a beillesztés közbeni automatikus indexelésnek köszönhetően bármely csomóponthoz való hozzáférés szinte azonnali. És a fa bármely szintjén az összes ág kulcs szerint van rendezve.

Mint látható, az információ kulcsban és értékben is tárolható. A kulcs teljes hossza (az összes index hosszának összege) elérheti 511 bytesés az értékeket 3.6 MB a gyorsítótár számára. A fában lévő szintek száma (a dimenziók száma) 31.

Még egy érdekes pont. Fát építhet anélkül, hogy megadná a felső szintek csomópontjainak értékét.

A globálisok kincses kardok az adatok tárolására. fák. 1. rész

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

Az üres körök olyan csomópontok, amelyekhez nincs érték hozzárendelve.

A globálisok jobb megértése érdekében hasonlítsuk össze őket más fákkal: kerti fákkal és fájlrendszernévfákkal.

Hasonlítsuk össze a globális fákat a számunkra legismertebb hierarchikus struktúrákkal: közönséges fákkal, amelyek kertekben és mezőkön nőnek, valamint fájlrendszerekkel.

A globálisok kincses kardok az adatok tárolására. fák. 1. rész

Ahogy a kerti fákon látjuk, a levelek és a termések csak az ágak végén találhatók.
Fájlrendszerek - az információkat csak az ágak végén tárolják, amelyek teljesen minősített fájlnevek.

És itt van a globális adatstruktúra.

A globálisok kincses kardok az adatok tárolására. fák. 1. részkülönbségek:

  1. Belső csomópontok: A globális információ minden csomópontban tárolható, nem csak az ágak végén.
  2. Külső csomópontok: A globálisnak meghatározott értékekkel kell rendelkeznie az ágak végén, míg az FS-nek és a kerti fáknak nem.



A belső csomópontok tekintetében elmondhatjuk, hogy a global szerkezete a fájlrendszerek és a kerti fák névfák szerkezetének szuperhalmaza. Azok. rugalmasabb.

Általában véve a globális az rendezett fa, amely képes adatokat tárolni az egyes csomópontokban.

A globalok munkájának jobb megértéséhez képzeljük el, mi történne, ha a fájlrendszerek alkotói a globalokhoz hasonló megközelítést alkalmaznának az információk tárolására?

  1. Egyetlen fájl törlése egy könyvtárból automatikusan törli a könyvtárat, valamint az összes olyan felül lévő könyvtárat, amely csak az egy éppen törölt könyvtárat tartalmazza.
  2. Nem lenne szükség könyvtárakra. Egyszerűen lennének fájlok alfájllal és fájlok alfájl nélkül. Ha egy közönséges fához hasonlítjuk, akkor minden ágból gyümölcs lesz.

    A globálisok kincses kardok az adatok tárolására. fák. 1. rész

  3. Előfordulhat, hogy a README.txt fájlokra nincs szükség. Mindent, amit a könyvtár tartalmáról el kellett mondani, be lehetett írni magába a könyvtárfájlba. Az elérési út térben a fájl neve nem különböztethető meg a könyvtár nevétől, így csak fájlokkal lehetett boldogulni.
  4. A beágyazott alkönyvtárakat és fájlokat tartalmazó könyvtárak törlésének sebessége drámaian megnő. A Habrén sokszor megjelentek cikkek arról, hogy milyen hosszú és nehéz több millió kis fájl törlése (1, 2). Ha azonban pszeudo-fájlrendszert hoz létre egy globálison, az másodpercekbe vagy annak töredékébe kerül. Amikor teszteltem a részfák törlését egy otthoni számítógépen, 1 másodperc alatt eltávolított 96-341 millió csomópontot a merevlemez (nem SSD) kétszintű fájából. Sőt, a fa egy részének törléséről beszélünk, nem csak a teljes fájlról a globalokkal.

A globálisok kincses kardok az adatok tárolására. fák. 1. rész
A részfák eltávolítása a globálisok másik erőssége. Ehhez nincs szükség rekurzióra. Ez hihetetlenül gyorsan történik.

A fánkban ezt a paranccsal lehetett megtenni Megöl.

Kill ^a("+7926X")

A globálisok kincses kardok az adatok tárolására. fák. 1. rész

Annak érdekében, hogy jobban megértsük, milyen műveletek állnak rendelkezésünkre a globálisan, adok egy rövid táblázatot.

Alapvető parancsok és funkciók a globálisokkal való munkavégzéshez a COS-ben

Készlet
Elágazások beállítása egy csomóponthoz (ha még nincs megadva) és csomópontértékek

megy
Egy részfa másolása

Megöl
Egy részfa eltávolítása

ZKill
Egy adott csomópont értékének törlése. A csomópontból kilépő részfát nem érinti meg

$Query
A fa teljes bejárása, mélyen a fába

$Order
Egy adott csomópont ágain való bejárás

$Data
Annak ellenőrzése, hogy van-e csomópont definiálva

$Növekedés
Csomópont értékének atomi növelése. Az ACID-hez való olvasás és írás elkerülése érdekében. A közelmúltban azt javasolták, hogy váltsanak erre $Sequence

Köszönjük figyelmét, készséggel válaszolunk kérdéseire.

A felelősség megtagadása: Ez a cikk és a hozzá fűzött megjegyzéseim az én véleményem, és nincs összefüggésben az InterSystems Corporation hivatalos álláspontjával.

Kiterjesztés A globálisok kincses kardok az adatok tárolására. fák. 2. rész. Megtudhatja, hogy milyen típusú adatok jeleníthetők meg a globalokon, és milyen feladatoknál nyújtják a maximális hasznot.

Forrás: will.com

Hozzászólás