mSQL

Was ist mSQL?

Mini SQL wurde von David Hughes in Australien als Datenbank für ein Netzwerkmanagementprojekt namens Minerva entwickelt. Ursprünglich war nur ein SQL-to-PostQUEL-Konverter für die Postgres-Datenbank geplant. Aufgrund der gigantischen Größe von Postgres fiel dann die Entscheidung zugunsten eines eigenen, kleinen Datenbanksystems auf ASCII-Basis.

Es existieren derzeit zwei verschiedene mSQL-Versionen:

mSQL läßt sich laut Dokumentation relativ problemlos auf allen BSD-, POSIX- und SVR4-Systemen installieren.

mSQL darf für nichtkommerzielle Anwendungen im Ausbildungsbereich und bei gemeinnützigen Einrichtungen kostenlos genutzt werden. Die genaue Lizenzpolitik ist etwas undurchsichtig.

Sprachumfang

mSQL implementiert ein Subset von ANSI-SQL-89. Im wesentlichen stehen unter 1.0 folgende Funktionen zur Verfügung:
CREATE TABLE
Erstellen einer Tabelle. Ein einzelnes Feld darf dabei Primärschlüssel sein. Datentypen für Felder sind CHAR(len), INT und REAL.
SELECT
Abfrage einer oder mehrerer Tabellen. Es werden die DISTINCT- (doppelte Zeilen entfernen), ORDER BY- (Sortierung) und WHERE- (Bedingung) -Klausel unterstützt. Mögliche Bedingungen sind logisch verknüpfte Vergleiche sowie Mustersuche. Aggregatfunktionen (Minimum, Summe, Durchschnitt) fehlen.
INSERT
Einfügen von Datensätzen.
DELETE
Löschen von Datensätzen. Auswahl erfolgt mit WHERE-Klausel.
DROP TABLE
Löschen einer Tabelle.
mSQL 2.0 unterstützt folgende zusätzlichen Features: Was fehlt?

Werkzeuge

Der eigentliche Datenbankprozeß ist ein einzelner Dämon, der entweder mit root- oder einer eigenen Nutzerberechtigung läuft (letzteres funktioniert bei mir nicht). Die Kommunikation erfolgt über einen IP-Port.

Der Zugriff ist von der lokalen Maschine und übers Netz möglich. Über ein ACL-File können die Rechte lokaler Nutzer und entfernter Rechner auf Datenbankebene verwaltet werden. Eine eigentliche Nutzerverwaltung sowie eine Rechtespezifikation auf Tabellenebene existiert nicht.

Ein Werkzeug msqladm erlaubt das Anlegen und Löschen von Datenbanken. Mit showrel können Datenbank- und Tabellenstrukturen angezeigt werden. Es existieren Import- und Exportwerkzeuge. Für Backups ist das Tool msqldump interessant. Es legt ein Kommandofile für die komplette Wiederherstellung einer Datenbank an.

Schnittstellen

Standardmäßig ist eine C-Schnittstelle verfügbar. ESQL und die Verarbeitung mit einem Makroprozessor fehlt dagegen. Von anderen Entwicklern wurden Schnittstellen zu anderen Programmiersprachen und Betriebssystemen geschaffen. Es existieren u.a. Für mich besonders interessant war bisher das Tcl-Interface.

mSQL und WWW

mSQL bringt ein CGI-Programm mit, was die Integration von SQL-Befehlen in HTML-Dokumente ermöglicht. Während sich mSQL 1.0 mit der Integration der SQL-Befehle und der Ergebnisausgabe begnügt, ist in mSQL 2.0 eine ausgewachsene, an C orientierte Scriptsprache namens lite entstanden.

Beispiel (1.0):

<! msql query "select * from telefon order by name" result>
<table>
<tr>
<th>Name<th>Vorname<th>Telefon
<!msql print_rows result "<tr><td>result.0<td>result.1<td>result.2">
</table>
mSQL 2.0 erlaubt hier die Ausgabe in einer Schleife mit Abbruchbedingungen, Formatierungen etc.

Die Scripts werden auf der Serverseite ausgewertet, der Nutzer erhält die fertigen Seiten mit den Daten. Um den Zugriff auf die Sourcen zu verhindern, können in mSQL 2.0 solche Seiten in einem eigenen, von außen nicht sichtbaren Baum abgelegt werden. Ebenso existiert ein Authentifizierungsmechanismus, der genau festlegt, welcher Nutzer auf welche Seite zugreifen darf. Der funktioniert allerdings nur, wenn die gewünschte Seite auch in die ACL-Datenbank aufgenommen wurde, womit ein Zugriffsschutz auf die Daten nur bedingt gegeben ist.

Anwendungen

ADFC-Mitgliederdatenbank
Realisiert mit mSQL 1.0 und msqltcl (Tk-Oberfläche). Struktur:
Person:  (adr-nr, m-nr, Name, Vorname, Anrede, Geboren, ...)  (ca. 1300 DS)
Adresse: (adr-nr, kreis-nr, Name-Key, Strasse, PLZ, Ort, ...) (ca. 700 DS)
Kreis:   (kreis-nr, Kreis-Name, Kontaktadresse, ...)          (ca. 60 DS)
Beitrag: (monat, kreis-nr, beitrag, ...)                      (ca. 30 DS/Monat)
Sonst:   (name-key, Adresse)                                  (ca. 30 DS)
Suche, Bearbeiten einzelner Datensätze in Sekundenbruchteilen. Längste Operation ist die Statistik bzgl. der Kreise (Verknüpfung dreier Tabellen) - derzeit ca. 2 Minuten - X11 steht.

Telefonverzeichnis Wiwi, IP-Nummern Wiwi
Beides sind Einzeltabellen, die mit dem CGI-Programm als HTML-Seiten dargestellt werden. Vorteil des Datenbankeinsatzes ist die einfache Verwaltung, die ebenfalls über das Web erfolgt.

Das öffentlich angezeigte Telefonverzeichnis ist aus Performancegründen statisch mittels lite aus der Datenbank generiert worden.

Raumbelegung der Rechnerpools im Web
Da der Funktionsumfang von lite nicht ausreichend war, erfolgte die Realisierung des CGI als C-Programm. Folgende Datenstruktur wird benutzt:
Belegung:  (datum, ue, raum-key, veranstaltung, plaetze, besteller)
Zeitliste: (ue, zeitraum)
Raumliste: (raum-key, ort, plaetze)
Bildschirmgrabs:

Performance und Alternativen

mSQL ist geeignet für kleinere und mittlere Datenbanken bis zu einigen Tausend Datensätzen. Lokal ergeben sich vernünftige Antwortzeiten. Im Web ist bei der derzeitigen Konfiguration das Antwortverhalten gerade noch akzeptabel (Datenbereitstellung mit ca. 1 KB/s). Ein Test mit einer besser ausgestatteten Maschine steht noch aus.

Mögliche Alternativen unter Linux:

Ein Vergleichstest findet sich in iX 5/97.

Bezugsquelle

mSQL 1.0.16: ftp://bond.edu.au/pub/Minerva/msql
mSQL 2.0: http://www.hughes.edu.au

Jens Pönisch