Globali su mačevi za pohranjivanje podataka. Drveće. 1. dio

Globali su mačevi za pohranjivanje podataka. Drveće. 1. dio Pravi mačevi baze podataka - globali - odavno su poznati, no još uvijek ih malo tko zna učinkovito koristiti ili uopće ne posjeduje ovo superoružje.

Ako koristite globale u rješavanju onih problema u kojima su oni stvarno dobri, možete postići izvanredne rezultate. Bilo u produktivnosti ili u pojednostavljenju rješenja problema (1, 2).

Globali su poseban način pohranjivanja i obrade podataka, potpuno drugačiji od tablica u SQL-u. Pojavile su se 1966. u jeziku ZAUŠNJACI) (evolucijski razvoj - Predmemorirajte ObjectScript, u daljnjem tekstu COS) u medicinskoj bazi podataka i još uvijek je tamo aktivno korišten, a prodrli su i u neka druga područja gdje se zahtijevaju pouzdanost i visoke performanse: financije, trgovina itd.

Globali u modernim DBMS-ovima podržavaju transakcije, zapisivanje, replikaciju i particioniranje. Oni. mogu se koristiti za izgradnju modernih, pouzdanih, distribuiranih i brzih sustava.

Globali vas ne ograničavaju na relacijski model. Daju vam slobodu da razvijete strukture podataka koje su optimizirane za specifične zadatke. Za mnoge aplikacije, pametno korištenje globala doista može biti tajno oružje, pružajući performanse o kojima razvijači relacijskih aplikacija mogu samo sanjati.

Globali kao način pohranjivanja podataka mogu se koristiti u mnogim modernim programskim jezicima, kako na visokoj tako i na niskoj razini. Stoga ću se u ovom članku fokusirati upravo na globale, a ne na jezik iz kojeg su nekada dolazile.

2. Kako funkcioniraju globali

Prvo shvatimo kako globali funkcioniraju i koje su njihove prednosti. Na globale se može gledati s različitih stajališta. U ovom dijelu članka promatrat ćemo ih kao stabla. Ili poput hijerarhijskih skladišta podataka.

Pojednostavljeno rečeno, global je trajni niz. Niz koji se automatski sprema na disk.
Teško je zamisliti nešto jednostavnije za pohranu podataka. U kodu (u COS/M jezicima) razlikuje se od običnog asocijativnog niza samo u simbolu ^ prije imena.

Za spremanje podataka u globalu ne morate učiti jezik SQL upita, naredbe za rad s njima vrlo su jednostavne. Mogu se naučiti za sat vremena.

Počnimo s najjednostavnijim primjerom. Drvo na jednoj razini s 2 grane. Primjeri su napisani u COS-u.

Globali su mačevi za pohranjivanje podataka. Drveće. 1. dio

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



Prilikom umetanja informacija u global (naredba Set), automatski se događaju 3 stvari:

  1. Spremanje podataka na disk.
  2. Indeksiranje. Ono što je u zagradama je ključ (u engleskoj literaturi - “subscript”), a desno od jednakosti je vrijednost (“node value”).
  3. Sortiranje. Podaci su poredani po ključu. Ubuduće, pri prelasku niza, prvi element će biti "Sergey Smith", a drugi "John Sidorov". Kada prima popis korisnika iz globala, baza podataka ne gubi vrijeme na sortiranje. Štoviše, možete zatražiti izlaz sortirane liste, počevši od bilo kojeg ključa, čak i nepostojećeg (izlaz će započeti od prvog stvarnog ključa, koji dolazi nakon nepostojećeg).

Sve te operacije odvijaju se nevjerojatno brzo. Na svom kućnom računalu dobivao sam vrijednosti do 750 000 umetanja/s u jednom procesu. Na višejezgrenim procesorima vrijednosti mogu doseći desetke milijuna umetaka/sek.

Naravno, sama brzina umetanja ne govori puno. Možete, na primjer, vrlo brzo zapisati informacije u tekstualne datoteke - ovako šuškalo se Radovi na obradi viza. Ali u slučaju globala, kao rezultat dobivamo strukturiranu indeksiranu pohranu s kojom se u budućnosti može lako i brzo raditi.

Globali su mačevi za pohranjivanje podataka. Drveće. 1. dio

  • Najveća snaga globala je brzina kojom se mogu umetnuti novi čvorovi.
  • Podaci u globalu uvijek su indeksirani. Prelaženje njima, i na jednoj razini i duboko u stablo, uvijek je brzo.

Dodajmo još nekoliko grana druge i treće razine u global.

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

Globali su mačevi za pohranjivanje podataka. Drveće. 1. dio

Očito je da se višerazinska stabla mogu graditi na temelju globala. Štoviše, pristup bilo kojem čvoru je gotovo trenutan zbog automatskog indeksiranja tijekom umetanja. I na bilo kojoj razini stabla, sve su grane poredane po ključu.

Kao što vidite, informacije se mogu pohraniti iu ključu iu vrijednosti. Ukupna duljina ključa (zbroj duljina svih indeksa) može doseći 511 bajtova, i vrijednosti 3.6 MB za Cache. Broj razina u stablu (broj dimenzija) je 31.

Još jedna zanimljiva točka. Možete izgraditi stablo bez navođenja vrijednosti čvorova gornjih razina.

Globali su mačevi za pohranjivanje podataka. Drveće. 1. dio

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

Prazni krugovi su čvorovi kojima nije dodijeljena vrijednost.

Kako bismo bolje razumjeli globale, usporedimo ih s drugim stablima: vrtnim stablima i stablima naziva datotečnog sustava.

Usporedimo stabla na globalima s nama najpoznatijim hijerarhijskim strukturama: s običnim stablima koja rastu u vrtovima i poljima, kao i sa sustavima datoteka.

Globali su mačevi za pohranjivanje podataka. Drveće. 1. dio

Kao što vidimo kod vrtnog drveća, lišće i plodovi nalaze se samo na krajevima grana.
Datotečni sustavi - informacije se pohranjuju samo na krajevima grana, što su potpuno kvalificirani nazivi datoteka.

I ovdje je globalna struktura podataka.

Globali su mačevi za pohranjivanje podataka. Drveće. 1. diorazlike:

  1. Unutarnji čvorovi: informacije u globalu mogu biti pohranjene u svakom čvoru, a ne samo na krajevima grana.
  2. Vanjski čvorovi: Global mora imati definirane vrijednosti na krajevima grana, dok FS i vrtna stabla nemaju.



Što se tiče internih čvorova, možemo reći da je struktura globala nadskup strukture stabala imena u sustavima datoteka i vrtnih stabala. Oni. fleksibilniji.

Općenito, globalno je uređeno stablo s mogućnošću pohranjivanja podataka u svakom čvoru.

Da bismo bolje razumjeli rad globala, zamislimo što bi se dogodilo da kreatori datotečnih sustava koriste pristup sličan globalima za pohranu informacija?

  1. Brisanje jedne datoteke u direktoriju automatski bi izbrisalo direktorij, kao i sve nadređene direktorije koji sadrže samo jedan upravo izbrisani direktorij.
  2. Ne bi bilo potrebe za imenicima. Jednostavno bi postojale datoteke s poddatotekama i datoteke bez poddatoteka. Ako se usporedi s običnim stablom, onda bi svaka grana postala plod.

    Globali su mačevi za pohranjivanje podataka. Drveće. 1. dio

  3. Stvari poput datoteka README.txt možda neće biti potrebne. Sve što je trebalo reći o sadržaju imenika moglo se upisati u samu datoteku imenika. U prostoru staze, naziv datoteke se ne razlikuje od naziva direktorija, tako da je bilo moguće proći samo s datotekama.
  4. Brzina brisanja direktorija s ugniježđenim poddirektorijima i datotekama dramatično bi se povećala. Mnogo je puta na Habréu bilo članaka o tome koliko je dugo i teško brisati milijune malih datoteka (1, 2). Međutim, ako napravite pseudo-datotečni sustav na globalu, to će trajati nekoliko sekundi ili djeliće. Kad sam testirao brisanje podstabala na kućnom računalu, uklonilo je 1-96 milijuna čvorova iz dvoslojnog stabla na HDD (ne SSD) u 341 sekundi. Štoviše, govorimo o brisanju dijela stabla, a ne samo cijele datoteke s globalima.

Globali su mačevi za pohranjivanje podataka. Drveće. 1. dio
Uklanjanje podstabala je još jedna jaka strana globala. Za ovo vam ne treba rekurzija. To se događa nevjerojatno brzo.

U našem stablu to se može učiniti pomoću naredbe Ubiti.

Kill ^a("+7926X")

Globali su mačevi za pohranjivanje podataka. Drveće. 1. dio

Za bolje razumijevanje koje su nam radnje dostupne preko globala, dat ću kratku tablicu.

Osnovne naredbe i funkcije za rad s globalima u COS-u

Postaviti
Postavljanje grana na čvor (ako još nije definirano) i vrijednosti čvora

Spojiti
Kopiranje podstabla

Ubiti
Uklanjanje podstabla

ZUbiti
Brisanje vrijednosti određenog čvora. Podstablo koje izlazi iz čvora se ne dira

$Upit
Potpuni obilazak stabla, ulazeći duboko u stablo

$Narudžba
Prelaženje grana određenog čvora

$Data
Provjera je li čvor definiran

$Prirast
Atomsko povećanje vrijednosti čvora. Kako bi se izbjeglo čitanje i pisanje, za ACID. Nedavno je preporučeno promijeniti u $Sequence

Hvala vam na pažnji, spremni smo odgovoriti na vaša pitanja.

Izjava o odricanju od odgovornosti: Ovaj članak i moji komentari na njega moje su mišljenje i nemaju nikakve veze sa službenim stavom InterSystems Corporation.

Nastavak Globali su mačevi za pohranjivanje podataka. Drveće. 2. dio. Naučit ćete koje se vrste podataka mogu prikazati na globalima i na kojim zadacima pružaju maksimalnu korist.

Izvor: www.habr.com

Dodajte komentar