E-Mail-Verzeichnis Museen
Suche
Eintrag
Bedingungen
Aktuell

 

zurück

Technik

Das "E-Mail-Verzeichnis Museen" ist als objekt-relationale Datenbank realisiert. Die Datenbank läuft auf einem Server mit Debian GNU/Linux (anfangs noch auf einer Sun Sparc-Workstation unter Solaris). Der Server wird gehostet von WiNShuttle bzw. vom DFN-Verein.

Für die Datenbank wird ausschließlich freie Software eingesetzt. Als Datenbank-Server läuft PostgreSQL, für die Anbindung der Datenbankanfragen an die CGI-Schnittstelle, die Formatierung der Ausgaben sowie alle administrativen Aufgaben werden Perl-Scripte benutzt. Diese werden inzwischen nach und nach durch PHP-Scripte ersetzt, der Datenbankzugriff erfolgt hier sehr bequem über den O/R Mapper DB_DataObject.

Die objekt-relationale Struktur der Datenbank macht es prinzipiell möglich, alle Informationen in einer Tabelle zu speichern, da auch nicht-atomare Werte (die Kategorien) zugelassen sind. Der sonst bei relationalen Datenbank nötige Aufwand (Join über rechenaufwendige Kreuzprodukte, Gruppierung und Zusammenführung der Kategorien zur zugehörigen Adresse) entfällt damit - was die Arbeit (im Prinzip) sehr erleichtern könnte.

Leider lässt aber auch PostgreSQL als freies Datenbankmanagementsystem noch ein paar Wünsche offen: Die nicht-atomaren Werte werden als 'Array' ('geordnete Menge') und nicht als 'Set' ('echte, ungeordnete Menge') abgelegt. Deshalb müsste bei einer Suche nach einer bestimmten Kategorie jede Position des Arrays einzeln abgefragt werden. Über eine entsprechende Funktion ('UDF') lässt sich das leider nicht lösen, weil Funktionen unter PostgreSQL nur einzelne Werte und keine Mengen (bzw. einspaltige Tabellen) zurückliefern können. Über eine Erweiterung ließen sich auch die Array-Elemente durchsuchen (SELECT ... FROM adresse WHERE kategorie *= '...'), aber dies ist sehr langsam und ineffizient. Deshalb wird hier doch der Umweg über eine zweite Tabelle gewählt, in der Kategorien mit zugehörigem Primärschlüssel einer Adresse gespeichert sind. Über eine verschachtelt Anfrage (SELECT ... FROM adresse WHERE id IN (SELECT id FROM kategorie WHERE kategorie = '...') ließe sich nun zwar nach Kategorien suchen - aber ebenfalls sehr langsam und um den Nachteil der redundanten Speicherung von Daten.

Für die Suche nach Kategorien wird daher nun doch ein "klassischer" Join über die Datentabelle und die "Hilfs-Tabelle" mit den Kategorien durchgeführt. Das ist (leider) nach wie vor die schnellste Möglichkeit. Aber irgendwann wird PostgreSQL hoffentlich auch einen echten Mengenkonstruktor ('Set') einschließlich effizienter Indexierung der Elemente zur Verfügung stellen! :-)

Eine einfache Statistik über Einträge und Anfragen steht zur Verfügung.

Sollten Sie sich aus irgendwelchen Gründen genauer für die technische Umsetzung interessieren, fragen Sie einfach per Mail!

© 1996 - 2015 Robert Strötgen.

No Spam!