Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 1

Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 1 Skutočné databázové meče – globals – sú už dávno známe, no stále málokto ich vie efektívne využívať alebo túto superzbraň vôbec nevlastní.

Ak pri riešení problémov, v ktorých sú naozaj dobrí, použijete globály, môžete dosiahnuť vynikajúce výsledky. Buď v produktivite alebo v zjednodušení riešenia problému (1, 2).

Globálne sú špeciálnym spôsobom ukladania a spracovania údajov, úplne odlišným od tabuliek v SQL. Objavili sa v roku 1966 v jazyku M(UMPS) (evolučný vývoj - Cache ObjectScript, ďalej COS) v lekárskej databáze a je tam stále aktívne využívané, a prenikli aj do niektorých ďalších oblastí, kde sa vyžaduje spoľahlivosť a vysoký výkon: financie, obchodovanie atď.

Globálne systémy v moderných DBMS podporujú transakcie, protokolovanie, replikáciu a rozdelenie. Tie. možno ich použiť na budovanie moderných, spoľahlivých, distribuovaných a rýchlych systémov.

Globálne oblasti vás neobmedzujú na vzťahový model. Poskytujú vám slobodu pri vývoji dátových štruktúr, ktoré sú optimalizované pre konkrétne úlohy. Pre mnohé aplikácie môže byť inteligentné používanie globálov skutočne tajnou zbraňou, ktorá poskytuje výkon, o akom môžu vývojári relačných aplikácií len snívať.

Globals ako spôsob ukladania údajov sa dá použiť v mnohých moderných programovacích jazykoch, na vysokej aj na nízkej úrovni. Preto sa v tomto článku zameriam konkrétne na globálne, a nie na jazyk, z ktorého kedysi pochádzali.

2. Ako fungujú globály

Poďme najprv pochopiť, ako fungujú globálne spoločnosti a aké sú ich silné stránky. Na globálne svety sa dá pozerať z rôznych uhlov pohľadu. V tejto časti článku sa na ne pozrieme ako na stromy. Alebo ako hierarchické dátové sklady.

Zjednodušene povedané, globálne je trvalé pole. Pole, ktoré sa automaticky uloží na disk.
Ťažko si predstaviť niečo jednoduchšie na ukladanie dát. V kóde (v jazykoch COS/M) sa od bežného asociatívneho poľa líši iba symbolom ^ pred menom.

Na ukladanie údajov v globále sa nemusíte učiť dopytovací jazyk SQL, príkazy na prácu s nimi sú veľmi jednoduché. Dajú sa naučiť za hodinu.

Začnime s najjednoduchším príkladom. Jednoposchodový strom s 2 vetvami. Príklady sú napísané v COS.

Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 1

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



Pri vkladaní informácií do globálneho (príkaz Set) sa automaticky dejú 3 veci:

  1. Ukladanie dát na disk.
  2. Indexovanie. To, čo je v zátvorkách, je kľúč (v anglickej literatúre „dolný index“) a napravo od rovnakého čísla je hodnota („hodnota uzla“).
  3. Triedenie. Údaje sú zoradené podľa kľúča. V budúcnosti, pri prechádzaní poľa, bude prvým prvkom „Sergey Smith“ a druhým „John Sidorov“. Pri prijímaní zoznamu užívateľov z globálneho nestráca databáza čas triedením. Okrem toho môžete požiadať o výstup zoradeného zoznamu, počnúc od akéhokoľvek kľúča, dokonca aj od neexistujúceho (výstup začne od prvého skutočného kľúča, ktorý nasleduje po neexistujúcom kľúči).

Všetky tieto operácie prebiehajú neuveriteľne rýchlo. Na mojom domácom počítači som dostával hodnoty až 750 000 insertov/s v jednom procese. Na viacjadrových procesoroch môžu hodnoty dosiahnuť desiatky miliónov vložky/sek.

Samozrejme, samotná rýchlosť vkladania nehovorí veľa. Môžete napríklad veľmi rýchlo zapisovať informácie do textových súborov – takto povrávalo sa Vybavovanie víz funguje. Ale v prípade globalov vo výsledku dostaneme štruktúrované indexované úložisko, s ktorým sa dá v budúcnosti jednoducho a rýchlo pracovať.

Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 1

  • Najväčšou silou globalov je rýchlosť, akou je možné vkladať nové uzly.
  • Údaje v globále sú vždy indexované. Prechádzať ich, ako na jednej úrovni, tak aj hlboko do stromu, je vždy rýchle.

Do globálnej pridajme ešte niekoľko vetiev druhej a tretej úrovne.

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

Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 1

Je zrejmé, že viacúrovňové stromy môžu byť postavené na základe globálov. Okrem toho je prístup k akémukoľvek uzlu takmer okamžitý vďaka automatickému indexovaniu počas vkladania. A na akejkoľvek úrovni stromu sú všetky vetvy zoradené podľa kľúča.

Ako vidíte, informácie môžu byť uložené v kľúči aj v hodnote. Celková dĺžka kľúča (súčet dĺžok všetkých indexov) môže dosiahnuť 511 bajtova hodnoty 3.6 MB pre Cache. Počet úrovní v strome (počet dimenzií) je 31.

Ďalší zaujímavý bod. Strom môžete vytvoriť bez zadania hodnôt uzlov vyšších úrovní.

Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 1

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

Prázdne kruhy sú uzly, ktoré nemajú priradenú žiadnu hodnotu.

Aby sme lepšie porozumeli globálom, porovnajme ich s inými stromami: záhradnými stromami a stromami názvov súborových systémov.

Porovnajme stromy na globále s nám najznámejšími hierarchickými štruktúrami: s obyčajnými stromami, ktoré rastú v záhradách a na poliach, ako aj so súborovými systémami.

Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 1

Ako vidíme na záhradných stromoch, listy a plody sa nachádzajú iba na koncoch konárov.
Súborové systémy – informácie sú uložené len na koncoch vetiev, čo sú plne kvalifikované názvy súborov.

A tu je globálna dátová štruktúra.

Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 1rozdiely:

  1. Vnútorné uzly: informácie v globále môžu byť uložené v každom uzle, nielen na koncoch vetiev.
  2. Vonkajšie uzly: Globálne musí mať definované hodnoty na koncoch vetiev, zatiaľ čo FS a záhradné stromy nie.



Z hľadiska vnútorných uzlov môžeme povedať, že štruktúra globálneho je nadmnožinou štruktúry názvových stromov v súborových systémoch a záhradných stromoch. Tie. flexibilnejšie.

Vo všeobecnosti platí, že globálne je usporiadaný strom s možnosťou ukladať dáta v každom uzle.

Aby sme lepšie porozumeli práci globalistov, predstavme si, čo by sa stalo, keby tvorcovia súborových systémov použili na ukladanie informácií podobný prístup ako globálne?

  1. Vymazaním jedného súboru v adresári by sa automaticky odstránil adresár, ako aj všetky prekrývajúce sa adresáre obsahujúce iba jeden práve vymazaný adresár.
  2. Neboli by potrebné adresáre. Jednoducho by existovali súbory s podsúbormi a súbory bez podsúborov. V porovnaní s obyčajným stromom by sa každá vetva stala ovocím.

    Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 1

  3. Veci ako súbory README.txt nemusia byť potrebné. Všetko, čo bolo potrebné povedať o obsahu adresára, bolo možné zapísať do samotného adresárového súboru. V priestore cesty je názov súboru nerozoznateľný od názvu adresára, takže bolo možné vystačiť si len so súbormi.
  4. Rýchlosť odstraňovania adresárov s vnorenými podadresármi a súbormi by sa dramaticky zvýšila. Na Habré boli mnohokrát články o tom, aké dlhé a náročné je mazať milióny malých súborov (1, 2). Ak však vytvoríte pseudosúborový systém na globálnom, bude to trvať niekoľko sekúnd alebo zlomkov. Keď som testoval mazanie podstromov na domácom počítači, odstránilo to 1-96 miliónov uzlov z dvojvrstvového stromu na HDD (nie SSD) za 341 sekundu. Okrem toho hovoríme o odstránení časti stromu a nielen celého súboru s globals.

Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 1
Odstraňovanie podstromov je ďalšou silnou stránkou globálov. Na to nepotrebujete rekurziu. To sa deje neuveriteľne rýchlo.

V našom strome sa to dá urobiť pomocou príkazu zabiť.

Kill ^a("+7926X")

Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 1

Pre lepšie pochopenie toho, aké akcie máme k dispozícii na globálnej úrovni, poskytnem krátku tabuľku.

Základné príkazy a funkcie pre prácu s globálmi v COS

Sada
Nastavenie vetiev na uzol (ak ešte nie je definovaný) a hodnôt uzla

ísť
Kopírovanie podstromu

zabiť
Odstránenie podstromu

ZKill
Odstránenie hodnoty konkrétneho uzla. Podstrom vychádzajúci z uzla sa nedotkne

$Query
Kompletné prejdenie stromu, preniknutie hlboko do stromu

$Objednávka
Prechádzanie vetvami konkrétneho uzla

$Data
Kontrola, či je definovaný uzol

$Increment
Atómové zvyšovanie hodnoty uzla. Aby ste sa vyhli čítaniu a zápisu pre ACID. Nedávno sa odporúčalo zmeniť na $Sequence

Ďakujeme za pozornosť, sme pripravení odpovedať na vaše otázky.

Vylúčenie zodpovednosti: Tento článok a moje komentáre k nemu sú mojím názorom a nesúvisia s oficiálnym stanoviskom InterSystems Corporation.

Predĺženie Globálne sú meče pokladov na ukladanie údajov. Stromy. Časť 2. Dozviete sa, aké typy údajov je možné zobraziť na globáloch a pri akých úlohách poskytujú maximálny úžitok.

Zdroj: hab.com

Pridať komentár