Globály — meče-kladivce pro skladování dat. Stromy. Část 1

Globály — meče-kladivce pro skladování dat. Stromy. Část 1 Opravdové databázové globály — zbraně s hrozivou mocí — jsou již dlouho známé, ale stále je jen málo těch, kteří je dokážou efektivně používat nebo tento superzbraň vůbec ovládají.

Pokud globály použijete k řešení úkolů, v nichž vynikají, můžete dosáhnout vynikajících výsledků. Ať už v oblasti výkonu, nebo při zjednodušení řešení úkolu (1, 2).

Globály jsou speciální způsob ukládání a zpracování dat, zcela odlišný od tabulek v SQL. Objevily se v roce 1966 v jazyce M(UMPS) (evoluční rozvoj — Caché ObjectScript, dále COS) v lékařských databázích a dodnes se tam aktivně používají, a také pronikly do některých dalších oblastí, kde je vyžadována spolehlivost a vysoký výkon: finance, obchodování atd.

Globály v moderních DBMS podporují transakce, protokolování, replikaci, partitioning. Tedy na nich lze budovat moderní, spolehlivé, distribuované a rychlé systémy.

Globály vás neomezuje hranicemi relačního modelu. Poskytují svobodu pro vývoj datových struktur optimalizovaných pro konkrétní úkoly. V mnoha aplikacích může rozumné využití globálů představovat skutečně tajnou zbraň, která zajišťuje výkon, o němž mohou vývojáři relačních aplikací pouze snít.

Globály jako způsob ukládání dat lze použít v mnoha moderních programovacích jazycích, jak vysoce úrovňových, tak nízkoúrovňových. Proto se v tomto článku zaměřím právě na globály, nikoliv na jazyk, ze kterého se kdysi vyvinuly.

2. Jak fungují globály

Pojďme si nejprve objasnit, jak globály fungují, a v čem spočívají jejich silné stránky. Na globály lze pohlížet z různých úhlů pohledu. V této části článku se na ně zaměříme jako na stromy. Nebo jako na hierarchická úložiště dat.

Zjednodušeně řečeno, globál je trvalé pole. Pole, které se automaticky ukládá na disk.
Těžko si představit něco jednoduššího pro ukládání dat. V kódu (v jazycích COS/M) se od běžného asociativního pole liší pouze znakem ^ před názvem.

Pro ukládání dat do globálu není nutné studovat jazyk SQL, příkazy pro práci s nimi jsou velmi jednoduché. Lze je naučit za hodinu.

Začněme tím nejjednodušším příkladem. Jednoduché jednoúrovňové strom s 2 větvemi. Příklady jsou napsány v COS.

Globály — meče-kladivce pro skladování dat. Stromy. Část 1

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



Při vložení informací do globál (příkaz Set) se automaticky dějí 3 věci:

  1. Uložení dat na disk.
  2. Indexace. To, co je v závorkách, je klíč (v anglické literatuře - "subscript"), a napravo od rovná se je hodnota ("node value").
  3. Třídění. Data jsou tříděna podle klíče. Při procházení polem se prvním prvkem stane „Sergey Smith“ a druhým „John Sidorov“. Při získávání seznamu uživatelů z globál databáze neztrácí čas tříděním. Navíc je možné požádat o výstup seřazeného seznamu, počínaje jakýmkoli klíčem, dokonce i neexistujícím (výstup začne prvním skutečným klíčem, který následuje po neexistujícím).

Všechny tyto operace probíhají neuvěřitelně rychle. Na domácím počítači jsem dosahoval hodnot až 750 000 vložení/s v jednom procesu. Na vícejádrových procesorech mohou hodnoty dosahovat desítek milionů vloženích/s.

Samozřejmě, samotná rychlost vložení toho příliš neříká. Můžete například velmi rychle zapisovat informace do textových souborů – tak podle zpráv funguje zpracování Visa. Ale v případě globálů dostáváme na výstupu strukturované indexované úložiště, se kterým je možné později jednoduše a rychle pracovat.

Globály — meče-kladivce pro skladování dat. Stromy. Část 1

  • Nejsilnější stránkou globálů je rychlost vkládání nových uzlů.
  • Data v globálu jsou vždy indexována. Procházení jak na jedné úrovni, tak do hloubky stromu je vždy rychlé.

Přidáme do globálu ještě několik větví druhé a třetí úrovně.

Set ^a("+7926X", "city") = "Moskva"
Set ^a("+7926X", "city", "street") = "Req Square"
Set ^a("+7926X", "age") = 25
Set ^a("+7916Y", "city") = "Londýn"
Set ^a("+7916Y", "city", "street") = "Baker Street"
Set ^a("+7916Y", "age") = 36

Globály — meče-kladivce pro skladování dat. Stromy. Část 1

Je zřejmé, že na základě globálů lze budovat víceúrovňové stromy. Přístup k jakémukoli uzlu je prakticky okamžitý díky autoindexování při vkládání. A na jakékoliv úrovni stromu jsou všechny větve seřazeny podle klíče.

Jak je vidět, informace lze uchovávat jak v klíči, tak v hodnotě. Celková délka klíče (součet délek všech indexů) může dosahovat 511 bajtů, a hodnoty 3.6 MB pro Caché. Počet úrovní ve stromě (počet měření) – 31.

Ještě zajímavý moment. Lze postavit strom, aniž byste zadávali hodnoty uzlů horních úrovní.

Globály — meče-kladivce pro skladování dat. Stromy. Část 1

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

Prázdné uzly jsou uzly, kterým nebyla přiřazena hodnota.

Abychom lépe porozuměli globálům, porovnejme je s jinými stromy: se zahradními a se stromy názvů souborových systémů.

Porovnejme stromy v globálech s nejlépe známými hierarchickými strukturami: s běžnými stromy, které rostou v zahradách a na polích, a také se souborovými systémy.

Globály — meče-kladivce pro skladování dat. Stromy. Část 1

Jak vidíme u zahradních stromů, listy a plody se nacházejí pouze na koncích větví.
U souborových systémů se informace uchovávají pouze na koncích větví, kterými jsou kompletní názvy souborů.

A tady je struktura dat globálu.

Globály — meče-kladivce pro skladování dat. Stromy. Část 1Rozdíly:

  1. Vnitřní uzly: Informace v globálu může být uchovávána v každém uzlu, nikoli pouze na koncích větví.
  2. Vnější uzly: Globál musí mít určena hodnoty na koncích větví, u stromů FS a zahradních to není nutné.



Pokud jde o některé vnitřní uzly, lze říci, že struktura globálu je nadmnožinou struktury stromů názvů ve файловых системах a zahradních stromech. Tedy je flexibilnější.

Obecně globál představuje uspořádaný strom s možností uchování dat v každém uzlu.

Abychom lépe pochopili fungování globálů, představme si, co by se stalo, kdyby tvůrci souborových systémů používali k uchovávání informací přístup podobný globálům?

  1. Při odstranění jediného souboru v adresáři by se automaticky odstranil adresář i všechny nadřazené adresáře, které obsahovaly pouze právě odstraněný adresář.
  2. Potřeba adresářů by vymizela. Prostě by existovaly soubory s podsoubory a soubory bez podsouborů. Pokud bychom to porovnali s běžným stromem, každá větev by se stala plodem.

    Globály — meče-kladivce pro skladování dat. Stromy. Část 1

  3. Takové věci jako soubory README.txt by pravděpodobně vymizely. Všechno, co bychom potřebovali říci o obsahu adresáře, bychom mohli zapsat do samotného souboru adresáře. V prostoru cest není název souboru od názvu adresáře k nerozeznání, a proto bychom se mohli obejít pouze soubory.
  4. Rychlost odstraňování adresářů s vloženými podsložkami a soubory by se prudce zvýšila. Mnohokrát se na Habru objevily články o tom, jak dlouho a obtížně se odstraňují miliony drobných souborů (1, 2). Pokud vytvoříte pseudo-soubrovou strukturu v globálním měřítku, zabere to sekundy nebo jejich zlomky. Když jsem testoval mazání podstromů na domácím počítači, během jedné sekundy bylo odstraněno 96-341 milionů uzlů ze dvouúrovňového stromu na HDD (ne SSD). Řeč je o mazání části stromu, nikoli o pouhém odstranění celého souboru s globály.

Globály — meče-kladivce pro skladování dat. Stromy. Část 1
Mazání podstromů je dalším silným bodem globálů. Nepotřebuje k tomu rekurzi. To probíhá neuvěřitelně rychle.

V našem stromě by to bylo možné provést příkazem Kill.

Kill ^a("+7926X")

Globály — meče-kladivce pro skladování dat. Stromy. Část 1

Pro lepší pochopení toho, jaké akce můžeme provádět s globály, uvádím stručnou tabulku.

Hlavní příkazy a funkce pro práci s globály v COS

Set
Nastavení větví až do uzlu (pokud nejsou dosud definovány) a hodnoty uzlu

Merge
Kopírování podstromu

Kill
Mazání podstromu

ZKill
Mazání hodnoty konkrétního uzlu. Podstrom vycházející z uzlu se nedotýká

$Query
Úplný průchod stromem s vhledem do hloubky

$Order
Průchod větvemi konkrétního uzlu

$Data
Kontrola zda je uzel definován

$Increment
Atomové inkrementování hodnoty uzlu. Abychom se vyhnuli čtení a zápisu, pro ACID. V poslední době se doporučuje měnit na $Sequence

Děkujeme za pozornost, jsme připraveni odpovědět na vaše dotazy.

Poznámka: Tento článek a mé komentáře k němu představují můj názor a nemají nic společného s oficiálním postojem společnosti InterSystems.

Pokračování Globály – mečovací nástroje pro ukládání dat. Stromy. Část 2. Zjistíte, jaké typy dat lze zobrazi na globálech a na jakých úlohách poskytují maximální výhodu.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster