Die sogenannten globalen Datenbank-Schatten sind seit langem bekannt, doch nur wenige wissen, wie man sie effektiv einsetzt oder haben dieses Superwerkzeug nicht im Griff.
Wenn Sie die globalen Datenbanken fĂŒr die Aufgaben nutzen, bei denen sie wirklich glĂ€nzen, können Sie auĂergewöhnliche Ergebnisse erzielen â sei es in der Leistung oder in der Vereinfachung der Lösungsfindung., ).
Globale Datenbanken sind eine spezielle Art der Speicherung und Verarbeitung von Daten, die sich grundlegend von SQL-Tabellen unterscheidet. Sie wurden 1966 in der Programmiersprache M(UMPS) entwickelt. DarĂŒber hinaus haben sie in einigen anderen Bereichen, in denen ZuverlĂ€ssigkeit und hohe Leistung erforderlich sind, wie z. B. Finanzwesen und Handel, FuĂ gefasst. , spĂ€ter COS) in medizinischen Datenbanken und werden dort immer noch Moderne relationale Datenbanksysteme unterstĂŒtzen mit globalen Datenbanken Transaktionen, Logging, Replikation und Partitionierung. Sie können zur Erstellung moderner, zuverlĂ€ssiger, verteilter und schneller Systeme verwendet werden.
Globale Variablen in modernen DBMS unterstĂŒtzen Transaktionen, Protokollierung, Replikation und Partitionierung. Das heiĂt, sie können moderne, zuverlĂ€ssige, verteilte und schnelle Systeme bilden.
Globale schrĂ€nken Sie nicht auf das relationale Modell ein. Sie bieten die Freiheit zur Entwicklung von Datensstrukturen, die auf spezifische Aufgaben optimiert sind. FĂŒr viele Anwendungen kann der sinnvolle Einsatz von Globals tatsĂ€chlich eine geheimnisvolle Waffe sein, die eine Leistung ermöglicht, von der Entwickler relationaler Anwendungen nur trĂ€umen können.
Globals können als Methode zur Datenspeicherung in vielen modernen Programmiersprachen eingesetzt werden, sowohl in höheren als auch in niedrigeren. Daher werde ich in diesem Artikel speziell auf Globals eingehen und nicht auf die Sprache, aus der sie ursprĂŒnglich stammen.
2. Wie Globals funktionieren
Lassen Sie uns zunÀchst klÀren, wie Globals funktionieren und wo ihre StÀrken liegen. Globals können aus verschiedenen Perspektiven betrachtet werden. In diesem Teil des Artikels werden wir sie als BÀume betrachten. Oder als hierarchische Datenspeicher.
Vereinfachend gesagt, ist ein Global ein persistentes Array. Ein Array, das automatisch auf der Festplatte gespeichert wird.
Es ist kaum vorstellbar, dass es eine einfachere Methode zur Datenspeicherung gibt. Im Code (in den Sprachen COS/M) unterscheidet es sich lediglich durch ein Zeichen ^ vor dem Namen.
Um Daten im Globalen zu speichern, ist es nicht notwendig, SQL zu lernen; die Befehle dazu sind sehr einfach. Man kann sie in einer Stunde lernen.
Lassen Sie uns mit dem einfachsten Beispiel beginnen. Eine einlagige Struktur mit 2 Zweigen. Die Beispiele sind in COS geschrieben.

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"
Beim EinfĂŒgen von Informationen in das Globale (Befehl Set) passieren automatisch 3 Dinge:
- Die Daten werden auf der Festplatte gespeichert.
- Indizierung. Das, was in Klammern steht, fungiert als SchlĂŒssel (in englischer Literatur - 'subscript'), und rechts vom Gleichheitszeichen steht der Wert ('node value').
- Sortierung. Die Daten werden nach dem SchlĂŒssel sortiert. Bei der Durchquerung des Arrays wird das erste Element âSergey Smithâ und das zweite âJohn Sidorovâ sein. Beim Abrufen der Benutzerliste aus dem Globalen verbringt die Datenbank keine Zeit mit der Sortierung. Zudem kann man die Ausgabe einer sortierten Liste anfordern, beginnend mit einem beliebigen SchlĂŒssel, sogar mit einem nicht existierenden (die Ausgabe beginnt mit dem ersten tatsĂ€chlichen SchlĂŒssel, der nach dem nicht existierenden folgt).
All diese VorgĂ€nge erfolgen unglaublich schnell. Auf meinem Heimcomputer erreichte ich Werte von bis zu 750.000 EinfĂŒgungen/Sekunde in einem einzelnen Prozess. Auf Multicore-Prozessoren können die Werte sogar EinfĂŒgungen/Sekunde erreichen.
NatĂŒrlich sagt die EinfĂŒgungsrate allein wenig aus. Man kann beispielsweise Informationen schnell in Textdateien schreiben â so funktioniert die Verarbeitung bei Visa. Doch im Fall von Globalen erhalten wir am Ende ein strukturiertes, indiziertes Speicherformat, mit dem man anschlieĂend einfach und schnell umgehen kann.

- Die gröĂte StĂ€rke von Globalen ist die Geschwindigkeit, mit der neue Knoten eingefĂŒgt werden.
- Die Daten in Globalen sind immer indiziert. Ihr Zugriff erfolgt sowohl auf der gleichen Ebene als auch in die Tiefe des Baums immer schnell.
FĂŒgen wir dem Globalen noch ein paar Zweige der zweiten und dritten Ebene hinzu.
Set ^a("+7926X", "city") = "Moskau"
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 
Es ist offensichtlich, dass man auf der Basis von Globals mehrstufige BĂ€ume erstellen kann. Der Zugriff auf jeden Knoten erfolgt nahezu sofort durch die automatische Indizierung beim EinfĂŒgen. Und auf jeder Ebene des Baumes sind alle Verzweigungen nach SchlĂŒssel sortiert.
Wie zu sehen ist, können Informationen sowohl im SchlĂŒssel als auch im Wert gespeichert werden. Die GesamtlĂ€nge des SchlĂŒssels (die Summe der LĂ€ngen aller Indizes) kann bis zu , und die Werte fĂŒr CachĂ© betragen. Die Anzahl der Stufen im Baum (Anzahl der Dimensionen) betrĂ€gt 31.
Ein weiterer interessanter Punkt. Man kann einen Baum erstellen, ohne die Werte der Knoten der oberen Ebenen festzulegen.

Set ^b("a", "b", "c", "d") = 1
Set ^b("a", "b", "c", "e") = 2
Set ^b("a", "b", "f", "g") = 3 Leere Kreise sind Knoten, denen kein Wert zugewiesen wurde.
Um Globals besser zu verstehen, vergleichen wir sie mit anderen BÀumen: mit GartenbÀumen und mit BÀumen der Dateisysteme.
Lassen Sie uns die BĂ€ume auf Globals mit den uns am vertrautesten hierarchischen Strukturen vergleichen: mit normalen BĂ€umen, die in GĂ€rten und Feldern wachsen, sowie mit Dateisystemen.

Wie wir sehen, befinden sich bei GartenbĂ€umen die BlĂ€tter und FrĂŒchte nur an den Enden der Ăste.
In Dateisystemen wird die Information nur an den Enden der Ăste gespeichert, die die vollstĂ€ndigen Namen der Dateien sind.
Hier ist die Datenstruktur des Globals.
Unterschiede:
- Innere Knoten: Informationen im Global können in jedem Knoten gespeichert werden, nicht nur an den Enden der Ăste.
- ĂuĂere Knoten: Im Global mĂŒssen die Werte an den Enden der Ăste definiert sein, in DateisystembĂ€umen und GartenbĂ€umen jedoch nicht.
Was die inneren Knoten betrifft, so kann man sagen, dass die Struktur des Globals ein Ăbermengen der Struktur von NamensbĂ€umen in Dateisystemen und GartenbĂ€umen ist. Das heiĂt, sie ist flexibler.
Im Allgemeinen stellt das Global dar einen geordneten Baum mit der Möglichkeit, Daten in jedem Knoten zu speichern..
Um das Funktionieren von Globals besser zu verstehen, stellen wir uns vor, was gewesen wÀre, wenn die Entwickler von Dateisystemen einen Ansatz Àhnlich dem der Globals zur Speicherung von Informationen verwendet hÀtten.
- Wenn eine einzige Datei im Verzeichnis gelöscht wird, wĂŒrde automatisch das Verzeichnis sowie alle ĂŒbergeordneten Verzeichnisse, die nur dieses kĂŒrzlich gelöschte Verzeichnis enthalten, gelöscht.
- Die Notwendigkeit von Verzeichnissen wĂ€re entfallen. Es gĂ€be einfach Dateien mit Unterdateien und Dateien ohne Unterdateien. Verglichen mit einem normalen Baum wĂŒrde jeder Ast zur Frucht werden.

- Dateien wie README.txt könnten möglicherweise ĂŒberflĂŒssig werden. Alles, was ĂŒber den Inhalt eines Verzeichnisses zu sagen wĂ€re, könnte direkt in die Verzeichnisdatei geschrieben werden. Im Pfadnamen ist der Dateiname vom Verzeichnisnamen indistinguierbar, weshalb man sich auf Dateien allein beschrĂ€nken könnte.
- Die Geschwindigkeit beim Löschen von Verzeichnissen mit Unterverzeichnissen und Dateien wĂŒrde erheblich steigen. Oft gab es auf HabrĂ© Artikel darĂŒber, wie lange und mĂŒhsam es ist, Millionen von kleinen Dateien zu löschen (, ). Wenn man jedoch ein Pseudodateisystem auf Globalen erstellt, wĂŒrde es Sekunden oder sogar Bruchteile davon in Anspruch nehmen. Bei meinem Test zum Löschen von TeilbĂ€umen auf meinem Heimcomputer habe ich in 1 Sekunde zwischen 96-341 Millionen Knoten aus einem zweistufigen Baum auf einer HDD (nicht SSD) gelöscht. Hierbei handelt es sich um das Löschen eines Teils des Baums und nicht einfach um das Löschen einer gesamten Datei mit Globals.

Das Löschen von TeilbĂ€umen ist eine weitere StĂ€rke von Globals. DafĂŒr ist keine Rekursion erforderlich. Es geschieht unglaublich schnell.
In unserem Baum könnte dies mit dem Befehl erfolgen Beenden.
Kill ^a("+7926X") 
Um besser zu verstehen, welche Aktionen uns mit Globals zur VerfĂŒgung stehen, gebe ich eine kurze Ăbersicht.
Wichtige Befehle und Funktionen zur Arbeit mit Globals in COS
Zweige bis zum Knoten einrichten (falls noch nicht bestimmt) und Knoteneigenschaft festlegen
Unterbaum kopieren
Unterbaum löschen
Wert eines bestimmten Knotens löschen. Der Unterbaum, der aus dem Knoten herausgeht, bleibt unberĂŒhrt
VollstÀndige Durchquerung des Baumes mit Tiefensuche
Ăste eines bestimmten Knotens durchlaufen
ĂberprĂŒfung, ob der Knoten definiert ist
Atomare Inkrementierung des Knotenwerts. Um Lese- und SchreibvorgĂ€nge zu vermeiden, fĂŒr ACID. In letzter Zeit wird empfohlen, auf
Danke fĂŒr Ihre Aufmerksamkeit, wir stehen Ihnen fĂŒr Fragen zur VerfĂŒgung.
Haftungsausschluss: Dieser Artikel und meine Kommentare dazu spiegeln meine persönliche Meinung wider und stehen nicht im Zusammenhang mit der offiziellen Position der InterSystems Corporation.
Fortsetzung . Sie erfahren, welche Datentypen auf Globals angezeigt werden können und bei welchen Aufgaben sie die gröĂten Vorteile bieten.
Quelle: habr.com

