Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 1

Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 1 Déi richteg Datebankschwerter - Globale - si scho laang bekannt, awer nach ëmmer wësse wéineg wéi se se effektiv benotzen oder besëtzen dës Superwaffe guer net.

Wann Dir Globale benotzt fir dës Probleemer ze léisen, déi se wierklech gutt sinn, kënnt Dir aussergewéinlech Resultater erreechen. Entweder an der Produktivitéit oder an der Vereinfachung vun der Léisung vum Problem (1, 2).

Globale sinn e spezielle Wee fir Daten ze späicheren an ze veraarbecht, komplett anescht wéi Tabellen an SQL. Si koumen 1966 an der Sprooch op M(UMPS) (Evolutioun Entwécklung - Cache ObjectScript, heino COS) an der medizinescher Datebank an ass nach ëmmer do aktiv benotzt, an och an e puer aner Beräicher agetriichtert, wou Zouverlässegkeet an héich Leeschtung néideg sinn: Finanzen, Handel, etc.

Globalen a modernen DBMSen ënnerstëtzen Transaktiounen, Logbicher, Replikatioun a Partitionéierung. Déi. si kënne benotzt ginn fir modern, zouverlässeg, verdeelt a séier Systemer ze bauen.

Globale limitéieren Iech net op de relational Modell. Si ginn Iech d'Fräiheet fir Datenstrukturen z'entwéckelen déi fir spezifesch Aufgaben optimiséiert sinn. Fir vill Uwendungen, Smart Notzung vun globalen kann wierklech eng geheim Waff ginn, Leeschtung Leeschtung datt relational Applikatioun Entwéckler nëmmen Dram vun kann.

Globalen als Wee fir Daten ze späicheren kënnen a ville modernen Programméierungssprooche benotzt ginn, souwuel op héijen Niveau wéi och op nidderegen Niveau. Dofir wäert ech an dësem Artikel speziell op Globale konzentréieren, an net op d'Sprooch aus där se eemol koumen.

2. Wéi globalen Aarbecht

Loosst eis als éischt verstoen wéi d'Globaler funktionnéieren a wat hir Stäerkten sinn. Globale kënnen aus verschiddene Siicht gekuckt ginn. An dësem Deel vum Artikel wäerte mir se als Beem kucken. Oder wéi hierarchesch Datelager.

Fir et einfach ze soen, eng global ass eng persistent Array. Eng Array déi automatesch op Disk gespäichert gëtt.
Et ass schwéier eppes méi einfach virzestellen fir Daten ze späicheren. Am Code (an COS/M Sproochen) ënnerscheet et sech vun engem reguläre assoziativen Array nëmmen am Symbol ^ virum Numm.

Fir Daten an enger globaler ze späicheren, musst Dir d'SQL Query Sprooch net léieren; d'Befehle fir mat hinnen ze schaffen si ganz einfach. Si kënnen an enger Stonn geléiert ginn.

Loosst eis mam einfachsten Beispill ufänken. Een-Niveau Bam mat 2 Branchen. D'Beispiller sinn am COS geschriwwen.

Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 1

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



Wann Dir Informatioun an e globalen (Set Kommando) asetzt, geschéien 3 Saachen automatesch:

  1. Späichert Daten op Disk.
  2. Indexéierung. Wat an parentheses ass de Schlëssel (an englesch Literatur - "Abonnement"), a riets vun Gläichgesënnter ass de Wäert ("Node Wäert").
  3. Of. D'Donnéeën sinn no Schlëssel zortéiert. An Zukunft, wann Dir d'Array duerchkreest, wäert dat éischt Element "Sergey Smith" sinn, an dat zweet "John Sidorov". Wann Dir eng Lëscht vu Benotzer aus dem Globale kritt, verschwendt d'Datebank keng Zäit ze sortéieren. Ausserdeem kënnt Dir d'Ausgab vun enger zortéierter Lëscht ufroen, vun all Schlëssel unzefänken, och vun engem net existéierenden (d'Ausgab fänkt vum éischte richtege Schlëssel un, deen nom net-existentem kënnt).

All dës Operatiounen geschéien onheemlech séier. Op mengem Heemcomputer krut ech Wäerter bis zu 750 Inserts / sec an engem eenzege Prozess. Op Multi-Core Prozessoren kënnen d'Wäerter erreechen Zénger vu Millioune inserts / sec.

Natierlech seet d'Insertiounsgeschwindegkeet selwer net vill. Dir kënnt zum Beispill ganz séier Informatioun an Textdateien schreiwen - sou no Rumeuren Visa Veraarbechtung Wierker. Awer am Fall vun de Globale kréie mir als Resultat eng strukturéiert indexéiert Lagerung, mat deem einfach a séier an Zukunft geschafft ka ginn.

Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 1

  • Déi gréisste Stäerkt vun de Globalen ass d'Geschwindegkeet mat där nei Noden agesat kënne ginn.
  • Daten am Globale sinn ëmmer indexéiert. Traverséiere se, souwuel op engem Niveau an déif an de Bam, ass ëmmer séier.

Loosst eis e puer méi Filialen vum zweeten an drëtten Niveau op de globale addéieren.

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

Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 1

Et ass evident datt Multi-Level Beem op Basis vu Globale gebaut kënne ginn. Ausserdeem ass den Zougang zu all Node bal direkt wéinst der automatescher Indexéierung wärend der Insertioun. An op all Niveau vum Bam sinn all Branchen no Schlëssel zortéiert.

Wéi Dir gesitt, kann d'Informatioun souwuel an engem Schlëssel wéi an engem Wäert gespäichert ginn. D'total Schlëssel Längt (d'Zomm vun de Längt vun all Index) kann erreechen 511 byte, an d'Wäerter 3.6 MB fir Cache. D'Zuel vun den Niveauen am Bam (Zuel vun den Dimensiounen) ass 31.

En aneren interessanten Punkt. Dir kënnt e Bam bauen ouni d'Wäerter vun den Noden vun den ieweschten Niveauen ze spezifizéieren.

Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 1

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

Eidel Kreeser sinn Noden déi kee Wäert zougewisen hunn.

Fir d'Globaler besser ze verstoen, loosst eis se mat anere Beem vergläichen: Gaardebeem an Dateiesystem Numm Beem.

Loosst eis Beem op Globale vergläichen mat deene bekanntste hierarchesche Strukturen fir eis: mat gewéinleche Beem, déi a Gäert a Felder wuessen, wéi och mat Dateiesystemer.

Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 1

Wéi mir an de Gaart Beem gesinn, Blieder an Uebst sinn nëmmen um Enn vun de Branchen fonnt.
Dateisystemer - Informatioun gëtt nëmmen um Enn vun de Filialen gespäichert, déi voll qualifizéiert Dateinumm sinn.

An hei ass déi global Datestruktur.

Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 1Ënnerscheeder:

  1. Intern Noden: Informatioun an engem Global kann op all Node gespäichert ginn, net nëmmen um Enn vun de Filialen.
  2. Extern Noden: D'Global muss definéiert Wäerter um Enn vun de Branchen hunn, während FS a Gaart Beem net.



Am Sënn vun intern Wirbelen, kënne mir soen, datt d'Struktur vun der globaler ass e Superset vun der Struktur vun Numm Beem an Fichier Systemer an Gaart Beem. Déi. méi flexibel.

Am Allgemengen, ass de globale bestallt Bam mat der Fäegkeet Daten an all Node ze späicheren.

Fir d'Aarbecht vun de Globale besser ze verstoen, stellt Iech vir wat géif geschéien wann d'Creatoren vun Dateiesystemer eng Approche ähnlech wéi Globale benotze fir Informatioun ze späicheren?

  1. Wann Dir eng eenzeg Datei an engem Verzeichnis läschen, wäert den Verzeechnes automatesch geläscht ginn, souwéi all iwwerlageren Verzeechnes, déi nëmmen deen eenzegen Verzeichnis enthalen, dee just geläscht ass.
  2. Et wier kee Besoin fir Verzeichnungen. Et géifen einfach Dateien mat Ënnerdateien an Dateien ouni Ënnerdateien ginn. Wann Dir mat engem normale Bam vergläicht, da wier all Branche eng Uebst.

    Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 1

  3. Saache wéi README.txt Dateien kënnen net gebraucht ginn. Alles wat iwwer den Inhalt vum Verzeichnis gesot ginn ass, konnt an d'Verzeechnesdatei selwer geschriwwe ginn. Am Weeraum ass den Dateinumm net z'ënnerscheeden vum Verzeichnisnumm, sou datt et méiglech war mat just Dateien ze kommen.
  4. D'Geschwindegkeet fir Verzeichnisser mat nërdlechen Ënnerverzeechnungen a Dateien ze läschen géif dramatesch eropgoen. Vill Mol op Habré goufen et Artikelen iwwer wéi laang a schwéier et ass Millioune vu klengen Dateien ze läschen (1, 2). Wéi och ëmmer, wann Dir e Pseudo-Dateisystem op engem globalen mécht, dauert et Sekonnen oder Fraktiounen dovun. Wann ech getest Subtrees op engem Heemcomputer läschen, huet et 1-96 Millioune Wirbelen aus engem Zwee-Tierbaum op enger HDD (net SSD) an 341 Sekonn geläscht. Ausserdeem schwätze mir vun engem Deel vum Bam ze läschen, an net nëmmen déi ganz Datei mat Globalen.

Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 1
Ënnerbeem ewechhuelen ass e weidere staarke Punkt vu Globalen. Dir braucht keng Rekursioun fir dëst. Dëst geschitt onheemlech séier.

An eisem Bam kéint dat mam Kommando gemaach ginn Kill.

Kill ^a("+7926X")

Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 1

Fir e bessert Verständnis vu wéi eng Handlungen eis iwwer Globale verfügbar sinn, ginn ech e kuerzen Dësch.

Basis Kommandoen a Funktiounen fir mat Globalen am COS ze schaffen

Set
Setzt Branchen op en Node (wann nach net definéiert) an Node Wäerter

Merge
Kopie vun engem Subtree

Kill
E Subtree erofhuelen

ZKill
De Wäert vun engem spezifesche Node läschen. Den Ënnerbaum, deen aus dem Node erauskënnt, gëtt net beréiert

$Query
Komplett Traversal vum Bam, geet déif an de Bam

$Bestellung
Traverséiere Branchen vun engem spezifesche Node

$Daten
Iwwerpréift ob en Node definéiert ass

$ eropgoen
Atomesch Erhéijung vun engem Node Wäert. Ze vermeiden maachen liesen a schreift, fir ACID. Viru kuerzem ass et recommandéiert ze änneren $Sequenz

Merci fir Är Opmierksamkeet, mir si prett Är Froen ze beäntweren.

Verzichterklärung: Dësen Artikel a meng Kommentaren dozou sinn meng Meenung an hu keng Relatioun zu der offizieller Positioun vun InterSystems Corporation.

Fortsetzung Globale si Schatzschwerter fir Daten ze späicheren. Beem. Deel 2. Dir léiert wéi eng Aarte vun Daten op Globalen ugewise kënne ginn an op wéi eng Aufgaben se de maximale Virdeel ubidden.

Source: will.com

Setzt e Commentaire