Open Source im professionellen Einsatz
Linux-Magazin 07/2003

Integrierte Datenbank für Tcl

Daten im Handgepäck

Programme müssen ihre Daten nicht immer am SQL-Datenbankserver aufgeben: Für viele Aufgaben sind eingebettete Datenbanken die bessere Wahl. Jean-Claude Wippler hat mit Metakit eine DB-Engine entwickelt, die sehr sparsam mit den Ressourcen umgeht und dennoch einen großen Funktionsumfang bietet.

575

Viele Programme benötigen eine leistungsfähige Datenbank, um Informationen geordnet abzulegen und zu suchen, etwa Adress- oder Kundenverwaltungen, Literaturlisten und Kataloge. Unter Linux ist der Griff zu einer SQL-Datenbank wie PostgreSQL oder MySQL zumindest finanziell kein Problem, der Aufwand ist jedoch erheblich. Will man das Programm inklusive Datenbank per Internet verbreiten oder soll eine Kataloganwendung von CD laufen, dann kommt eine SQL-Datenbank kaum in Frage.

Datenbank und Anwendung im selben Prozess

Für solche Aufgaben ist die eingebettete Datenbank Metakit von Jean-Claude Wippler eine leistungsfähige Alternative. Sie läuft ohne großen Aufwand innerhalb der Anwendung und verzichtet auf einen extern Server. Metakit wurde bis hin zu IBMs Großrechner S390 auf praktisch jede Architektur portiert, auch das Address Book von Mac OS X nutzt dieses freie Produkt (X/MIT-Lizenz). Tcl-Programmierer betten Metakit per Mk4Tcl in ihre Programme ein.

Die Quellen sind von[1] zu beziehen, zur Zeit ist Version 2.4.9.2 aktuell. Das nächste Feder-Lesen wird das Konzept der Starkits vorstellen - das verspricht das Ende des Kompilierens. Bis es soweit ist, muss der Programmierer noch etwas Handarbeit investieren. Das Auspacken, Konfigurieren und Übersetzen ist aber in wenigen Schritten erledigt:

tar -xzvf metakit-2.4.9.2.tar.gz
cd  metakit-2.4.9.2/builds/
../unix/configure --enable-shared 
  --with-tcl=/usr/local/include
make install


Danach lässt sich die Tcl-Erweiterung mit »package require Mk4tcl« in den Interpreter laden. Sie enthält neun Kommandos im Namespace »mk«, um Datenbanken und deren Inhalt zu bearbeiten. Die wichtigsten Kommandos sind in Tabelle 1 zusammengefasst.

Metakit-Kommandos

Gut strukturiert

Die meisten CD-Abspielprogramme greifen inzwischen auf die Daten von Freedb.org oder Gracenote zurück, um Informationen über Künstler und Titel einer CD anzuzeigen. Manchmal wäre es aber praktisch, in dieser Diskographie suchen zu können, ohne online zu sein. Freedb.org stellt die Datensätze zum Download bereit, sie bestehen aus einer Textdatei pro CD. Nachdem die Daten in einer Metakit-Datenbank gelandet sind, fehlt nur noch ein kleines GUI mit Suchfunktion. Das Auslesen der Textdateien ist hier nicht weiter interessant, die Quellen liegen auf dem FTP-Server des Linux-Magazins bereit[2].

Während bei den großen Datenbanken (auch bei der Berkeley DB[3]) mehrere Dateien zu einer Datenbank gehören, legt Metakit alles in einem File ab. Das Metakit-Kommando »mk::file open Tagname Dateiname« öffnet eine Datenbank aus einer Datei und versieht sie mit einem Tag. Tags identifizieren die Datenbanken, sie sind bei den weiteren Kommandos nötig.

Das Äquivalent zu Tabellen sind in Metakit so genannte Views. Views bilden zusammen mit dem Tag (durch einen Punkt verbunden) einen eindeutigen Pfad. Eine neue View entsteht mit dem Kommando »mk::view layout Tagname.View Definition«. Die Definition ist eine Liste der Spaltennamen. Normalerweise sind alle Spalten vom Typ String, durch das Anhängen eines Typkennzeichens lassen sich andere Datentypen erzeugen:

  • »:I« Integer
  • »:L« Long
  • »:F« Float
  • »:B« Binary

In Listing 1 legen die Zeilen 7 und 8 zwei Views an. Die erste enthält die CD-Daten, die zweite dient für die Trackdaten. Die »NR«-Spalte der »tracks«-Views ist ein Integer, die anderen Spalten sind Strings. Neben einfachen Tabellen kennt Metakit auch Untertabellen. Die beiden Tabellen könnte man durch eine einzige mit einer Untertabelle für die Tracks ersetzen:

mk::view layout db.cds 
{DISCID ARTIST ALBUM {TRACKS {NR:I LABEL}}


Die in einer Datenbank enthaltenen Views lassen sich mit »mk::file views« jederzeit abfragen. Sind alle Views angelegt, können sie Daten aufnehmen. Ein einzelner Datensatz nennt sich Row, er entspricht einer Zeile in einer View.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Musik aus dem Keller

    Mit den Perl-Modulen »Class::DBI« als abstrakter, objektorientierter Datenbankschnittstelle und »CDDB_get« wandern CD-Daten mit Song-Informationen ohne Tipparbeit in eine Datenbank.

  • Stern-Gucker

    Starkits verpacken ganze Tcl-Anwendungen inklusive aller benötigten Dateien in einem plattform- unabhängigen File. Das Ausliefern und Installieren (neudeutsch Deployment) reduziert sich so auf einfaches Kopieren. Aber auch Entwickler profitieren von der Sternenreise.

  • Überall Musik

    Das Modul Apache::MP3 baut eine komfortable Web-Jukebox um lose MP3-Sammlungen. Ein zusätzliches Perl-Skript macht die Songauswahl für den Musikliebhaber noch komfortabler.

  • Bequem rösten

    Routinemäßig wiederkehrende Brenn-Aufgaben erledigt man sinnvoll mit den Kommandozeilen-Tools, die schon Thema des letzten Beitrags waren. Schnell mal eine CD mastern geht aber mit einem leistungsfähigen grafischen Front-End am besten.

  • Flottes Projekt

    Ein GPS-Tracker, ein Webserver und Open GTS das reicht, um Bewegungen einer Fahrzeugflotte oder eines Haustieres zu erfassen. Entwickler Martin Flynn stellt dem Linux-Magazin die Software vor.

comments powered by Disqus

Ausgabe 04/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.