LAPIS: Systemarchitektur

Vorab: Begriffe

In der LAPIS-Dokumentation werden für die bekannten Datenbankobjekte andere Begriffe verwendet:

Begriff

Bedeutung

Relation

Tabelle

Domäne

Spalte einer Tabelle

Tupel

Zeile einer Tabelle, Datensatz, Record

tr-Format

textrel-Format (siehe unten)

Textrelation

Einzeltabelle im textrel-Format

tr-Datei

Sammlung mehrere Textrelationen

Systemarchitektur:

LAPIS besitzt eine geschichtete Architektur (Bereiche anklicken!):

Das textrel-System

Kern der internen Datenverarbeitung ist das “textrel”-Format (Text-Relationen). Es handelt sich dabei um ein ASCII-Format zur Darstellung von relationalen Tabellendaten. In der ersten Zeile werden Spaltennamen und Datentypen vereinbart, dann folgen zeilenweise die Dateninhalte.

Das textrel-Format ist aber in einem wichtigen Punkt gegenüber der üblichen Übertragung von Tabellen erweitert: Pro Datei oder Stream sind mehrere Tabellen mit unterschiedlicher Spalten erlaubt (ungefähr analog zu einer Excel-Datei mit verschiedenen Arbeitsblättern). Alle Tabellen in einer Datei müssen aber einen gemeinsamen Satz von Schlüsselspalten enthalten, während reine Datenspalten variabel sind. Das erlaubt es, heterogene Daten einheitlich zu übertragen und zu verarbeiten.

Alle gängigen relationalen Operationen (filtern, join, sortieren) können auf dieses erweiterte Format angewendet werden, die Ergebnisse sind immer wieder Multi-Tabellen.

Abläufe, die in SQL mit einem einzigen komplexen SELECT -Statement formuliert werden, sind im textrel-System durch eine Abfolge von tr-Operator-Programmen realisiert, die jeweils über die Kommandozeile gesteuert werden, und tr-Dateien über stdin und stdout weiterleiten.

Einige Operatoren splitten auch den Input in zwei Ausgaben auf (z.B. trcheck).

Arithmetik mit begrenzter Stellenanzahl

Einer der Datentypen des textrel-Systems ist ein numerischer Datentyp, der Fliesskomma -Zahlen mit bekannter, begrenzter Genauigkeit verwaltet. Darin werden chemische Anlyseergebnisse mit bekannter Genauigkeit gespeichert. 

Der Datentyp ist kompatibel zum C-Datentyp “double”, die Zahl der gültigen Binärstellen wird in den am wenigsten signifikanten Bits der IEEEE-Darstellung kodiert. Sonderformen der mathematische Operatoren verrechnen diese Bits dann mit, so dass im Laufe von Kettenrechnungen die Genauigkeit immer weiter abnimmt.
Dies ist wichtig, um die Fehlerfortpflanzung bei ungenau gemessenen Werten beobachten zu können.

Das Datenbank-RDBMS “db++”

Zur eigentliche Speicherung der Datenbestände wird das UNIX-RDBMS "db++" von concept asa, Frankfurt, verwendet. Diese Datenbank wird im Wesentlichen über eine interne API -Schnittstelle angesteuert, dabei handelte es sich um eine Bibliothek von C-Funktionen.

db++ verfügt nciht über SQL als Abfragesprache, sondern über ein eigene kompakte Operator-Syntax. Dies hat die Entwicklung des textrel-Systems mit geprägt.

tr-Operatoren zur Daten-Speicherung

db++ wird von fünf Programmen mit tr-Interface angesteuert: NEW, EXTRACT, RELINK, MAKERELS und FORGET. Diese führten die grundlegenden Operationen auf dem LAPIS -Datenmodell durch: Daten einfügen, abfragen, Datensätze umhängen, Tabellenpflege und Datenlöschung.

tr-Operatoren zur Datenverarbeitung

Alle möglichen atomaren Operationen auf tr-Dateien werden von folgenden Operatoren ausgeführt (siehe auch das Referenz-Handbuch). Falls möglich, wurde in Klammen das entsprechende SQL-Schlüsselwort angegeben.

  • tr2text - konvertiert Textrelation in Strom von Worten
  • tr2wk3 - konvertiert Textrelation ins Lotus 1-2-3-Format
  • traggr - Aggregation über Textrelationen (Blockbildung und Verrechnung, “GROUP BY”)
  • trbundle - komprimiert einen Strom von Textrelationen (“UNIQUE”)
  • trcalc - Formelauswertung auf tr-Zeilen (“SELECT sql_expr”)
  • trcat - Textrelationen verketten (“UNION”)
  • trcheck - Filtern von Datenzeilen nach einer Musterdatei (“WHERE, JOIN”). Liefert zwei Ausgaben: akzeptierte und zurückgewiesene Datenzeilen
  • trcolsin - ASCII-Tabellen nach Textrelationen wandeln (Import)
  • trcompress - Wertbereichkomprimierung einer bestimmten Spalte (aus mehreren Zeilen wird eine Zeile mit einem “von-bis” Ausdruck)
  • trexpand - Umkehroperation zu trcompress
  • trdoms - Spaltenbeschreibung einer tr-Datei (“DESCRIBE”)
  • trformat - tr-Datei für Präsentation formatieren.
  • triddoms - findet Spalten, die überall den gleichen Wert haben
  • trjoin - Textrelationen verknüpfen und erweitern (“JOIN”)
  • trmkwdh - Spezialoperator zur Erzeugung von Wiederholungsproben
  • trmvdoms - Spaltenreihenfolge umgestalten (“SELECT fieldlist”)
  • trselect - Daten über Suchkriterium auswählen (“SELECT.. WHERE”)
  • trseper - aus Spalten in einer Datenzeile mehrere Datenzeilen machen.
  • trshrink - Daten komprimieren.
  • trsort - Nach Spalten sortieren (“ORDER BY”)
  • trsplit - eine tr-Datei in mehrere kleinere Dateien aufbrechen (“TABLE PARTITION”)
  • trstree - Anzeige einer Baumstruktur, die Analysepfaden entspricht.
  • trtypchk - Typenprüfung von Feldwerten
  • trunify - mehrere einzelne Textrelationen zu einer Gesamtabelle vereinen.
  • trunsep - Datenzeilen zu Tabellen zusammenfassen, Umkehroperation zu trseper.
  • trwc - zählt die Tupel von Textrelationen (“ SELECT COUNT(*)” )
  • trxpose - vertauscht Zeilen und Spalten einer tr-tabelle.

Der Editor tred

“tred”- ist ein full-screen Tabelleneditor, mit dem tr-Dateien editiert werden können. Er umfasst viele Sonderfunktionen, und wird innerhalb des tr-Systems als flexible Dateneingabemaske verwendet, da gezielt auszufüllende Tabellenspalten und - zeilen vorgegebnen werden können. Auch zum Eingeben von Suchbedingungen wird er verwendet.

Besonderheiten sind:

  • läuft optimal auf VT220-Terminals im 132 Zeichen-Mode.
  • automatische Spaltenbreiten zur Maximierung der dargestellten Information
  • Datenauswahl aus Select-Listen, die record-spezifisch aus einer Musterdatei angegeben werden.
  • Blättern durch die Tabellen einer tr-Datei.
  • Beschränkung des Editiervorgangs auf bestimmte Spalten. Verbot, neue Zeilen anzufügen: dadurch Ausfüllen von vorbelegten “Formularen” möglich.
  • Optimiert für die Eingabe von Massendaten durch Feldwechsel mit RETURN, automatischer Dezimalpunkt, Wahl der Eingaberichtung (vertikal, horizontal).
  • Separater Merkpuffer für Zeilen.
  • Automatisches Ausfüllen beieinanderliegender Felder mit fortlaufenden Werten.
  • Suche mit Suchmustern.

“Tred” verwendet die UNIX-Bibliothek “curses”, um verschiedene ASCII-Terminals richtig ansteuern zu können.

 

Die Metadatenbank “STADEF”

STADEF steht für “Stationen-Definition”. LAPIS organisiert den Analysebetrieb im Labor abstrakt als Proben, die nacheinander verschiedene “Stationen” durchlaufen und an jeder Station eine von mehreren “Behandlungen” erfahren. Pro Behandlung fällt ein individuell strukturierter Datensatz an. Die speicherbaren Felder der verschiedenen Behandlungen werden in feste Kategorien wie “Zeit”, “Bearbeiter”, “Masszahl”, “Methode”,... eingeteilt.

Die Organisation eines konkreten Labors wird im stadef-Konfigurationsfile “StationenDef” eingetragen. Das Tool “stationchk” verifiziert die angegebene Laborbeschreibung.

Mittels des front-ends “defs” können gezielt Informationen aus “stadef” abgefragt werden. Beispiel: “Was sind alle Methoden-Felder der Stationen bis “Aufschluss”, und was wird in “Aufschluss” alles gemessen?”. Das Ergebnis bilden Feldlisten, aus denen dann zum Beispiel tred-Maskendateien erstellt werden. Diese Feldlisten werden dann als Argumente beim Aufruf der tr-Operatoren eingesetzt.

Fachlogik als sh-Scripte

Die genannten Tools und tr-Operatoren  werden benutzt um fachliche Abläufe in Form von UNIX-shell.Scripten zu programmieren. Dies hat den Vorteil, dass schnell und flexibel auf neue oder geänderte Anforderungen reagiert werden kann. Der Ansatz für die Architektur war:

  • Leistungsfähige, universelle und schnelle Grundtools werden in C geschrieben,
  • fachliche Abläufe werden als Scripte (sh oder msh) formuliert.

Die Fachlogik von LAPIS besteht aus ca. 60 Script-Dateien, kleinere sh-Code-Blöcke sind direkt als Aktionen in die Menü-Steuerdateien eingebaut.

Das Menü-System

Für LAPIS wurde eine menügesteuerte Benutzeroberfläche “msh” entwickelt, das “look and feel” wird im Anwenderhandbuch gezeigt. Mit diesem Menüsystem wird die Arbeit mit den verschiedenen Fachmodulen organisiert.

“msh” wurde LAPIS-unabhängig geschrieben. Es liest Menübeschreibungen aus speziellen Menu-Dateien und präsentiert diese dann dem User zur Navigation. Der Menufile definiert “Menus”, ein Menu besteht aus mehreren “Tops”. Die Aktion bei der Auswahl eines Tops ist ebenfalls angegeben, es kann die Ausführung von sh-Code oder der Aufruf eines Untermenüs sein.

Weitere Features sind:

  • Verfolgen und Darstellung der aktuellen Navigationsposition (wie “1.3.a”).
  • Ausführen beliebiger Actions bei Start von msh, vor der Menü-Anzeige, vor und nach der Ausführung einer Action.
  • Interne Variable werden in die angezeigten Menutexte eingeblendet.
  • Arbeit nach Art eines Zustand-Übergang-Diagramms: Zustände können benannt und gewechselt werden, beim Zustandwechsel werden wieder Actions ausgeführt.
  • Menu-Einträge (Tops) werden abhängig vom Zustand und von den Rechten des Benutzers ausgeblendet.

 

[LAPIS] [Geschichte] [Architektur]