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 1.0.16 als stabiles RDBMS,
- msql 2.0.Bx als Betaversion mit erweiterter Funktionalität, verbesserter
Web-Anbindung
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:
- Mehrere Indizes (ein- und mehrdeutig), die mehrere Felder enthalten
dürfen. Darüber werden nun auch Primärschlüssel realisiert.
Abweichung vom SQL-Standard!
- Datentyp SEQUENCE. Vergibt eine ständig wachsende Nummer bei einer
Abfrage.
- Feld
_rowid
. Eindeutige Kennzeichnung einer Datenbankzeile,
damit gezielter Zugriff auch ohne Primärschlüssel möglich.
- Feld
_timestamp
. Modifikationsdatum der Tabellenzeile.
Was fehlt?
- Konsistenzpüfungen zwischen Tabellen (Adresse darf nicht gelöscht werden,
wenn darunter noch Personen eingetragen sind).
- Aggregatfunktionen.
- Transaktionsverwaltung.
- Geschachtelte Operationen (INSERT mit Ergebnis eines SELECT-Befehls, ...).
- Lockingmechanismen.
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.
- msqltcl - Ein TCL-Interpreter mit mSQL-Schnittstelle,
- ein Perl-Interface,
- MsqlJava - Eine Java-Klassenbibliothek,
- gorta - ODBC-Treiber.
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:
- mySQL (http://www.tcx.se),
schneller, bessere Abdeckung des SQL-Standards (noch nicht zum Laufen
bekommen).
- LNX (Ein-Platz-Lizenz in SuSE-Linux enthalten).
- ADABAS-D (Personal-Edition in Caldera Open Linux, 5 Nutzer, 100 MB Daten).
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