Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 1

Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 1 La veraj datumbazaj glavoj - tutmondaj - estas jam delonge konataj, sed ankoraŭ malmultaj scias kiel uzi ilin efike aŭ tute ne posedas ĉi tiun superarmilon.

Se vi uzas globalojn por solvi tiujn problemojn, pri kiuj ili vere kapablas, vi povas atingi elstarajn rezultojn. Aŭ en produktiveco aŭ en simpligo de la solvo de la problemo (1, 2).

Globals estas speciala maniero stoki kaj prilabori datumojn, tute malsama ol tabeloj en SQL. Ili aperis en 1966 en la lingvo M (UMPS) (evolua evoluo - Cache ObjectScript, ĉi-poste COS) en la medicina datumbazo kaj daŭre estas tie aktive uzata, kaj ankaŭ penetris en iujn aliajn areojn kie fidindeco kaj alta rendimento estas postulataj: financo, komerco, ktp.

Tutmondoj en modernaj DBMSoj subtenas transakciojn, registradon, reproduktadon kaj dispartigon. Tiuj. ili povas esti uzataj por konstrui modernajn, fidindajn, distribuitajn kaj rapidajn sistemojn.

Globals ne limigas vin al la interrilata modelo. Ili donas al vi la liberecon evoluigi datumstrukturojn optimumigitajn por specifaj taskoj. Por multaj aplikoj, inteligenta uzo de tutmondoj povas vere esti sekreta armilo, liverante efikecon pri kiu interrilataj aplikaĵprogramistoj povas nur revi.

Globals kiel maniero stoki datumojn povas esti uzata en multaj modernaj programlingvoj, kaj altnivelaj kaj malaltnivelaj. Tial, en ĉi tiu artikolo mi koncentriĝos specife pri globaloj, kaj ne pri la lingvo el kiu ili iam venis.

2. Kiel globaloj funkcias

Ni unue komprenu kiel globaloj funkcias kaj kiaj estas iliaj fortoj. Globaloj povas esti rigarditaj de malsamaj vidpunktoj. En ĉi tiu parto de la artikolo ni rigardos ilin kiel arbojn. Aŭ kiel hierarkiaj datumstokejoj.

Por diri simple, globalo estas konstanta tabelo. Tabelo, kiu estas aŭtomate konservita al disko.
Estas malfacile imagi ion pli simplan por stoki datumojn. En kodo (en COS/M lingvoj) ĝi diferencas de regula asocia tabelo nur en la simbolo ^ antaŭ la nomo.

Por konservi datumojn en tutmonda, vi ne bezonas lerni la SQL-enketlingvon; la komandoj por labori kun ili estas tre simplaj. Ili povas esti lernitaj en horo.

Ni komencu per la plej simpla ekzemplo. Ununivela arbo kun 2 branĉoj. La ekzemploj estas skribitaj en COS.

Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 1

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



Kiam oni enmetas informojn en tutmondan (Agordu komandon), 3 aferoj aŭtomate okazas:

  1. Konservado de datumoj al disko.
  2. Indeksado. Kio estas en krampoj estas la ŝlosilo (en angla literaturo - "subskribo"), kaj dekstre de egalaj estas la valoro ("noda valoro").
  3. Ordigo. La datumoj estas ordigitaj laŭ ŝlosilo. Estonte, dum trapasado de la tabelo, la unua elemento estos "Sergey Smith", kaj la dua "John Sidorov". Ricevinte liston de uzantoj de la tutmonda, la datumbazo ne malŝparas tempon por ordigo. Cetere, vi povas peti la eligon de ordigita listo, komencante de iu ajn klavo, eĉ neekzistanta (la eligo komenciĝos de la unua reala ŝlosilo, kiu venas post la neekzistanta).

Ĉiuj ĉi tiuj operacioj okazas nekredeble rapide. Sur mia hejma komputilo mi ricevis valorojn ĝis 750 enmetoj/sek en ununura procezo. Sur multkernaj procesoroj la valoroj povas atingi dekoj da milionoj enmetoj/sek.

Kompreneble, la eniga rapido mem ne diras multon. Vi povas, ekzemple, tre rapide skribi informojn en tekstajn dosierojn - tiel laŭ onidiroj Viza prilaborado funkcias. Sed en la kazo de tutmondoj, ni ricevas strukturitan indeksitan stokadon kiel rezulto, kiu povas esti facile kaj rapide labori kun en la estonteco.

Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 1

  • La plej granda forto de globaloj estas la rapideco, je kiu novaj nodoj povas esti enigitaj.
  • Datumoj en la tutmonda ĉiam estas indeksitaj. Trairi ilin, kaj je unu nivelo kaj profunde en la arbon, estas ĉiam rapide.

Ni aldonu kelkajn pliajn branĉojn de la dua kaj tria niveloj al la tutmonda.

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

Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 1

Estas evidente, ke plurnivelaj arboj povas esti konstruitaj surbaze de globaloj. Plie, aliro al iu ajn nodo estas preskaŭ tuja pro aŭtomata indeksado dum enmeto. Kaj je ajna nivelo de la arbo, ĉiuj branĉoj estas ordigitaj per ŝlosilo.

Kiel vi povas vidi, informoj povas esti konservitaj kaj en ŝlosilo kaj valoro. La tuta ŝlosillongo (la sumo de la longoj de ĉiuj indeksoj) povas atingi 511 bajtoj, kaj la valoroj 3.6 MB por Cache. La nombro da niveloj en la arbo (nombro da dimensioj) estas 31.

Alia interesa punkto. Vi povas konstrui arbon sen specifi la valorojn de la nodoj de la supraj niveloj.

Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 1

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

Malplenaj cirkloj estas nodoj, kiuj havas neniun valoron asignita.

Por pli bone kompreni globalojn, ni komparu ilin kun aliaj arboj: ĝardenarboj kaj dosiersistemaj nomarboj.

Ni komparu arbojn sur globaloj kun la plej konataj hierarkiaj strukturoj al ni: kun ordinaraj arboj, kiuj kreskas en ĝardenoj kaj kampoj, same kiel kun dosiersistemoj.

Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 1

Kiel ni vidas en ĝardenaj arboj, folioj kaj fruktoj troviĝas nur ĉe la finoj de la branĉoj.
Dosiersistemoj - informoj estas stokitaj nur ĉe la finoj de branĉoj, kiuj estas plene kvalifikitaj dosiernomoj.

Kaj jen la tutmonda datuma strukturo.

Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 1Diferencoj:

  1. Internaj nodoj: informoj en tutmonda povas esti stokitaj en ĉiu nodo, ne nur ĉe la finoj de branĉoj.
  2. Eksteraj nodoj: La tutmonda devas havi difinitajn valorojn ĉe la finoj de la branĉoj, dum FS kaj ĝardenaj arboj ne havas.



Koncerne internajn nodojn, ni povas diri ke la strukturo de la tutmonda estas superaro de la strukturo de nomarboj en dosiersistemoj kaj ĝardenarboj. Tiuj. pli fleksebla.

Ĝenerale, la tutmonda estas ordigita arbo kun la kapablo stoki datumojn en ĉiu nodo.

Por pli bone kompreni la laboron de globals, imagu kio okazus se la kreintoj de dosiersistemoj uzus aliron similan al globals por stoki informojn?

  1. Forigi ununuran dosieron en dosierujo aŭtomate forigus la dosierujon, same kiel ĉiujn suprajn dosierujojn enhavantajn nur la ĵus forigitan dosierujon.
  2. Ne necesus dosierujoj. Simple estus dosieroj kun subdosieroj kaj dosieroj sen subdosieroj. Se kompare kun ordinara arbo, tiam ĉiu branĉo fariĝus frukto.

    Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 1

  3. Aĵoj kiel README.txt-dosieroj eble ne bezonas. Ĉio, kio necesas diri pri la enhavo de la dosierujo, povus esti skribita en la dosierujon mem. En padospaco, la dosiernomo estas nedistingebla de la dosieruja nomo, do eblis sukcesi nur per dosieroj.
  4. La rapideco de forigo de dosierujoj kun nestitaj subdosierujoj kaj dosieroj pliiĝus draste. Multfoje ĉe Habré aperis artikoloj pri kiom longe kaj malfacile estas forigi milionojn da malgrandaj dosieroj (1, 2). Tamen, se vi faras pseŭdodosiersistemon sur tutmonda, ĝi daŭros sekundojn aŭ frakciojn de tio. Kiam mi provis forigi subarbojn en hejma komputilo, ĝi forigis 1-96 milionojn da nodoj de dunivela arbo sur HDD (ne SSD) en 341 sekundo. Plie, ni parolas pri forigo de parto de la arbo, kaj ne nur de la tuta dosiero kun globaloj.

Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 1
Forigi subarbojn estas alia forta punkto de globaloj. Vi ne bezonas rekursion por ĉi tio. Ĉi tio okazas nekredeble rapide.

En nia arbo ĉi tio povus esti farita per la komando mortigi.

Kill ^a("+7926X")

Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 1

Por pli bona kompreno pri kiaj agoj disponeblas al ni super tutmondaj, mi provizos mallongan tabelon.

Bazaj komandoj kaj funkcioj por labori kun globaloj en COS

fiksita
Agordante branĉojn al nodo (se ankoraŭ ne difinita) kaj nodvaloroj

Kunfandi
Kopiante subarbon

mortigi
Forigante subarbon

ZKill
Forigante la valoron de specifa nodo. La subarbo eliranta el la nodo ne estas tuŝita

$Query
Kompleta trapasado de la arbo, enirante profunde en la arbon

$Mendo
Trairante branĉojn de specifa nodo

$Datumoj
Kontrolante ĉu nodo estas difinita

$Inkremento
Atome pliigante nodan valoron. Por eviti legi kaj skribi, por ACID. Lastatempe oni rekomendis ŝanĝi al $Sekvo

Dankon pro via atento, ni pretas respondi viajn demandojn.

malgarantio: Ĉi tiu artikolo kaj miaj komentoj al ĝi estas mia opinio kaj havas neniun rilaton al la oficiala pozicio de InterSystems Corporation.

Daŭrigo Globals estas trezoraj glavoj por stoki datumojn. Arboj. Parto 2. Vi lernos, kiajn datumojn oni povas montri sur tutmondaj kaj pri kiaj taskoj ili donas la maksimuman profiton.

fonto: www.habr.com

Aldoni komenton