Globals sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 1

Globals sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 1 Die wahren Datenbankschwerter – Globals – sind seit langem bekannt, aber noch immer wissen nur wenige, wie man sie effektiv einsetzt, oder besitzen diese Superwaffe überhaupt nicht.

Wenn Sie Globals bei der Lösung der Probleme einsetzen, in denen sie wirklich gut sind, können Sie hervorragende Ergebnisse erzielen. Entweder in der Produktivität oder in der Vereinfachung der Lösung des Problems (1, 2).

Globals sind eine besondere Art der Datenspeicherung und -verarbeitung, die sich völlig von Tabellen in SQL unterscheidet. Sie erschienen 1966 in der Sprache MUMPS) (Evolutionäre entwicklung - Caché-ObjectScript, im Folgenden COS) in der medizinischen Datenbank gespeichert und ist dort noch vorhanden aktiv genutztund drang auch in einige andere Bereiche vor, in denen Zuverlässigkeit und hohe Leistung erforderlich sind: Finanzen, Handel usw.

Globals in modernen DBMS unterstützen Transaktionen, Protokollierung, Replikation und Partitionierung. Diese. Mit ihnen lassen sich moderne, zuverlässige, verteilte und schnelle Systeme aufbauen.

Globale beschränken Sie nicht auf das relationale Modell. Sie geben Ihnen die Freiheit, Datenstrukturen zu entwickeln, die für bestimmte Aufgaben optimiert sind. Für viele Anwendungen kann der intelligente Einsatz von Globals tatsächlich eine Geheimwaffe sein und eine Leistung liefern, von der Entwickler relationaler Anwendungen nur träumen können.

Globals als Möglichkeit zum Speichern von Daten können in vielen modernen Programmiersprachen sowohl auf hoher als auch auf niedriger Ebene verwendet werden. Deshalb werde ich mich in diesem Artikel speziell auf Globals konzentrieren und nicht auf die Sprache, aus der sie einst stammten.

2. Wie Globals funktionieren

Lassen Sie uns zunächst verstehen, wie Globals funktionieren und welche Stärken sie haben. Globals können aus verschiedenen Blickwinkeln betrachtet werden. In diesem Teil des Artikels werden wir sie als Bäume betrachten. Oder wie hierarchische Data Warehouses.

Einfach ausgedrückt ist ein Global ein persistentes Array. Ein Array, das automatisch auf der Festplatte gespeichert wird.
Etwas einfacheres zum Speichern von Daten kann man sich kaum vorstellen. Im Code (in COS/M-Sprachen) unterscheidet es sich von einem regulären assoziativen Array nur im Symbol ^ vor dem Namen.

Um Daten global zu speichern, müssen Sie die SQL-Abfragesprache nicht erlernen; die Befehle für die Arbeit mit ihnen sind sehr einfach. Sie können in einer Stunde erlernt werden.

Beginnen wir mit dem einfachsten Beispiel. Einstöckiger Baum mit 2 Ästen. Die Beispiele sind in COS geschrieben.

Globals sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 1

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



Beim Einfügen von Informationen in einen globalen Befehl (Set-Befehl) passieren automatisch drei Dinge:

  1. Daten auf Festplatte speichern.
  2. Indizierung. Was in Klammern steht, ist der Schlüssel (in der englischen Literatur „subscript“), und rechts von „equals“ steht der Wert („node value“).
  3. Sortieren. Die Daten sind nach Schlüssel sortiert. Beim Durchlaufen des Arrays wird künftig das erste Element „Sergey Smith“ und das zweite „John Sidorov“ sein. Wenn die Datenbank eine Liste von Benutzern aus der globalen Datenbank erhält, verschwendet sie keine Zeit mit dem Sortieren. Darüber hinaus können Sie die Ausgabe einer sortierten Liste anfordern, beginnend mit einem beliebigen Schlüssel, auch einem nicht vorhandenen (die Ausgabe beginnt mit dem ersten echten Schlüssel, der nach dem nicht vorhandenen Schlüssel kommt).

Alle diese Vorgänge erfolgen unglaublich schnell. Auf meinem Heimcomputer erreichte ich in einem einzigen Vorgang Werte von bis zu 750 Einfügungen/Sek. Auf Mehrkernprozessoren können die Werte erreichen Dutzende von Millionen Einfügungen/Sek.

Die Einfügegeschwindigkeit selbst sagt natürlich nicht viel aus. Sie können beispielsweise sehr schnell Informationen in Textdateien schreiben – so Gerüchten zufolge Die Visa-Bearbeitung funktioniert. Aber im Fall von Globals erhalten wir als Ergebnis einen strukturierten indizierten Speicher, mit dem in Zukunft einfach und schnell gearbeitet werden kann.

Globals sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 1

  • Die größte Stärke von Globals ist die Geschwindigkeit, mit der neue Knoten eingefügt werden können.
  • Daten im globalen Bereich werden immer indiziert. Das Durchqueren derselben, sowohl auf einer Ebene als auch tief im Baum, ist immer schnell.

Fügen wir der globalen Ebene noch ein paar weitere Zweige der zweiten und dritten Ebene hinzu.

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 sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 1

Es ist offensichtlich, dass mehrstufige Bäume auf der Grundlage von Globals erstellt werden können. Darüber hinaus erfolgt der Zugriff auf jeden Knoten aufgrund der automatischen Indizierung während des Einfügens nahezu augenblicklich. Und auf jeder Ebene des Baums sind alle Zweige nach Schlüssel sortiert.

Wie Sie sehen, können Informationen sowohl in einem Schlüssel als auch in einem Wert gespeichert werden. Die Gesamtschlüssellänge (die Summe der Längen aller Indizes) kann erreichen 511-Bytes, und die Werte 3.6 МБ für Cache. Die Anzahl der Ebenen im Baum (Anzahl der Dimensionen) beträgt 31.

Ein weiterer interessanter Punkt. Sie können einen Baum erstellen, ohne die Werte der Knoten der oberen Ebenen anzugeben.

Globals sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 1

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 ist.

Um Globals besser zu verstehen, vergleichen wir sie mit anderen Bäumen: Gartenbäumen und Dateisystemnamenbäumen.

Vergleichen wir Bäume auf Globals mit den uns bekanntesten hierarchischen Strukturen: mit gewöhnlichen Bäumen, die in Gärten und Feldern wachsen, sowie mit Dateisystemen.

Globals sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 1

Wie wir bei Gartenbäumen sehen, befinden sich Blätter und Früchte nur an den Enden der Zweige.
Dateisysteme – Informationen werden nur am Ende von Zweigen gespeichert, bei denen es sich um vollständig qualifizierte Dateinamen handelt.

Und hier ist die globale Datenstruktur.

Globals sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 1Unterschiede:

  1. Interne Knoten: Informationen in einem Global können in jedem Knoten gespeichert werden, nicht nur an den Enden von Zweigen.
  2. Externe Knoten: Der Global muss definierte Werte an den Enden der Zweige haben, während FS und Gartenbäume dies nicht tun.



In Bezug auf interne Knoten können wir sagen, dass die Struktur des Globalen eine Obermenge der Struktur von Namensbäumen in Dateisystemen und Gartenbäumen ist. Diese. flexibler.

Im Allgemeinen ist das Globale geordneter Baum mit der Möglichkeit, Daten in jedem Knoten zu speichern.

Um die Arbeit von Globals besser zu verstehen, stellen wir uns vor, was passieren würde, wenn die Ersteller von Dateisystemen einen ähnlichen Ansatz wie Globals zum Speichern von Informationen verwenden würden.

  1. Das Löschen einer einzelnen Datei in einem Verzeichnis würde automatisch das Verzeichnis sowie alle darüber liegenden Verzeichnisse löschen, die nur das gerade gelöschte Verzeichnis enthalten.
  2. Es wären keine Verzeichnisse erforderlich. Es gäbe einfach Dateien mit Unterdateien und Dateien ohne Unterdateien. Im Vergleich zu einem gewöhnlichen Baum würde jeder Zweig zu einer Frucht werden.

    Globals sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 1

  3. Dinge wie README.txt-Dateien werden möglicherweise nicht benötigt. Alles, was über den Inhalt des Verzeichnisses gesagt werden muss, kann in die Verzeichnisdatei selbst geschrieben werden. Im Pfadbereich ist der Dateiname nicht vom Verzeichnisnamen zu unterscheiden, sodass man mit nur Dateien auskommen konnte.
  4. Die Geschwindigkeit beim Löschen von Verzeichnissen mit verschachtelten Unterverzeichnissen und Dateien würde sich dramatisch erhöhen. Auf Habré gab es oft Artikel darüber, wie langwierig und schwierig es ist, Millionen kleiner Dateien zu löschen (1, 2). Wenn Sie jedoch ein Pseudodateisystem auf globaler Ebene erstellen, dauert dies Sekunden oder Bruchteile davon. Als ich das Löschen von Teilbäumen auf einem Heimcomputer getestet habe, wurden in 1 Sekunde 96–341 Millionen Knoten aus einem zweistufigen Baum auf einer Festplatte (keine SSD) entfernt. Darüber hinaus geht es um das Löschen eines Teils des Baums und nicht nur der gesamten Datei mit Globals.

Globals sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 1
Das Entfernen von Teilbäumen ist eine weitere Stärke von Globals. Sie benötigen hierfür keine Rekursion. Das geht unglaublich schnell.

In unserem Baum könnte dies mit dem Befehl erfolgen Töten.

Kill ^a("+7926X")

Globals sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 1

Um besser zu verstehen, welche Aktionen uns über Globals zur Verfügung stehen, werde ich eine kurze Tabelle bereitstellen.

Grundlegende Befehle und Funktionen für die Arbeit mit Globals in COS

Sept
Festlegen von Verzweigungen zu einem Knoten (falls noch nicht definiert) und Knotenwerten

Merge
Kopieren eines Teilbaums

Töten
Entfernen eines Teilbaums

ZKill
Löschen des Werts eines bestimmten Knotens. Der aus dem Knoten entstehende Teilbaum wird nicht berührt

$Abfrage
Vollständige Durchquerung des Baumes, tief in den Baum hinein

$Bestellen
Durchqueren von Zweigen eines bestimmten Knotens

$Daten
Prüfen, ob ein Knoten definiert ist

$Inkrement
Atomares Erhöhen eines Knotenwerts. Um Lese- und Schreibvorgänge für ACID zu vermeiden. Kürzlich wurde empfohlen, zu zu wechseln $Sequenz

Vielen Dank für Ihre Aufmerksamkeit, wir sind bereit, Ihre Fragen zu beantworten.

Haftungsausschluss: Dieser Artikel und meine Kommentare dazu stellen meine Meinung dar und stehen in keinem Zusammenhang mit der offiziellen Position der InterSystems Corporation.

Erweiterung Globals sind Schatzschwerter zum Speichern von Daten. Bäume. Teil 2. Sie erfahren, welche Arten von Daten auf Globals angezeigt werden können und bei welchen Aufgaben sie den größten Nutzen bringen.

Source: habr.com

Kommentar hinzufügen