Technische Universität Ilmenau Fakultät für Informatik und Automatisierung Institut für Praktische Informatik und Medieninformatik Datenbanken und Informationssysteme Diplomarbeit Verwaltung spatio-temporaler Daten für die Wellenfeldsynthese Hendrik Rusch Ilmenau, den 30. Mai 2005 Verantwortlicher Professor: Hochschulbetreuer: Betrieblicher Betreuer: Prof. Dr.-Ing. habil. Kai-Uwe Sattler Dipl.-Inf. Thomas Heimrich Dipl.-Ing. Katrin Reichelt Inventarisierungsnummer: 2005-06-01/071/IN99/2254 Danksagung An dieser Stelle möchte ich allen danken, die mir bei der Entstehung dieser Diplomarbeit geholfen haben. Mein besonderer Dank für die Unterstützung gilt meinen Betreuern Dipl.-Inf. Katrin Reichelt, Prof. Dr. Kai-Uwe Sattler sowie Dipl.Inf. Thomas Heimrich. Für das geduldige Korrekturlesen danke ich Melanie Krauße und Sebastian Bauer. Für die Unterstützung und den Rückhalt während des gesamten Studiums und der Erstellung dieser Arbeit danke ich allen Freunden sowie meiner Freundin Christiane Witter. Diese Arbeit ist meinen Eltern Arlette und Detlef Rusch gewidmet, die mir dieses Studium ermöglicht haben. Ilmenau, den 30. Mai 2005 Inv.-Nr.: 2005-06-01/071/IN99/2254 Zusammenfassung Die Diplomarbeit beschäftigt sich mit der Speicherung und Verwaltung der Daten für das IOSONO-Raumklangsystem. Es werden die beteiligten Datenarten – Metadaten und Audiodaten – vorgestellt und die Anforderungen an die Verwaltung derselben aufgezeigt. Techniken zur Umsetzung der Anforderungen werden, mit Schwerpunkt auf Datenbankmanagementsysteme, betrachtet und verglichen. Für einige Punkte werden zudem diverse Performancetests erläutert. Schließlich wird die jeweils gewählte Lösung zur Datenverwaltung und -speicherung vorgestellt und Implementierungsschritte erläutert. Inv.-Nr.: 2005-06-01/071/IN99/2254 Inhaltsverzeichnis 1 Einleitung 1.1 Gegenstand der Arbeit . . 1.2 Zielsetzung der Arbeit . . 1.3 Aufbau . . . . . . . . . . 1.4 Stand zu Beginn der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Grundlagen 2.1 IOSONO . . . . . . . . . . . . . . . . . . . . . . 2.2 IOSONO-Komponenten . . . . . . . . . . . . . . 2.2.1 Spamix . . . . . . . . . . . . . . . . . . . 2.2.2 Audioserver . . . . . . . . . . . . . . . . . 2.2.3 Renderer . . . . . . . . . . . . . . . . . . 2.2.4 Control Unit . . . . . . . . . . . . . . . . 2.3 Systemarchitektur . . . . . . . . . . . . . . . . . . 2.4 IOSONO Daten . . . . . . . . . . . . . . . . . . . 2.4.1 Metadaten . . . . . . . . . . . . . . . . . . 2.4.1.1 Das Autorenformat XMT-SAW . 2.4.1.2 Inhalt einer Szenenbeschreibung 2.4.2 Audiodaten . . . . . . . . . . . . . . . . . 2.5 Workflow . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Modellierung/Szenenerstellung . . . . . . 2.5.2 Abspielvorgang . . . . . . . . . . . . . . . 2.6 Anforderungen . . . . . . . . . . . . . . . . . . . 2.6.1 Modellierungsprozess . . . . . . . . . . . 2.6.2 Abspielvorgang . . . . . . . . . . . . . . . 2.7 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 13 13 13 14 . . . . . . . . . . . . . . . . . . . 15 15 16 17 17 17 17 17 19 19 20 20 22 23 23 24 24 26 26 27 Inv.-Nr.: 2005-06-01/071/IN99/2254 8 INHALTSVERZEICHNIS 3 Metadaten 3.1 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Speicherung von XML-Daten . . . . . . . . . . . . . . . 3.1.2 Export nach XMT-SAW . . . . . . . . . . . . . . . . . . 3.1.3 Suche über Metadaten . . . . . . . . . . . . . . . . . . . 3.1.4 Versionierung der Daten . . . . . . . . . . . . . . . . . . 3.1.5 Lange Transaktionen . . . . . . . . . . . . . . . . . . . . 3.1.6 Konsistenz von Audio- und Metadaten . . . . . . . . . . . 3.1.7 „Einfach und günstig“ . . . . . . . . . . . . . . . . . . . 3.2 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.3 XQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.4 XML-Parser . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Datenverwaltungssysteme . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Speicherung von XML . . . . . . . . . . . . . . . . . . . 3.3.2 Export nach XMT-SAW . . . . . . . . . . . . . . . . . . 3.3.3 Suche über Metadaten . . . . . . . . . . . . . . . . . . . 3.3.4 Versionierung . . . . . . . . . . . . . . . . . . . . . . . . 3.3.4.1 Integriert ins Datenverwaltungssystem . . . . . 3.3.4.2 Eigene Versionierung – Versionierung flacher Dokumente . . . . . . . . . . . . . . . . . . . 3.3.4.3 Eigene Versionierung – Versionierung mit XML 3.3.5 Lange Transaktionen . . . . . . . . . . . . . . . . . . . . 3.3.6 Evaluierung . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.6.1 XML-Datenbanken . . . . . . . . . . . . . . . 3.3.7 Berkeley DB XML . . . . . . . . . . . . . . . . . . . . . 3.3.7.1 Berkeley DB . . . . . . . . . . . . . . . . . . . 3.3.7.2 Datenverwaltung . . . . . . . . . . . . . . . . . 3.3.7.3 Features . . . . . . . . . . . . . . . . . . . . . 3.4 Speicherung von XMT-SAW . . . . . . . . . . . . . . . . . . . . 3.4.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.2 Verwaltungsstruktur . . . . . . . . . . . . . . . . . . . . 3.4.3 Implementierung . . . . . . . . . . . . . . . . . . . . . . 3.4.3.1 Export . . . . . . . . . . . . . . . . . . . . . . 3.5 Versionierungssystem . . . . . . . . . . . . . . . . . . . . . . . . Inv.-Nr.: 2005-06-01/071/IN99/2254 29 30 30 30 31 31 31 31 32 32 32 33 33 34 34 35 36 37 38 38 40 42 45 46 46 49 49 49 50 50 51 51 52 54 54 INHALTSVERZEICHNIS 9 3.5.1 3.6 3.7 3.8 XMT-SAW spezifische Bestimmung von Versionierungsdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1.1 Persistente Identifier (PID) . . . . . . . . . . . 3.5.1.2 Reihenfolge und Textinhalte von Knoten . . . . 3.5.1.3 Prinzip der Differenzbestimmung . . . . . . . . 3.5.2 Speicherung von Versionsdaten . . . . . . . . . . . . . . 3.5.2.1 Deltas . . . . . . . . . . . . . . . . . . . . . . 3.5.2.2 Zeitstempel . . . . . . . . . . . . . . . . . . . 3.5.2.3 Vergleich von Deltas und Zeitstempeln . . . . . 3.5.2.4 Evaluierung . . . . . . . . . . . . . . . . . . . 3.5.3 Implementierung . . . . . . . . . . . . . . . . . . . . . . Suche über Metadaten . . . . . . . . . . . . . . . . . . . . . . . . 3.6.1 Was soll gesucht werden? . . . . . . . . . . . . . . . . . 3.6.2 Typische Anfragen . . . . . . . . . . . . . . . . . . . . . 3.6.3 Suche nach ganzen Wörtern und Teilwörtern . . . . . . . 3.6.4 Fehlertolerante Suche und Ähnlichkeitssuche . . . . . . . 3.6.4.1 Abstandsmaße . . . . . . . . . . . . . . . . . . 3.6.4.2 Eignung . . . . . . . . . . . . . . . . . . . . . 3.6.4.3 Algorithmus . . . . . . . . . . . . . . . . . . . 3.6.4.4 Speicherstrukturen . . . . . . . . . . . . . . . . 3.6.4.5 Zeitaufwand . . . . . . . . . . . . . . . . . . . 3.6.5 Evaluierung . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.6 Implementierung . . . . . . . . . . . . . . . . . . . . . . 3.6.6.1 Dokument indizieren . . . . . . . . . . . . . . 3.6.6.2 Dokument-spezifische Indizierung entfernen . . 3.6.6.3 Elemente finden . . . . . . . . . . . . . . . . . Offene Themen . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7.1 Mehrbenutzerunterstützung . . . . . . . . . . . . . . . . 3.7.2 Lange Transaktionen . . . . . . . . . . . . . . . . . . . . 3.7.3 Datenkonsistenz . . . . . . . . . . . . . . . . . . . . . . 3.7.3.1 Konsistenz von Referenzen und Eigenschaften . 3.7.3.2 Konsistenz von Szenenbeschreibungen . . . . . Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . 55 55 57 57 59 59 63 66 70 71 72 72 72 73 73 74 75 76 78 81 81 82 83 84 84 85 85 86 88 88 88 89 4 Audiodaten 91 4.1 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.1.1 Echtzeitwiedergabe . . . . . . . . . . . . . . . . . . . . . 92 Inv.-Nr.: 2005-06-01/071/IN99/2254 10 INHALTSVERZEICHNIS 4.1.2 4.2 4.3 4.4 4.5 4.6 4.7 4.8 Wiedergabe entsprechend der Bedingungen der Szenenbeschreibung . . . . . . . . . . . . . . . . . . . . . . . . 4.1.3 Evaluierung . . . . . . . . . . . . . . . . . . . . . . . . . Systemkomponenten . . . . . . . . . . . . . . . . . . . . . . . . Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Streaming-Server . . . . . . . . . . . . . . . . . . . . . . 4.3.2 Datenbankmanagementsysteme . . . . . . . . . . . . . . 4.3.2.1 RDBMS und OODBMS . . . . . . . . . . . . . 4.3.2.2 Berkeley DB . . . . . . . . . . . . . . . . . . . 4.3.3 Dateisystem . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Randbedingungen . . . . . . . . . . . . . . . . . . . . . . . . . . Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IOSONO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.1 Implementierung . . . . . . . . . . . . . . . . . . . . . . 4.6.2 Performance . . . . . . . . . . . . . . . . . . . . . . . . Berkeley DB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.1 Konfigurationsmöglichkeiten für BDB-Tests . . . . . . . 4.7.1.1 Art des Datensatz-Schlüssels . . . . . . . . . . 4.7.1.2 Datensatzgröße . . . . . . . . . . . . . . . . . 4.7.1.3 BDB Zugriffsmethoden . . . . . . . . . . . . . 4.7.1.4 Datenzugriff . . . . . . . . . . . . . . . . . . . 4.7.1.5 Format der gespeicherten Daten . . . . . . . . . 4.7.1.6 Seitengröße (Pagesize) . . . . . . . . . . . . . 4.7.2 Testszenarien und Ergebnisse . . . . . . . . . . . . . . . 4.7.2.1 Erste Erkenntnisse . . . . . . . . . . . . . . . . 4.7.2.2 Speicherbedarf . . . . . . . . . . . . . . . . . . 4.7.2.3 Testreihe 1 . . . . . . . . . . . . . . . . . . . . 4.7.2.4 Testreihe 2 . . . . . . . . . . . . . . . . . . . . 4.7.3 Auswertung der Ergebnisse . . . . . . . . . . . . . . . . 4.7.3.1 Beste Konfiguration . . . . . . . . . . . . . . . 4.7.3.2 Fazit . . . . . . . . . . . . . . . . . . . . . . . Integrierte Audiodatei . . . . . . . . . . . . . . . . . . . . . . . . 4.8.1 Testergebnisse . . . . . . . . . . . . . . . . . . . . . . . 4.8.1.1 Evaluierung . . . . . . . . . . . . . . . . . . . 4.8.2 Die Datenstruktur . . . . . . . . . . . . . . . . . . . . . . 4.8.3 Erzeugung . . . . . . . . . . . . . . . . . . . . . . . . . Inv.-Nr.: 2005-06-01/071/IN99/2254 92 92 93 94 94 95 95 95 96 96 97 97 98 98 99 100 101 101 102 103 105 106 106 107 107 108 109 112 116 116 117 118 118 119 119 121 INHALTSVERZEICHNIS 4.8.4 4.8.5 11 Integration . . . . . . . . . . . . . . . . . . . . . . . . . 122 Evaluierung . . . . . . . . . . . . . . . . . . . . . . . . . 123 5 Fazit und Ausblick 125 A XQuery-Funktionen 127 A.1 Abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 A.2 Differenzbestimmung . . . . . . . . . . . . . . . . . . . . . . . . 128 Literaturverzeichnis 134 Abbildungsverzeichnis 136 Tabellenverzeichnis 137 Quelltextverzeichnis 138 Abkürzungsverzeichnis 139 Inv.-Nr.: 2005-06-01/071/IN99/2254 Kapitel 1 Einleitung 1.1 Gegenstand der Arbeit Gegenstand der Arbeit stellt das IOSONO-System dar, das vom Fraunhofer-Institut für Digitale Medientechnologie zur Wiedergabe von akkuratem Raumklang entwickelt wurde. Durch die Nutzung der Wellenfeldsynthese bietet es perfekten natürlichen Raumklang und eine starke Einhüllung über den gesamten Wiedergaberaum. Das IOSONO-System baut auf einer Vielzahl von Daten auf. Diese werden zur Berechnung der Wellenfeldsynthese benötigt. Es handelt sich um spatiotemporale Daten, d.h. diese haben einen Raum- und Zeitbezug. 1.2 Zielsetzung der Arbeit Ziel der Arbeit ist es, einen geeigneten Datenverwaltungsmechanismus für die Datenbasis des IOSONO-Systems zu finden. Die Eignung eines Datenbanksystems für diese Zwecke ist zu testen. Anschließend gilt es, ein entsprechendes Datenlayout zu entwerfen. Auf diesem basierend ist ein funktionierendes System zu implementieren. 1.3 Aufbau Im ersten Teil der Arbeit wird das IOSONO-System, dessen Grundlagen und Komponenten vorgestellt. Ebenso gibt es einen Überblick über die Anforderungen an die neue Speicherverwaltung. In Kapitel 3 wird die Speicherung und Verwaltung der System-Metadaten vorgestellt. Nach der detaillierten Vorstellung der AnInv.-Nr.: 2005-06-01/071/IN99/2254 14 KAPITEL 1. EINLEITUNG forderungen werden die zur Verfügung stehenden Möglichkeiten der Umsetzung aufgezeigt und verglichen. Darauf basierend werden Implementierungsschritte und -details zur gewählten Lösung erläutert. Die Verwaltung der Audiodaten des IOSONO-Systems ist Inhalt von Kapitel 4. Einstieg in dieses Thema ist ebenfalls die Vorstellung der Anforderungen und der zur Realisierung geeigneten Techniken. Anschließend werden zwei Möglichkeiten der Speicherung mit Hauptaugenmerk auf die Performance untersucht und darauf basierend die Entscheidung für eine Implementierungsvariante getroffen. 1.4 Stand zu Beginn der Arbeit Das IOSONO-System ist in kompletter und funktionierender Form implementiert. Erste Systeme laufen erfolgreich in Testräumen und Referenzkinos, wie z.B. in Ilmenau in Thüringen. Die Datenverwaltung unterliegt jedoch keiner optimierenden Verwaltung. Die Daten sind in Form von Dateien auf dem Dateisystem abgelegt. Um das System leistungsfähiger und Teile des Produktionsprozesses komfortabler zu machen, gilt es, dies entsprechend zu optimieren und damit den Bedürfnissen besser anzupassen. Inv.-Nr.: 2005-06-01/071/IN99/2254 Kapitel 2 Grundlagen 2.1 IOSONO Das IOSONO-System [11] ist ein Wiedergabesystem zur Erstellung und Reproduktion von räumlichen Klangszenen basierend auf der Wellenfeldsynthese. Die Grundidee des Systems begründet auf dem Huygens’schen Prinzip der Wellentheorie [31]. Dieses besagt, dass jeder Punkt einer bestehenden Wellenfront selbst Ausgangspunkt einer kugelförmigen Elementarwelle ist. Diese hat die gleiche Ausbreitungsgeschwindigkeit und Frequenz wie die Ursprungswelle. Die Einhüllende aller Elementarwellen ergibt die Wellenfront zu einem späteren Zeitpunkt. Im Beispiel einer Kugelquelle in Abb. 2.1 wird eine Wellenfront durch die Überlagerung vieler elementarer Kugelquellen dargestellt. Abbildung 2.1: Wellenüberlagerung bei Kugelquelle Inv.-Nr.: 2005-06-01/071/IN99/2254 16 KAPITEL 2. GRUNDLAGEN Bei der Audiowiedergabe ermöglicht das Huygens’sche Prinzip, Wellenfronten von Schallquellen bzw. Schallfeldern mit Hilfe eines linearen Lautsprecherarrays realitätsnah nachzubilden. Dies bedeutet, dass der Wiedergaberaum komplett von Lautsprechern umgeben ist. Bei der Wiedergabe wird das Signal für jeden dieser Lautsprecher abhängig von der Position der einzelnen virtuellen Schallquellen unterschiedlich berechnet, so dass ein homogenes Wellenfeld synthetisiert wird. Dieses Prinzip bietet einen entscheidenden Vorteil gegenüber einem 5.1 (6.1, 7.1) Surround-System: während bei diesen nur ein Punkt der optimalen Klangwahrnehmung im Raum existiert (der Sweet-Spot), ist beim IOSONO-System der Raumklang über die gesamte Hörfläche verteilt optimal. Der Hörer kann sich in diesem Bereich frei bewegen, ohne Klangeinbußen hinzunehmen. Auf technischer Seite werden im Unterschied zu kanalorientierten Systemen, wie den angesprochenen bisherigen Surround-Systemen, keine vorberechneten Lautsprechersignale ans IOSONO-System gesendet. Stattdessen gibt es objektorientierte Klangszenen. Dabei wird jedes Klangereignis mit seinen Eigenschaften an die Systemkomponenten übertragen. Diese berechnen mit Hilfe von Renderern die eigentlichen Signale für jeden Lautsprecher. Dies hat den Vorteil, dass sich die Klangwiedergabe an persönliche Konfigurationen des Hörers anpassen lässt. Auch denkbar sind Variationen wie das nachträgliche Verändern der Position einer Klangquelle. Für den Produktionsprozess bietet die Objektorientierung zudem den Aspekt der Wiederverwendung vorhandener Klangszenen oder deren Bestandteile. Die zur Berechnung benötigten Eigenschaften werden in Szenenbeschreibungen gespeichert, getrennt von den Audiodaten. 2.2 Komponenten des IOSONO-Systems Das IOSONO-System besteht aus mehreren Software-Komponenten, die im Zusammenspiel die Erstellung, Berechnung und Wiedergabe von räumlichen Klangszenen realisieren [7]. Die dafür verwendeten Rechner bestehen aus StandardKomponenten, wie sie auch in Heim-PCs vorhanden sind. Einzig spezielle Soundkarten sind nötig, um die Datenübertragung von Audiodaten zwischen den Komponenten zu ermöglichen. Die in diesem Abschnitt vorgestellten Systemteile sind Software-Komponenten, welche integrale Bestandteile des Systems sind. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 2. GRUNDLAGEN 17 2.2.1 Spamix Das Autorenwerkzeug Spamix dient der Erzeugung und Verwaltung von Szenenbeschreibungen. Des Weiteren wird es während der Wiedergabe dazu benutzt, die in den Beschreibungen enthaltenen Informationen an Renderer und Audioserver zur Weiterbearbeitung zu senden. Ebenso ist zur Abspielzeit eine Ablaufverfolgung der Objekte einer Szene möglich, da aktuell aktive Objekte in ihrer Aktion dargestellt werden. Interessant ist dies gerade mit Blick auf Audioobjekte, welche in Bewegung sind. 2.2.2 Audioserver Der Audioserver ist ebenfalls eine Software, die auf einem gesonderten Rechner läuft. Auf diesem sind alle Audiodaten gespeichert, die für die Ausgabe benötigt werden. Der Audioserver liest die benötigten Daten aus den Audiodateien und überträgt sie über die Soundkarte an die Renderer. 2.2.3 Renderer Der Renderer nimmt anhand der empfangenen Audio- und Metadaten die eigentlichen Geometrieberechnungen zur Wellenfeldsynthese vor. Die berechneten Audiosignale werden über eine entsprechende Audioschnittstelle an die Lautsprecher übertragen, welche den Hörraum beschallen. Es existieren mehrere Renderer, um die Ausgabe produzieren zu können. Jeder Berechnungsprozess der Renderer muss über die höchste Prozesspriorität verfügen, um die Berechnung der Lautsprechersignale in Echtzeit zu gewährleisten. 2.2.4 Control Unit Diese Software läuft auf dem gleichen Rechner wie das Spamix-Tool. Ihre Aufgabe ist das Starten der Renderer sowie deren Überwachung. Dies ermöglicht die Ausfallerkennung der beteiligten Renderer. 2.3 Systemarchitektur Das Zusammenspiel der Systemkomponenten aus 2.2 ist in Abbildung 2.2 aufgezeigt. Inv.-Nr.: 2005-06-01/071/IN99/2254 18 KAPITEL 2. GRUNDLAGEN Abbildung 2.2: Systemarchitektur Die dick umrandeten Elemente stellen jeweils eine Einheit dar. Es sind Software-Komponenten und Daten, die für die Berechungen der Wellenfeldsynthese sowie die Audioausgabe benötigt werden. Diese Einheiten befinden sich auf einem eigenen Rechner. Der Audioserver ist auf einem Rechner aktiv, auf welchem auch die Audiodaten abgelegt werden. Das Auslesen dieser Daten, die Umwandlung in das benötigte Ausgabeformat und die Übertragung der so generierten Audiosamples an die Renderer sind Aufgaben, die dort durchgeführt werden. Spamix und Control Unit laufen auf einem weiteren Rechner. Während Spamix Steuerdaten sowohl an den Audioserver als auch an die Renderer sendet (speziell Positionsdaten), werden die Renderer von der Control Unit über weitere Steuerdaten gesteuert. Diese Spamix-Steuerdaten sind in XML-basierten Szenenbeschreibungen enthalten, welche als Dateien auf der Festplatte des SpamixRechners liegen. Ein Rechner mit Timecode-Generator versorgt Audioserver und Spamix mit Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 2. GRUNDLAGEN 19 Timecode, wodurch Synchronität zwischen den einzelnen Prozessen gewährleistet werden kann. Der Renderer dagegen läuft ohne zugespielten Timecode und verarbeitet einkommende Daten sofort. Die Renderer verwenden diese empfangenen Daten zur Berechnung der Audiosignale, welche an die Lautsprecherpanels übertragen werden. Dafür beziehen sie die von Spamix zugespielten Positionsdaten ein. Zwischen den verschiedenen Einheiten sind die Datenströme dargestellt, die sich in Positionsdaten, Steuerdaten sowie Audiodaten aufgliedern. Audiodaten werden über ein ALSA1 Interface von Soundkarte zu Soundkarte übertragen. Positionsdaten und Steuerdaten werden über Netzwerkverbindung transferiert. 2.4 IOSONO Daten Zur Wiedergabe von Audioszenen und der damit verbundenen Berechnung der Wellenfeldsynthese werden sowohl Meta- als auch Audiodaten benötigt. Erstere sind Mittel zur Beschreibung objektorientierter Klangszenen. Audiodaten halten die Signale zur Berechnung der Audiosignale zur Ansteuerung der Lautsprecher für die Reproduktion des Wellenfelds, welche unter Verwendung der Informationen aus den Metadaten ausgeführt wird. 2.4.1 Metadaten Metadaten werden zur Beschreibung der Klangszenen verwendet. Eine Klanszenen besteht aus einer bestimmten Anzahl an Klangquellen (im Weiteren auch: Audioquellen) inklusive deren Eigenschaften und räumlicher Position. Klangquellen repräsentieren alle Schallquellen wie Sprache, Umgebungsgeräusche und sonstige klanglichen Elemente. Sie sind bestimmt durch räumliche und zeitliche Position. Die Metadaten können unabhängig von den Audiodaten, die sie beschreiben, verändert und erweitert werden. Jedoch muss dabei die Integrität der Daten gesichert bleiben. Metadaten sind für die Funktion des IOSONO-Systems unabdingbar, da aus ihnen die diversen Parameter entnommen werden, welche zur Berechnung der Wellenfeldsynthese benötigt werden. 1 ALSA bietet Unterstützung für Audio- und MIDI-Hardware durch Treiber, eine API sowie eine Bibliothek; weitere Informationen unter http://www.alsa-project.org/ Inv.-Nr.: 2005-06-01/071/IN99/2254 20 KAPITEL 2. GRUNDLAGEN 2.4.1.1 Das Autorenformat XMT-SAW Die Metadaten werden im so genannten XMT-SAW Autorenformat beschrieben. XMT-SAW [25] wurde am Fraunhofer-Institut für Digitale Medientechnologie auf XMT (eXtensible MPEG-4 Textual Format [36]) basierend entwickelt. XMT ist ein Framework, das MPEG-4 Szenenbeschreibungen mittels textueller Syntax repräsentiert. Es erlaubt Autoren solcher Szenen, deren Inhalt einfach mit anderen Autoren oder Tools auszutauschen. Außerdem erleichtert es die Interoperabilität mit Extensible 3D (X3D [37]) und der Synchronized Multimedia Integration Language (SMIL [33]). 2.4.1.2 Inhalt einer Szenenbeschreibung Integraler Bestandteil eines XMT-SAW Beschreibung ist die Darstellung von statischen und dynamischen virtuellen Audioquellen. Dazu gehören alle Eigenschaften der Audioquelle. Dies sind u.a. die Position der Quelle, die Lautstärke und die Art der Klangquelle. Für letztere stehen Punktquelle und ebene Welle als Alternativen zur Verfügung, die sich jeweils in ihrer Abstrahlcharakteristik unterscheiden. Weitere Bestandteile einer Szenenbeschreibung sind: • Virtuelle Räume, um die Charakteristiken des Raumes, in dem sich die Audioquellen befinden, zu reproduzieren • Globale Parameter, wie – Lautstärke der Szene – diese ist für alle Audioquellen gültig – Lautstärke des Subwoofers – ein Zeitwert, der einen absoluten zeitlichen Offset zur Synchronisation aller Objekte einer Szene enthält • Gruppierung virtueller Audioquellen; dies ermöglicht, Eigenschaften für mehrere Objekte mit Hilfe eines Elements festzulegen • Eine Referenz auf das eigentliche Audiosignal, d.h. im Normalfall die Angabe eines Dateinamens zu einer WAV-Datei. Ein wichtiger Beschreibungsinhalt sind auch zeitliche Abläufe, da ein Audioobjekt in Bewegung sein kann. Beispiele hierfür sind ein laufender Mensch oder Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 2. GRUNDLAGEN 21 ein fahrendes Auto. Diese Bewegung muss für eine korrekte räumliche Klangdarstellung berücksichtigt werden. Somit muss die Position des Objekts in Bezug zur Szenenzeit mit in der Beschreibung festgehalten werden. Wie eine XMT-SAW Szenenbeschreibung aussehen kann, ist im folgenden Quelltext-Ausschnitt aufgezeigt. Um die Übersicht zu gewährleisten wurden einige der im realen Fall benötigten Attribute ausgelassen. Alle Eigenschaften, welche für die hier durchgeführten Betrachtungen von Bedeutung sind, sind jedoch enthalten. <XMT-SAW> <head> <topLayout> <region name="region1" soundLevel="0.316228" subwooferLoudness="100" /> </topLayout> </head> <body> <room id="room1" /> <layer id="layer0"> <audio id="1" src="1:Tom_1" begin="0" end="10" isPlaneWave="false"> <additionalSrc src="AS:1_Tom_1.wav" begin="0" end="20"/> <sound id="source1" location="-1.64999998 3.3499999 0" useRoom="room1" /> </audio> <audio id="2" src="2:Cat" begin="7" end="20" isPlaneWave="false"> <additionalSrc src="AS:2_Cat.wav" begin="7" end="20"/> <sound id="source2" location="1.64999998 3.3499999 0" useRoom="room1" /> </audio> <audio id="3" src="3:Radio" begin="10" end="60" isPlaneWave="false"> <additionalSrc src="AS:3_Radio.wav" Inv.-Nr.: 2005-06-01/071/IN99/2254 22 KAPITEL 2. GRUNDLAGEN begin="10" end="60"/> <sound id="source3" location="-5.0500000007 0.6400001 0" useRoom="room1" /> </audio> <audio id="4" src="4:Steps" begin="20" end="30" isPlaneWave="false"> <additionalSrc src="AS:4_Steps.wav" begin="20" end="60"/> <sound id="source4" location="-4.89999998 -2.71000004 0" useRoom="room1" /> </audio> <audio id="5" src="5:Door" begin="45" end="50" isPlaneWave="false"> <additionalSrc src="AS:5_Door.wav" begin="45" end="50"/> <sound id="source5" location="-1.89999998 -1.89999998 0" useRoom="room1" /> </audio> </layer> </body> </XMT-SAW> Quelltext 2.0: Ausschnitt eines XMT-SAW Dokumentes Jedes audio-Element beschreibt eine virtuelle Audioquelle mit all ihren Eigenschaften. Neben der Id sind dies z.B. Start- und Endzeit (begin/end) als auch die Festlegung der Art der Klangquelle (isPlaneWave). Unterelemente von audio sind additionalSrc, worin die Audiodaten referenziert werden, und sound, das Eigenschaften wie Position der Audioquelle (location) und zu verwendende Hörraumkonfiguration (useRoom) festlegt. Diese wird in einem room Element definiert. 2.4.2 Audiodaten Audiodaten sind die Grundlage der Soundwiedergabe. Sie liegen im WAV-Format vor [18]. Für qualitativ hochwertige Audiowiedergabe handelt es sich um Daten Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 2. GRUNDLAGEN 23 mit einer Frequenz von 48.000 Hz und 16 oder 24 bit Datenbreite pro Sample. Audiodaten für die Wellenfeldsynthese werden mit speziellem Equipment und Mikrofonkonfigurationen aufgenommen. Für eine Audioszene werden diverse WAV-Dateien benötigt. Diese werden in der Szenenbeschreibung von Audioobjekten referenziert, mit Wiedergabezeiten versehen und diesen entsprechend zum gegebenen Zeitpunkt abgespielt. Jede Audioquelle benötigt eine oder mehrere WAV-Dateien, um die zugehörige Audioausgabe für eine komplette Szene zur Verfügung zu stellen. Zu einem Zeitpunkt werden hierbei mehrere Audiodateien gleichzeitig wiedergegeben. Sie liefern die Daten für die entsprechenden Audioobjekte, welche gleichzeitig aktiv sein können. In der derzeitigen Systemkonfiguration liegt der Grad der Parallelität bei maximal 32 Audioquellen. WAV-Dateien Die WAV-Dateien ergeben sich aus der Digitalisierung analoger Signale. Dazu werden die Signale in regelmäßigen Abständen – entsprechend der Samplingfrequenz – abgetastet. Bei einer Frequenz von 48.000 Hz wird das Signal 48.000-mal pro Sekunde abgetastet und der jeweilige Signalwert, ein Sample, bestimmt. Dieses Sample hat eine bestimmte Größe. Dies kann z.B. 16 oder 24 Bit sein und legt die Genauigkeit des Signalwertes fest. Mit 16 Bit können Werte von Samplewerte von -32.767 bis 32.767 aufgenommen werden. Die Samplingfrequenz ist entscheidend für die Audioqualität, da mit zu geringer Frequenz nur niedrigere Frequenzen festgestellt werden können - höhere Frequenzen gehen verloren. Mit 48.000 Hz können Frequenzen bis 24.000 Hz wiedergegeben werden, da eine Schwingung aus einer Auf- und Abbewegung besteht und daher 2 Samples benötigt. Diese Frequenz ist vollkommen ausreichend, da das menschliche Ohr nur Frequenzen von etwa 20 bis 16.000 Hz wahrnimmt. 2.5 Workflow 2.5.1 Modellierung/Szenenerstellung Die Szenenerstellung umfasst die Abbildung einer realen Audiosituation in eine Szenenbeschreibung im XMT-SAW Format. Aus den so generierten Metadaten lassen sich die Parameter zur Berechnung der WFS extrahieren und an die IOSONO-Komponenten übermitteln. Die Erstellung einer Szenenbeschreibung erfolgt mittels Spamix. Dort wird entsprechend der Konfiguration des Hörraums dieser mit seinen Parametern nachInv.-Nr.: 2005-06-01/071/IN99/2254 24 KAPITEL 2. GRUNDLAGEN gebildet. So wird ein virtueller Raum erzeugt. Anschließend werden alle Klangquellen der Szene mittels virtueller Audioquellen nachgebildet, die als Audioobjekte repräsentiert werden. Diese werden im virtuellen Raum an entsprechender räumlicher Stelle positioniert. Eigenschaften der Quellen sowie Bewegungsabläufe oder Lautstärkeveränderungen werden zugewiesen. Jedem Audioobjekt werden zudem über Referenzen Audiodaten zugeordnet, die in Dateiform auf Festplatte liegen. Somit wird die Beziehung zwischen Szenenbeschreibung und Audiosignalen hergestellt. Informationen zum Aufnahmeprozess der Audiodaten für die Wellenfeldsynthese finden sich in der Diplomarbeit von Frank Melchior [24]. Die erstellten Szenen werden schließlich in Form von XML-basierten Dateien, im XMT-SAW Format, auf Festplatte gespeichert und ebenso von dort zur Bearbeitung eingelesen. 2.5.2 Abspielvorgang Der Abspielvorgang, d.h. die Wiedergabe von Audioszenen anhand der erstellten Szenenbeschreibungen, ist in Abbildung 2.3 auf der nächsten Seite dargestellt. Im Mittelpunkt stehen die drei Komponenten Spamix, Audioserver sowie Renderer. Die Komponente „Timecode“ wurde aus Gründen der Übersichtlichkeit nicht in die Darstellung einbezogen. Nach Auswahl einer Szenenbeschreibung im Spamix werden die enthaltenen Daten (Näheres unter 2.4.1) eingelesen. Die Steuerdaten werden zum Audioserver übertragen, welcher daraus die Informationen über benötigte Audiodaten sowie deren Abspielreihenfolge gewinnt. Diese Informationen werden zur weiteren Benutzung gespeichert. Zudem wird mit dem Auslesen und Zwischenspeichern der Audiodaten begonnen. Wird der Abspielvorgang gestartet, werden seitens Spamix Positionsdaten an die Renderer gesendet. Der Audioserver gibt die gepufferten Audiodaten an die Renderer weiter und füllt die frei werdenden Puffer mit neuen Audiodaten. Der Renderer nimmt die empfangenen Daten und berechnet daraus sofort nach deren Eingang die Audiosignale für die Lautsprecher. Diese berechneten Audiosignale werden an die Lautsprecherpanels übertragen. 2.6 Anforderungen an die Verwaltung An die Verwaltung von Audio- und Metadaten werden bestimmte Anforderungen gestellt. Diese sollen dazu dienen, die bisherigen Verwaltungsmechanismen zu Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 2. GRUNDLAGEN 25 Abbildung 2.3: Abspielvorgang optimieren. Gegenwärtig werden beide Datenarten in einfachen Dateien im Dateisystem gespeichert. Dies bringt jedoch bestimmte Einschränkungen mit sich: • Die Metadaten befinden sich in Form von XML-Dateien auf Festplatte. Es existiert keine zentrale Verwaltung respektive komfortable Verwaltungsinformationen. Funktionen, die den Authoringprozess erleichtern könnten, sind nicht implementiert. Unter anderem fehlt es an einer integrierten Suche oder einer Möglichkeit zur einfachen Extraktion und Wiederverwendung von Bestandteilen vorhandener Szenenbeschreibungen. Dies muss momentan manuell unter Zuhilfenahme externer Werkzeuge ausgeführt werden. • Die Audiodaten liegen als WAV-Dateien auf Festplatte. Eine optimierende Datenorganisation ist dabei nicht berücksichtigt. Dies führt zu eingeschränkter Performance des Gesamtsystems, da das Auslesen der Audiodaten als geschwindigkeitsbestimmender Faktor nicht optimal verläuft. Inv.-Nr.: 2005-06-01/071/IN99/2254 26 KAPITEL 2. GRUNDLAGEN Beide Punkte führen zur Anforderung, ein modifiziertes und komplettes Datenverwaltungssystem für Audio- und Metadaten zu implementieren. Als Grundlage derselben wird ein Datenbankmanagementsystem (DBMS) in Betracht gezogen. Dies bietet die Mittel, eine übersichtliche integrierte Verwaltung der Metadaten zu erstellen. Auch sollte es über effiziente Datenverwaltungsmöglichkeiten in der Lage sein, schnellere Datenausleseergebnisse zu liefern. Indexierung und Caching werden hier als hilfreiche Mittel angesehen. Im Folgenden werden die Anforderungen an die Datenverwaltung kurz vorgestellt - aufgeteilt in die Erstellung von Szenen (Modellierungsprozess) sowie das Abspielen der Audiodaten (Abspielvorgang). Detaillierte Erläuterungen folgen in den entsprechenden Kapiteln. 2.6.1 Modellierungsprozess Der Modellierungsprozess umfasst alle Schritte zum Erstellen einer Szenenbeschreibung. Für diesen Vorgang ergeben sich Anforderungen, die den Erstellungsvorgang erleichtern sowie eine komfortable Datenspeicherung gewährleisten. Das führt zu den Kriterien: • Suche über Metadaten • Versionierung der Daten • Export nach XMT-SAW Daneben gibt es noch die Anforderung, Konsistenz von Audio- und Metadaten zu erhalten, was ein wichtiges Kriterium bei der Verwaltung der beteiligten Daten und Dateien darstellt. Auf der Ebene des Datenverwaltungssystems sind eine geeignete Form der Speicherung von XML-Daten sowie unterstützende Funktionen wie (lange) Transaktionen als wünschenswert zu nennen. Grundlegend soll versucht werden, alle Verwaltungsinformationen zentral in einer integrierten Lösung zu realisieren. 2.6.2 Abspielvorgang Beim Abspielen einer Audioszene steht die Performance an oberster Stelle. Daraus sind die Anforderung formuliert: • Echtzeitwiedergabe und Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 2. GRUNDLAGEN 27 • Wiedergabe entsprechend der Bedingungen der Szenenbeschreibung Daher gilt es, ein Speichersystem zu finden, das die Echtzeitanforderungen bzgl. der Audioausgabe umsetzen kann. Dabei soll die Speicherung der Audiodaten im WAV-Format beibehalten werden. 2.7 Fazit Anforderungen an Modellierung und an Abspielvorgang unterscheiden sich in ihren primären Punkten. Es stehen Komfort und Integration gegen Performance. Aus diesem Grund wird im Folgenden die Verwaltung in zwei verschiedene Punkte aufgeteilt. Zum einen die Verwaltung der Metadaten, welchen in ein komfortables und alle Funktionen integrierendes Datenverwaltungssystem eingebracht werden sollen. Zum anderen die Verwaltung der Audiodaten, die in einer Form gespeichert werden sollen, welche performantes (echtzeitfähiges) Auslesen ermöglicht. Die Umsetzung der Anforderungen beginnt mit denen für die Metadaten im nächsten Kapitel. Das anschließende Kapitel widmet sich den Audiodaten. Entsprechend den jeweiligen Anforderungen werden Techniken vorgestellt, diese zu realisieren. Anschließend werden Systeme angesprochen, welche diese Techniken umsetzen, bzw. wie diese Techniken realisiert werden können. Zum Abschluss wird die gewählte Implementierung vorgestellt. Inv.-Nr.: 2005-06-01/071/IN99/2254 Kapitel 3 Verwaltung der Metadaten Abbildung 3.1: Systemarchitektur, Teilsystem Metadaten Dieses Kapitel widmet sich der Verwaltung der Metadaten, in der Darstellung dunkel hervorgehoben. Zwar sind diese eng mit den Audiodaten verzahnt, letztere haben jedoch auf die Speicherung und Verwaltung der Metadaten keinen Einfluss. Inv.-Nr.: 2005-06-01/071/IN99/2254 30 KAPITEL 3. METADATEN Daher wird in diesem Kapitel mehrheitlich auf die Metadaten eingegangen, während sich Kapitel 4 mit den Audiodaten befasst. Die Metadaten befinden sich bisher als XML-Dateien ungeordnet auf Festplatte. Über eine integrierte Verwaltung soll eine einheitliche Speicherung aller erstellten Szenenbeschreibungen ermöglicht werden. Um eine komplette Lösung zu erzielen, sind diverse Anforderungen zu beachten. Diese sollen den Authoring-Vorgang erleichtern und eine komfortable und sichere Speicherung ermöglichen. Nach der kurzen Einführung der Anforderungen in der Einleitung folgt nun deren detaillierte Vorstellung. Danach werden für jede Anforderung Lösungsmöglichkeiten, die Umsetzung und die entwickelte Datenstruktur dargestellt. 3.1 Anforderungen 3.1.1 Speicherung von XML-Daten Die Metadaten liegen im XML-Format vor, einem Format zur Beschreibung von strukturierten Daten. In dieser Form müssen die Daten auch im neuen Datenverwaltungssystem abgelegt werden. Das dies möglichst effizient geschehen soll versteht sich von selbst. Im Optimalfall wird die Speicherung von XML in nativer Form unterstützt, d.h. es wird ein logisches Modell für XML-Dokumente definiert, anhand welchem Dokumente gespeichert und abgefragt werden. Der Vorteil: die physische Struktur von XML-Dokumenten kann erhalten bleiben (incl. CDATA und Kommentaren) und es wird der Inhalt nur über XML-basierte Technologien abgefragt (XPath, DOM, etc.). Zur komfortablen Arbeit mit XML sollte das Verwaltungssystem zudem Anfragen zum Retrieval von Teilen von XML-Dokumenten über ein XML-nahes System wie XPath oder XQuery bieten. 3.1.2 Export nach XMT-SAW Für die Transportabilität von Szenenbeschreibungen erfordert das Datenverwaltungssystem des Weiteren die Implementierung einer Exportschnittstelle, um eine Szenenbeschreibung in das aktuelle Speicherformat XMT-SAW zu exportieren. Damit wird das Abspielen dieser Szenenbeschreibung auf anderen IOSONOSystemen gewährleistet. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 31 3.1.3 Suche über Metadaten Für die Produktion von Wellenfeldsynthese-Szenen ist es notwendig, bestimmte Szenenbestandteile wieder zu verwenden. Dazu ist die Implementierung einer Schnittstelle zum Suchen von Szenenbestandteilen anhand bestimmter Kriterien erforderlich. Die wichtigsten Suchkriterien sind hierbei der Name der Audioquelle und der Name der zugehörigen Audiodateien. 3.1.4 Versionierung der Daten Der Produktionsprozess soll mit Hilfe von Datenversionierung den Zugriff auf vorangegangene Versionen der Daten mittels einer Historyfunktion realisieren. Die Suche über Metadaten – als Anforderung schon vorgestellt – soll sowohl auf der aktuellen Version eines Dokumentes als auch auf allen Daten vorheriger Versionen möglich sein. 3.1.5 Lange Transaktionen Die Erstellung einer Szenenbeschreibung kann sich über mehrere Stunden, Tage oder Wochen hinziehen. Standardtransaktionen [17] sind für diese Vorgänge nicht geeignet. Sie laufen nach dem ACID-Prinzip1 ab und schränken dabei die Kooperation stark ein, was sich nicht mit mehrwöchigem Arbeiten an einem Projekt vereinbaren lässt. Wenn Transaktionen für lange Produktionsprozesse geeignet sind, spricht man von langen Transaktionen. Diese können zu Problemen mit dem ACID-Prinzip führen [27], speziell mit den Eigenschaften Atomarität, Konsistenz und Isolation. Es müssen daher z.T. die ACID-Eigenschaften gelockert und spezielle Mechanismen und Kriterien entwickelt werden, um lange Transaktionen zu realisieren. 3.1.6 Konsistenz von Audio- und Metadaten Werden Manipulationen an den Metadaten bzw. Audiodaten vorgenommen, so muss die Konsistenz beider Datentypen überprüft werden. Verlängert man beispielsweise die Lebenszeit einer virtuellen Audioquelle, so muss unter Umständen darauf aufmerksam gemacht werden, dass die Länge der referenzierten Au1 ACID = Atomicity (Atomarität), Consistency (Konsistenz), Isolation, Durability (Dauerhaftigkeit); Transaktionen müssen diesen Eigenschaften bei ihrer Ausführung genügen, um Datenintegrität zu wahren Inv.-Nr.: 2005-06-01/071/IN99/2254 32 KAPITEL 3. METADATEN diodatei nicht mehr ausreichend ist, um die Laufzeit der virtuellen Audioquelle abzudecken. 3.1.7 „Einfach und günstig“ Neben den schon erwähnten technischen Anforderungen gibt es noch weitere Faktoren. Da in der Regel Kinos die Einsatzumgebung von IOSONO sind, sollte der Einsatz eines voll ausgestatteten DBMS vermieden werden. Dies hilft, den Kostenaufwand niedrig zu halten. Auch kann so der Administrationsaufwand, wie für Installation und Wartung, auf einem Niveau wie dem derzeitigen gehalten werden. Gerade während der Versuchsphase, in der nach einer geeigneten Lösung gesucht wird, ist zudem ein kostenfrei testbares System die erste Wahl. 3.2 Grundlagen Da bestimmte Techniken in den folgenden Betrachtungen eine entscheidende Rolle spielen, werden diese für das weitere Verständnis hier kurz vorgestellt. Großteils beziehen diese sich auf XML und XML-basierte Techniken. Zum tieferen Verständnis wird auf entsprechende Fachliteratur verwiesen. 3.2.1 XML XML [32] ist eine einfache und flexible Auszeichnungssprache, die eine Untermenge von SGML2 darstellt und zur Definition beliebiger Dokumenttypen 3 eingesetzt werden kann. Ursprünglich für den Einsatz im Bereich elektronischer Veröffentlichungen konzipiert, spielt es mittlerweile eine große Rolle im Datenaustausch unterschiedlichster Daten in diversen Umgebungen, wie z.B. dem Internet. Jedes XML-Dokument ist aus einzelnen Elementen aufgebaut, die durch Tags markiert sind. Mithilfe dieser Elemente lassen sich beliebige Datenstrukturen und deren Beziehungen beschreiben. Benötigt werden dafür neben den Elementen Attribute, welche die Eigenschaften von Elementen festlegen, sowie Verschachtelungen. 2 http://www.w3.org/MarkUp/SGML/ Dokumente gehören zum selben Dokumenttyp, wenn sie der gleichen Dokumenttyp Definition (DTD) folgen 3 Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 33 3.2.2 XPath Mit XPath [13] können Teile von XML-Dokumenten adressiert werden. Dabei können ganze Mengen von Elementen selektiert werden, die sich durch Bedingungen einschränken lassen. Eine Normierung durch die W3C wurde vorgenommen [34]. XPath modelliert ein XML-Dokument als Baum von Knoten. Es existieren verschiedene Knotenarten, wie Element-Knoten oder Attribut-Knoten. Auf den Bäumen wird in XPath über Achsen navigiert, welche Pfade bzw. Wege durch den Baum darstellen. Beschrieben wird dieser zu gehende Weg durch Pfadausdrücke. Diese Lokalisierungspfade, welche meist aus mehreren Teilausdrücken bestehen, selektieren die Knoten bzw. Knotenmengen des Dokumentes. Darauf können mittels Verknüpfungen und Funktionsaufrufen zusätzliche Berechnungen und Funktionen ausgeführt werden. Anfragebeispiel Auf dem XML-Dokument aus 2.4.1.2 auf Seite 20 lässt sich folgende Anfrage in XPath formulieren. /layer/audio[@id="2"]/* Diese selektiert alle Subelemente des Audio-Elementes mit der Id 2. Das Ergebnis dieser Anfrage wären die Elemente additionalSrc und sound. 3.2.3 XQuery XQuery [21] stellt eine weitere Anfragesprache dar. Auch diese wurde durch das W3C normiert [35]. XPath ist in XQuery integriert und wird dazu verwendet, Bestandteile von Dokumenten zu selektieren. Ein Hauptelement von XQuery sind die FLWOR-Ausdrücke, zusammengesetzt aus den Komponenten FOR-LETWHERE-ORDERBY-RESULT. Mit FOR und LET werden Elemente eines Dokumentes selektiert und in Variablen übergeben. WHERE lässt Beschränkungen zu, und mit RESULT können Ergebnisknoten zurückgeliefert werden. ORDERBY erlaubt die Sortierung der Ergebnisse anhand gegebener Kriterien. Anfragebeispiel Wieder auf Dokument aus 2.4.1.2 bezogen, ergibt sich die bei XPath vorgestellte Anfrage zu folgendem XQuery-Ausdruck: for $el in /layer/audio[@id="2"]/* return $el Es wird deutlich, dass auch in XQuery XPath eine entscheidende Rolle zur Selektion von Elementen spielt. Inv.-Nr.: 2005-06-01/071/IN99/2254 34 KAPITEL 3. METADATEN 3.2.4 XML-Parser Ein XML-Parser [23] nimmt ein XML-Dokument und stellt der nutzenden Anwendung die darin enthaltenen Informationen, d.h. Elemente, Attribute usw., zur Verfügung. Bei XML-Parsern lässt sich nach verschieden Kriterien unterscheiden. So gibt es validierende und nicht validierende Parser. Erstere überprüfen, ob ein Dokument valide ist, d.h. den Regeln einer DTD oder eines Schemas folgt. Auch wird das Dokument auf Wohlgeformtheit getestet. Weiterhin kann zwischen SAX- und DOM-Parsern unterschieden werden. Bei SAX-Parsern werden Dokumente seriell verarbeitet, d.h. von Element zu Element abgearbeitet. Die verarbeitende Anwendung wird mittels Ereignis-Handler über jedes erreichte Elemente informiert. DOM-Parser dagegen stellen ein Dokument in einer Baumstruktur dar, welche über eine API auszulesen oder zu manipulieren ist. Dafür wird das XML-Dokument komplett im Speicher gehalten. 3.3 Auswahl eines Datenverwaltungssystems Um die Speicherung der Metadaten zu realisieren, ist ein geeignetes System basierend auf einem Datenverwaltungssystem zu entwickeln. Von den schon vorgestellten Anforderungen betreffen das Datenverwaltungssystem insbesondere: • Speicherung komplexer Strukturen • Export im XML-Format • Eine Datenspeicherform, welche die Umsetzung der Suche über beliebige Inhalte unterstützt • Versionierung • Lange Transaktionen Zur Realisierung dieser Anforderungen existieren diverse Techniken, welche hier im Kontext mit den Anforderungen vorgestellt werden. Systeme, welche diese Techniken anbieten, werden vorgestellt, um vergleichend eine geeignete Lösung als Grundlage der neuen Datenverwaltung zu finden. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 35 3.3.1 Speicherung von XML Die grundlegendste Problematik ist zum Einstieg zu lösen: wie sind XML-Dokumente am besten zu speichern? Die gegenwärtig umgesetzte und wohl auch einfachste Form der Speicherung von XML ist, diese in Dateien auf Festplatte abzulegen. Dies wird von jedem Dateisystem unterstützt. Es sind keine weiteren externen Dienste oder Programme vonnöten, und kann daher sofort auf jedem System umgesetzt werden. Jedoch werden in diesem Zusammenhang keine Dienste angeboten, welche helfen könnten, die speziellen Verwaltungsanforderungen zu erfüllen. Dies wird in den weiteren Abschnitten verdeutlicht. Weitergehende Möglichkeiten bieten in dieser Hinsicht Datenbankmanagementsysteme (DBMS). Neben der effektiven Speicherung auch großer Datenmengen werden Mittel zur Verfügung gestellt, um einfach und gezielt Inhalte abzufragen. Die am weitesten verbreitete Klasse von DBMS sind die relationalen DBMS (RDBMS), in denen Daten auf dem relationalen Datenmodell basierend verwaltet werden. Die Daten werden in Form zweidimensionaler Tabellen repräsentiert, welche über Schlüssel miteinander verknüpft werden können. Soll XML in einer relationalen Datenbank gespeichert werden, gibt es zwei Möglichkeiten. Lösung Nummer eins: XML-Dokumente können als Ganzes in einem geeigneten Datentyp abgelegt werden, wie zum Beispiel Text-Typen oder BLOBs4 . Deren Nachteil ist jedoch, dass die Datenbank keine Information über die Struktur des Dokumentes erhält, und so auch keine strukturbezogenen Anfragen stattfinden können – bei der Arbeit mit XML ein nicht zu unterschätzendes Problem. Als zweite Möglichkeit kann die XML-Struktur in das relationale Modell überführt werden, d.h. es wird ein Mapping durchgeführt. Dieses Mapping kann bei größerer Komplexität der abzubildenden Struktur mit großem Aufwand verbunden sein. Eine entsprechende Schnittstelle muss implementiert und auf das Datenbanksystem aufgesetzt werden. Formatierungen im abgebildeten XML-Dokument, welche z.B. zur Unterstützung der Lesbarkeit des Dokumentes vorgenommen wurden, gehen dabei im Normalfall verloren. Bei Änderungen innerhalb der XML-Struktur der Dokumente oder der Tabellenstruktur des DBMS ist zudem stets eine Anpassung des Mappings nötig. Auch sind auf diesen Datenbanken keine XML-spezifischen Anfragesprachen wie XPath verfügbar, d.h. die Selektion (und Manipulation) von Teilen von XML-Elementen wird nicht unter4 BLOB-Datentypen speichern unstrukturierte (binäre) Daten in einer Datenbank Inv.-Nr.: 2005-06-01/071/IN99/2254 36 KAPITEL 3. METADATEN stützt. Diese Nachteile treffen auch auf objektorientierte Datenbankmanagementsysteme (OODBMS) zu. Diese bieten dafür den Vorteil, dass sich XML-Strukturen einfacher in Objekte umformen lassen als in relationale Strukturen. Dies liegt darin begründet, dass in XML praktisch Objektstrukturen abgebildet sind. Trotz dessen wird ebenso ein Mapping gebraucht; auch bleibt die mangelnde Unterstützung von XML ein Manko. Daher ist zur Speicherung von XML der Einsatz eines XML-Datenbanksystems sinnvoll, d.h. ein DBMS, das auf die Speicherung von XML-Daten spezialisiert ist. Im Bereich der (XML-)Datenbanken existieren grundsätzlich zwei Varianten zur Speicherung von XML-Daten. Zum einen sind dies Datenbanken mit Erweiterungen zum Speichern von XML, d.h. XML-erweiterte Datenbanken. Es handelt sich um DBMS, welche auf einem relationalen oder sonstigen System beruhen, und über Erweiterungen den Datentransfer zwischen XML-Dokumenten und der Datenbank-eigenen Datenstruktur – sei diese relational, objektorientiert oder proprietär – ermöglichen. Native XML-Datenbanken stellen die zweite Variante dar und speichern XML-Daten in ihrer strukturierten Form. Dabei sind XMLDokumente die Grundeinheit der logischen Speicherung und die Formatierungen innerhalb des Dokumentes bleiben erhalten. Es ist kein bestimmtes Datenmodell vonnöten. Alle XML-DBMS bieten neben der Speicherung von XML diverse Hilfsmittel an, um diese gespeicherten Daten zu verwalten. Dazu gehören z.B. Anfragesprachen wie XPath oder XQuery, welche auf die speziellen Anforderungen von XML-Dokumenten zugeschnitten sind. XML-Datenbanken sind daher für den hier benötigten Einsatzzweck bestens geeignet, da sie auf die einfache Verwaltung vieler XML-Dokumente spezialisiert sind. 3.3.2 Export nach XMT-SAW Sind die Daten gespeichert, müssen sie in Form eines XMT-SAW Dokumentes wieder exportiert werden können. Trivial ist dies im Falle der Speicherung als XML-Datei: die Daten liegen so schon als XMT-SAW Dokumente vor und müssen nicht konvertiert werden. Aber auch die Speicherung in einer XML-Datenbank erfordert keinen weiteren Aufwand. Es werden XML-Dokumente aus der Datenbank ausgeliefert, wie sie auch eingebracht wurden. So werden XMT-SAW Inhalte im selben Format ausgelesen und z.B. in eine Datei gespeichert, welche anschließend von IOSONO Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 37 eingelesen werden kann. Die Speicherung in einer Nicht-XML-Datenbank – relational, objektorientiert oder sonstiges – erfordert eine Logik, die aus den Daten wieder ein XMLDokument (speziell ein XMT-SAW Dokument) erzeugt und exportiert. Dies erfordert je nach Modell größeren Aufwand, in Relation zu jenem für das Einfügen von XML in die Datenbank. Das heißt, es wäre analog zu einem Mapping von XML auf das datenbankeigene Datenmodell eines von diesem Datenmodell auf XML nötigt. Um diesen Aufwand zu vermeiden, stellt eine XML-Datenbank daher auch hier die beste Wahl dar, wenn man vom trivialen Fall des Dateisystems absieht. 3.3.3 Suche über Metadaten Bei der Suche sollen XML-Elemente anhand gegebener Attributwerte (und damit Attributnamen) gefunden und inklusive ihres Inhalts (Attribute, Unterelemente, . . . ) zurückgeliefert werden. Zur Realisierung dieser Funktion müssen Teile des Inhalts eines XML-Dokumentes über diese Kriterien gefunden und, falls ein Ergebnis erzielt wurde, ausgelesen werden. Welche Techniken bieten sich dafür an? Die einfachste Möglichkeit ist der Einsatz einer Anfragesprache wie XPath oder XQuery. Hier ist es mittels Selektionsausdrücken, die sich einfach erstellen lassen, möglich, Teile von Dokumenten zu selektieren. Anhand des Ausdrucks erhält man alle Elemente zurückgeliefert, welche die Anfragebedingung erfüllen. Das Element wird mit allen Eigenschaften und Unterelementen an den Aufrufer übergeben. Dies ist genau die Anforderung, welche durch die Suche gestellt wird. Eine Alternative stellt die Nutzung eines XML-Parsers dar. Lässt man diesen über alle Elemente eines XML-Dokumentes laufen, kann man in diesem Sinne alle zugehörigen Attribute und Attributwerte der Elemente abfragen. So kann man leicht diese Werte mit den gegebenen Referenzwerten vergleichen und im Falle der Übereinstimmung das entsprechende Element vermerken. Da Parser Zugriff auf den kompletten Elementinhalt bieten, kann auch hier einfach alles an Inhalt abgefragt werden. Im Vergleich zum Einsatz von z.B. XPath erfordert dies aber erhöhten Aufwand. So muss manuell über das ganze Dokument iteriert werden. Zudem ist der Vergleich aller Kriterien über eigene Funktionen durchzuführen. Das lässt diese Lösung weniger praktikabel erscheinen. Diese beiden Alternativen lassen sich für die Verwaltung von XML in Dateien anwenden, indem externe Programme mit entsprechender Funktionalität erstellt werden – eine umständliche Lösung, wenn man eine einheitliche und integrierte Inv.-Nr.: 2005-06-01/071/IN99/2254 38 KAPITEL 3. METADATEN Verwaltung als Ziel hat. Auf Seiten der XML-DBMS haben viele eine Anfragesprache wie XPath integriert. Über diese können alle Inhalte der Datenbanken einfach abgefragt werden. Somit wird die erste vorgestellte Variante, mittels Anfragesprachen zugleich die einfachste und praktikabelste, ermöglicht. Für Nicht-XML-Datenbanken ist ein anderer Weg zu wählen. Wegen mangelnder XML-Unterstützung müssen Inhalte entsprechend des gegebenen Datenmodells selektiert werden. Ist ein RDBMS vorhanden, kann über eine Sprache wie SQL auf Inhalte zugegriffen werden. Wurde ein XML-Dokument in ein BLOB oder als reiner Text gespeichert, sind die Suchmöglichkeiten eingeschränkt. Es bleibt nur, eine reine Textsuche durchzuführen. Jedoch gestaltet sich dann sowohl die Suche von Elementen als auch speziell das Auslesen des Element-Codes umständlich und kompliziert. Wurden die Dokumente über Mappings eingepflegt, sind bessere Möglichkeiten gegeben. Dann lassen sich Selektionsbedingungen formulieren, indem Attributname und -wert als Tabellenfeld und dessen Tupelinhalt gesehen werden. So können Elemente gefunden und in XML umgesetzt werden. Weiterer Aufwand ist aber nötig, um über z.B. Schlüsselbeziehungen Kindelemente zu finden und auszugeben. Ebenso ist bei OODBMS vorzugehen, wo Objekte anhand Eigenschaften gefunden werden können. So lässt sich der Attributname auf eine Objekteigenschaft und der Attributwert auf einen Eigenschaftswert abbilden. Das Mapping von Objekten auf XML ist analog zu RDBMS nötig, auch das Auflösen von ElternKinder-Beziehungen. 3.3.4 Versionierung Versionierung – dies erfordert, Unterschiede zwischen unterschiedlichen Versionen von Dokumenten zu erkennen und in geeigneter Form zu speichern. Wie lässt sich nun die Versionierung realisieren? Die einfachste Lösung ist, auf die Fähigkeiten des Datenverwaltungssystems zu vertrauen. Das Problem ist jedoch, dass z.B. Dateisysteme keine Versionierungsmöglichkeiten bereitstellen. 3.3.4.1 Integriert ins Datenverwaltungssystem Auch bei den Datenbanken ist die Versionierung keine Selbstverständlichkeit. Jedoch gibt es schon Vertreter, welche ein solches System integriert haben. In diesem Fall kann die Versionierung komplett vom DBMS übernommen werden und Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 39 braucht keine weitere Beachtung zu finden. Immer vorausgesetzt, dass die Versionierungsmechanismen ausreichend für die gestellten Anforderungen sind. RDBMS setzen Versionierung oftmals auf Tupel-Ebene um. Jedes Tupel kann einer anderen Version zugeordnet sein. Aus dem Bereich der relationalen DBMS bietet Oracle5 mit dem Oracle Workspace Manager [6] (OWM) Versionierungsmöglichkeiten an. Dieses System basiert auf einem Versionierungsansatz auf Tupel-Ebene. Über so genannte Arbeitsbereiche (Workspaces) werden Sammlungen von Tupel-Versionen logisch isoliert. Arbeitsbereich-Hierarchien können dabei beliebig tief und breit werden. Savepoints gruppieren eine Reihe von Änderungen in einem Arbeitsbereich. Auch die XML-erweiterte Version von Oracle bietet diese Funktion. Unter den nicht-kommerziellen Systemen findet sich jedoch kein RDBMS mit vergleichbaren Eigenschaften, und selbst unter den kommerziellen Anbietern sind die Eigenschaften einmalig. In OODBMS hat die Versionierung größere Verbreitung gefunden als in relationalen DBMS. Dabei haben sich verschiedene Techniken herausgebildet. Eine Lösung ist, bei einem Update eines Objektes eine neue Version desselben an einer neuen Stelle zu erzeugen. Die alte Version bleibt erhalten. Der Vorteil des Prinzips besteht darin, dass Referenzen auch nach dem Commit eines Updates erhalten bleiben. Zugriffe werden ab dann automatisch auf die aktuellste Version geleitet. Umgesetzt wurde dies z.B. bei Matisse6, einem XML-erweiterte OODBMS. Eine weitere Möglichkeit ist bei Objectivity/DB 7 zu finden, ebenfalls eine Versionierung auf Objekt-Ebene. Hier wird zudem lineares und verzweigtes Versionieren unterstützt. Auch gibt es das Konzept der Default-Version. Unter den proprietären XML-Datenbankmanagementsystemen bieten Ipedo 8 , Sekaiju9 oder X-Hive/DB10 Versionierungsverfahren. Diese Systeme sind jedoch alle den kommerziellen Datenbankmanagementsystemen zuzuordnen. Da viele DBMS – speziell XML-DBMS – keine Versionierung bieten, bleibt als Lösung, diese selbst zu implementieren. Die Implementierung kann durch verschiedene Mechanismen realisiert werden. Sowohl für allgemeine Dokumente als auch speziell für XML-Daten gibt es unterschiedliche Ansätze, welche hier aufgezeigt werden. 5 http://www.oracle.com/ http://www.matisse.com/product_information/ 7 http://www.objectivity.com/Products/Products.shtml 8 http://www.ipedo.com/html/products.html 9 http://www.mediafusion-usa.com/usa/seihin/sekaiju/index.html 10 http://www.x-hive.com/products/db/index.html 6 Inv.-Nr.: 2005-06-01/071/IN99/2254 40 KAPITEL 3. METADATEN 3.3.4.2 Eigene Versionierung – Versionierung flacher Dokumente Am einfachsten ist die Versionierung unstrukturierter, flacher Daten wie Text-Dokumente. Hier existieren zeilenbasierte Verfahren wie RCS [2] oder SCCS [3]. Diese durchlaufen zu vergleichende Dokumente zeilenweise, um Änderungen zu erkennen. Stimmen zwei gleich positionierte Zeilen nicht überein, wird dies als Unterschied erkannt. RCS RCS speichert die aktuellste Version eines Dokumentes. Alle anderen Revisionen sind als Edit Skripte gesichert. Durch diese Edit Skripte ist beschrieben, wie man in der History eines Dokumentes zurück laufen muss. Dies bedeutet, dass bei dem Retrieval eines Dokumentes für alle Versionen außer der aktuellsten Bearbeitungsaufwand betrieben werden muss. Die Edit Skripte müssen rückwärts auf die aktuellste Version angewandt werden. SCCS SCCS speichert Änderungen nicht durch rückwärts gerichtete Edit Skripte. Es wird stets auf dem aktuellen Dokument gearbeitet und Änderungen eingebracht. Zeitlicher Bezug wird über Zeitstempel erreicht. Diese markieren die Gültigkeitszeit von Teilen – aufeinander folgende Blöcke von Zeilen – des Dokumentes. Um eine Version zu erhalten, wird das komplette Dokument durchlaufen und gültige Elemente werden anhand ihrer Zeitstempel ausgewählt. Nachteile Zeilenbasierte Verfahren arbeiten, wie schon erläutert, auf Dokumentenebene, wo Zeile für Zeile verarbeitet wird und Differenzen als versionsrelevant vermerkt werden. Dies ist grundsätzlich auch auf XML-Dokumente anwendbar. Es bringt jedoch gewisse Einschränkungen mit sich, was mit der strukturellen Komponente von XML-Dokumenten zu tun hat. Diese bilden eine logische Komposition von Elementen. Dabei können Dokumente auf semantischer Struktur identisch, jedoch auf textueller Ebene verschieden sein. Gerade, wenn XMLDokumente manuell erstellt werden, sind für die Leserlichkeit Leerzeichen und Zeilenumbrüchen entsprechend der inhaltlichen Struktur eingefügt. Diese Zeichen ändern aber nichts an dem Inhalt des Dokumentes, auch wenn auf textlicher Ebene entscheidende Unterschiede entstehen. Ein Beispiel für zwei textlich unterschiedliche, inhaltlich jedoch identische Dokumente sind im Folgenden dargestellt. <XMT-SAW xsi:schemaLocation="http://www.emt.iis.fraunhofer.de/ Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 41 xmt-saw config/schema/xmt-saw.xsd"> <body> <timecode tcOffset="36000"/> <room id="room1" roomPresence="0.0" envelopment="0.0" runningReverb="0.0" lateReverb="0.0" heaviness="1.0" liveness="1.0" freqHeavy="250.0" freqLive="4000.0"/> <layer id="layer0"> <audio id="10" src="10:d_o" begin="0" end="65" visible="true" isPlaneWave="false"> </audio> </layer> <body> <XMT-SAW> Quelltext 3.0: XML-Dokument mit Semantik im Layout <XMT-SAW xsi:schemaLocation="http://www.emt.iis.fraunhofer.de/ xmt-saw/config/schema/xmt-saw.xsd"> <body> <timecode tcOffset="36000"/> <room id="room1" roomPresence="0.0" envelopment="0.0" runningReverb="0.0" lateReverb="0.0" heaviness="1.0" liveness="1.0" freqHeavy="250.0" freqLive="4000.0"/> <layer id="layer0"> <audio id="10" src="10:d_o" begin="0" end="65" Inv.-Nr.: 2005-06-01/071/IN99/2254 42 KAPITEL 3. METADATEN visible="true" isPlaneWave="false"> </audio> </layer> <body> <XMT-SAW> Quelltext 3.1: XML-Dokument ohne semantisches Layout Ein zeilenbasierter Vergleich würde bei diesen Dokumenten in nahezu jeder Zeile Unterschiede erkennen – das, obwohl der Inhalt identisch ist. Bei einem Versionierungssystem, das speziell auf XML-Dokumente ausgerichtet ist, sollten Formatierung oder Layout keinen Einfluss auf die Differenzerkennung von Dokumenten haben. Gleiches gilt für Dokumente, bei denen die Reihenfolge von Attributen oder Knoten keine Rolle spielt – Umstellungen brauchen hier keine Beachtung zu finden. Um diesen Faktoren Rechenschaft zu tragen, gibt es Lösungen, welche speziell auf die XML-Struktur abgestimmt ist. 3.3.4.3 Eigene Versionierung – Versionierung mit XML Für die Versionierung XML-basierter Daten sind Knoten und deren Attribute die Grundlage. Bei dem Vergleich zweier Versionen gilt es, Unterschiede in Struktur und Beziehungen zu erkennen. Dies läuft darauf hinaus herauszufinden, welche Knoten hinzugekommen sind oder entfernt wurden. Dies gilt für alle Knoten auf beliebiger Tiefe. Auch neue, gelöschte und veränderte Attribute sind zu erkennen. Zusammengefasst erfordert der Versionsvergleich die Erkennung von: • gelöschten Elementen • geänderten Elementen • hinzugekommenen Elementen • verschobenen Elementen (optional) Für die Versionierung entscheidend ist nun sowohl die Erkennung der genannten Unterschiede (mehr dazu in 3.5.1) als auch ein Verfahren, diese zu speichern. Für letzteres gibt es diverse Ansätze, welche in den nächsten Abschnitten vorgestellt werden. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 43 Zur Realisierung von Versionen müssen die Unterschiede zwischen zwei Dokumentenzuständen gespeichert werden. Die Unterschiede sind mit entsprechenden Mitteln einem jeweiligen Zustand – d.h. einer Version – zuzuordnen. Dazu existieren verschiedene Verfahren. Ein Ausschnitt daraus wird den nächsten Abschnitten vorgestellt. Ein Großteil der aufgeführten Verfahren arbeitet mit Zeitstempeln. Damit sind Versionsverfolgungen anhand genauer Zeitangaben möglich. Zum Beispiel lässt sich nach der Version eines Dokument an einem bestimmten Datum fragen. Realisiert werden diese Verfahren mittels Zeitwerten, welche vorhandenen oder einzufügenden XML-Elementen zugewiesen werden. Diese Versionierungsinformationen werden in das zu versionierende Dokument eingebracht, d.h. es werden keine weiteren Daten neben diesem Dokument angelegt. Gültigkeitskontexte Bei diesem Verfahren, vorgestellt von Grandi und Mandreoli [14], wird auf Zeitstempeln operiert. Bereiche von XML-Dokumente werden, ähnlich wie Blöcke bei SCCS, mit diesen versehen. Dafür wird ein valid-Tag eingeführt, das den zu versionierenden Bereich umschließt. Die Zeitstempel werden in Form eines <validity>-Elementes gesichert. Zur Umsetzung muss bei der Abfrage abhängig von Zeitstempeln gearbeitet werden, um nur dementsprechend gültige Elemente zu erhalten. Als Nachteil kann gewertet werden, dass bei Attribut-Änderungen eines Elementes das ganze Element komplett in der neuen Version gespeichert werden muss, auch wenn nur ein Attribut Änderungen aufweist. Bei XMT-SAW Dokumenten, wo Elemente grundsätzlich viele Attribute enthalten, führt dies leicht zu großem Overhead. τ XQuery Dies ist ein auf XQuery basierendes und aufwärtskompatibles Format, entwickelt von Gao und Snodgrass [12]. Es benutzt τ XSchema [9] für Datentypen, welche Zeitwerte anbieten. Entsprechende Elemente und Attribute werden eingesetzt, um Zustände festzuhalten. Ein solches Tag ist timeVaryingAttribute, das über die Attribute vtBegin und vtEnd die Gültigkeitszeit angibt. Zudem existiert ein timestamp-Tag zur Festlegung der Gültigkeit von Elementen. Im Gegensatz zu den Gültigkeitskontexten werden Attribute gesondert versioniert, daher sind die Elternelemente von Attribut-Änderungen nicht in der Versionierung betroffen. Jedoch erfordert dieser Mechanismus, dass jedes Attribut von einem timeVaryingAttribute-Element umgeschlossen wird, was grundlegend wiederum Overhead nach sich zieht. Inv.-Nr.: 2005-06-01/071/IN99/2254 44 KAPITEL 3. METADATEN Temporal XPath Data Model Dies bezieht sich auf [4] und stellt eine Erweiterung von XPath um zeitliche Aspekte für die Versionierung vor. Dafür wird ein Namespace time eingeführt, welcher diverse Attribute und Elemente umschließt. Das Attribut valid wird Elementen zugeordnet und legt deren Gültigkeitszeit fest. Die Elemente time:attribute und time:stringValue setzen die Versionierung von Attributen und Textelementen um. Grundsätzlich gilt hier das Gleiche wie für τ XQuery: das Verfahren produziert Overhead für alle Attribute. Elemente werden mittels eines Attributes versioniert, wodurch für diese kein extra Element eingefügt werden muss. Bei τ XQuery wird dagegen die Attributmenge des Elementes nicht verändert. τ τ XPath τ τ XPath ist ebenfalls eine Erweiterung von XPath und bleibt dabei abwärtskompatibel. Vorgestellt wurde das Prinzip von Dyreson [10]. Ausgegangen wird hier von einer Client-Server-Architektur. Da dies im IOSONO-System (noch) nicht der Fall ist, wird dieses Prinzip nicht weiter untersucht. T-XPath Kalb et al. stellen in [20] eine aufwärtskompatible Erweiterung von XPath dar. Es werden atomare zeitliche Datentypen und Operationen für diese eingeführt. value und valid_time sind z.B. Elemente, welche für Textelemente den Wert und die zugehörige Gültigkeitszeit festhalten. Deltas Deltas verfolgen ein anderes Prinzip als Zeitstempelverfahren. Es werden nicht jedem Element oder Attribut Zeitwerte zugeordnet. Stattdessen werden alle Änderungen zwischen zwei Zuständen (Versionen) gruppiert zusammengefasst und gespeichert [22]. Das Ausgangsdokument, z.B. die aktuellste Dokumentversion, bleibt im Gegensatz zu Zeitstempelverfahren unverändert. Stattdessen werden alle Änderungen in externen Strukturen verwaltet. Dies bedeutet z.T. geringeren Overhead als bei Zeitstempel-Verfahren, da nur tatsächlich veränderte Elemente ein umschließendes Element erhalten, das die Änderung beschreibt. Alle anderen Dokumententeile bleiben unverändert und ohne zusätzliche Informationen. Fazit Letztendlich bieten sich somit verschiedene Möglichkeiten, die Versionsunterschiede von XMT-SAW Dokumenten zu beschreiben. Ungeeignet sind Verfahren wie Gültigkeitskontexte, da sich hier Attribut-Änderungen auf das ganze Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 45 Element niederschlagen – ungünstig bei XMT-SAW Dokumenten, wo jedes Element bis zu 10 oder mehr Attribute enthält. Bei einer Attributänderung müsste der ganze zugehörige Knoten in der neuen Version gespeichert werden. Dagegen ist z.B. τ XQuery günstig, da hier Elemente und Attribute getrennt über Zeitstempel versioniert werden. Diese feingranulare Versionierung scheint für XMT-SAW Dokumente gut geeignet. Ebenso bietet sich die Verwendung von Deltas an, da hier nur Versionierungsdaten für Elemente vermerkt werden, die tatsächlich einer Änderung unterliegen. Deltas können dabei in Zusammenhang mit jedem Datenverwaltungssystem umgesetzt werden. Für τ XQuery muss dieses Anfragen über XQuery unterstützen, und dabei zusätzlich die Definition von XQuery-eigenen Funktionen erlauben. Dies schränkt die Auswahl an verfügbaren Datenverwaltungssystemen wiederum ein. Werden XMT-SAW Dokumente als Dateien gespeichert, kann ein externes Programm τ XQuery umsetzen. Bei den DBMS dagegen existieren nur XML-Datenbanksysteme mit XQuery-Unterstützung, bei allen anderen Arten fehlt diese. Dort kann τ XQuery nicht verwendet werden. Unter den Vertretern mit guter XQuery-Funktionalität findet sich z.B. Berkeley DB XML. 3.3.5 Lange Transaktionen Lange Transaktionen finden in RDBMS nahezu keine Unterstützung. Ausnahme hier ist wiederum Oracle mit dem OWM. Dieser implementiert auf Basis der Workspaces ein Framework für lange Transaktionen. Mittels Standardtransaktionen und mehreren Datenversionen werden lange Transaktionen implementiert, welche Atomarität und Nebenläufigkeit erfüllen. Somit kann auch diese Anforderung von einem RDBMS erfüllt werden. Unter den nicht-kommerziellen Systemen findet sich jedoch kein System mit vergleichbaren Eigenschaften, und auch unter den kommerziellen Anbietern sind die Eigenschaften recht einmalig. Im Gegensatz dazu realisieren diverse OODBMS lange Transaktionen. Hier ist z.B. wiederum Objectivity/DB vertreten. Lange Transaktionen werden dort über das Ein- und Auschecken von Daten realisiert. Dabei werden Container oder Datenbanken für eine erweiterte Zeitperiode gesperrt, statt der sonst üblichen Session pro Nutzer. Über Sperrverfahren werden somit lange Transaktionen unterstützt – ein pessimistische Verfahren, das wenig Kooperation und Parallelität bietet. Weitere Systeme bieten lange Transaktionen ebenfalls über das Prinzip des Ein- und Auscheckens, aber basierend auf lokalen Arbeitsbereichen. Die Daten Inv.-Nr.: 2005-06-01/071/IN99/2254 46 KAPITEL 3. METADATEN werden in diese Arbeitsbereiche kopiert und Updates dort ausgeführt. Nach Ende des Bearbeitungsvorgangs werden die Änderungen auf die eigentlichen Daten angewandt. Diese Vorgehensweise erlaubt die Bearbeitung derselben Daten durch mehrere Nutzer und unterstützt dabei stärker die Parallelität als bei Sperrverfahren. Des Weiteren wird mit geschachtelten Transaktionen gearbeitet, wobei eine Transaktion in mehrere Subtransaktionen aufgeteilt wird. Dies hilft, Transaktionen übersichtlich zu halten und Teilschritte abschließen zu können. Fazit ist, dass nur DBMS die Möglichkeit bieten, lange Transaktionen in integrierter Form zu nutzen. Sollte man kein DBMS benutzen, oder dieses keine langen Transaktionen unterstützen, muss ein eigenes System implementiert werden. Möglichkeiten dazu werden in „Lange Transaktionen“, Abschnitt 3.7.2, näher betrachtet. 3.3.6 Evaluierung In den vorherigen Teilabschnitten wurden diverse System zur Realisierung der Anforderungen aufgeführt. Dabei lässt sich als Fazit Folgendes feststellen: Die wenigsten Möglichkeiten für die Verwaltung der Metadaten bieten Dateisysteme. Zwar gestalten sich Speicherung und Export der Daten trivial. Jedoch findet sich keinerlei integrierte Unterstützung für Versionierung, Suche oder lange Transaktionen. Diese müssen daher über externe Programme zur Verfügung gestellt werden. Auch ist keine zentrale Speicherstelle gegeben; die Verwaltung und Kontrolle über die Dokumente müsste ebenfalls über ein zentrales Verwaltungsprogramm organisiert werden. Relationale oder objektorientierte DBMS bieten da nicht viel mehr. Zwar sind z.B. Transaktionen oder Mehrbenutzerunterstützung als Datenbankfeatures integriert. Auch ist eine zentrale Speicherung und Verwaltung aller Daten gegeben. An der Erfüllung der gestellten Anforderungen mangelt es jedoch. Zudem wird ein Mapping der XML-Daten auf das Datenbankmodell benötigt, wenn man wenigstens rudimentäre Unterstützung der strukturellen Eigenschaften der verwalteten XML-Dokumente erhalten will. Letztendlich bleibt somit ein gegenüber dem Dateisystem erhöhter Aufwand, mit dem Vorteil der Datenbankeigenschaften. 3.3.6.1 XML-Datenbanken Die beste Wahl stellt eine XML-Datenbank dar, speziell in Bezug auf die Verwaltung der XML-Dokumente. Sie bieten ebenfalls Datenbankfeatures wie TransakInv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 47 tionen oder Sperren. Auch lässt sich bei Vorhandensein von Anfragesprachen wie XPath die Suche einfach realisieren. Zudem finden sich in einigen die Unterstützung für Versionierung oder lange Transaktionen. Daher ist zu entscheiden, welche der verfügbaren XML-Datenbanken für die Implementierung gewählt wird. Der Bereich der XML-erweiterten Datenbanken wird generell nur von kommerziellen RDBMS und OODBMS abgedeckt. Diese bleiben somit außen vor. Native XML-Datenbanken sind sowohl kommerziell als auch als Open Source in großer Zahl verfügbar. Sie basieren auf den unterschiedlichsten Datenbankmodellen und bieten unterschiedlichste Variationen an Features. Schaut man sich bei XML-Datenbanken die Features an, bietet sich folgendes Bild: • Alle Datenbanken erlauben die native Speicherung von XML. • Integrierte Versionierung bieten Ipedo, Sekaiju oder X-Hive/DB – alle sind kommerzielle DBMS. • Lange Transaktionen sind in keinem der Vertreter zu finden, müssen daher selbst implementiert werden. • Standard-Datenbankfeatures wie Transaktionen oder Sperren sind dagegen im Normalfall enthalten. Systeme mit diesen Funktionen sind in größerem Maße auch nicht-kommerziell verfügbar. • Unterschiede finden sich in der Unterstützung von XPath oder XQuery sowie der Schnittstelle für den Zugriff. Bei letzterem ist eine C++-Schnittstelle wünschenswert, da IOSONO komplett in C++ umgesetzt ist. Auch gibt es Unterschiede in der Art der Datenbank, wo Standalone-Systeme ebenso angeboten werden wie eingebettete Lösungen. Hier wäre eine eingebettete Lösung wünschenswert, da so zusätzlicher Installations- und Konfigurationsaufwand komplett entfällt. Letztendlich stehen mehrere Open Source XML-DBMS zur Auswahl, welche ähnliche Eigenschaften anbieten. Tabelle 3.1 zeigt eine nähere Gegenüberstellung der Features. Neben den integrierten Abfragesprachen (XPath, XQuery), Updatemöglichkeiten (XUpdate) und den unterstützten Parsermodellen (DOM/SAX) interessieren auch Standard-Datenbankfeatures wie Transaktionen und Indexe. Inv.-Nr.: 2005-06-01/071/IN99/2254 48 KAPITEL 3. METADATEN Zudem, wie schon angesprochen, die Verfügbarkeit einer C++-Schnittstelle. Aufgezeigt sind die Systeme 4suite11, dbXML12 , Berkeley DB XML13 , eXist14 sowie OZONE15 und Xindice16 . 4suite BDB XML dbXML eXist OZONE Xindice XPath x x x x x x x XQuery x x x x x XUpdate DOM x x x x SAX C++-API x x x x x (x) Trans. x x x x ? x Indexe Tabelle 3.1: Native XML-Datenbanken Nach Bewertung der Eigenschaften zeigen sich Berkeley DB XML und eXist als die besten Alternativen. Die Wahl fällt schließlich auf Berkeley DB. Als der Hauptgrund kann die C++-Schnittstelle gesehen werden, welche eine leichte Integrierbarkeit in IOSONO gewährleistet. Weiterhin unterstützt es im Gegensatz zu eXist Transaktionen, welche in jeder Datenbankumgebung ein nützliches Feature darstellen. Offene Themen bzgl. Berkeley DB XML bleiben lange Transaktionen und die Versionierung, welche über eine eigene Implementierung eingebracht werden müssen. Positiv: XQuery wird inkl. der Definition von Funktionen unterstützt, somit kann die Versionierung angelehnt an τ XQuery realisiert werden. Da nun die komplette Umsetzung der Verwaltung der Metadaten mittels Berkeley DB XML umgesetzt wird, folgt hier eine Vorstellung dieses DBMS. Anschließend befassen sich die Abschnitte 3.4, 3.5 und 3.6 mit der Umsetzung der Anforderungen: Speicherung von XMT-SAW, Versionierung und Suche mit Hilfe von BDB XML. Darauf folgt ein Ausblick über noch offene Themen dieser Arbeit im Abschnitt 3.7. 11 http://4suite.org/index.xhtml http://www.dbxml.com/product.html 13 http://www.sleepycat.com/products/xml.shtml 14 http://exist.sourceforge.net/ 15 http://ozone-db.org/frames/home/what.html 16 http://xml.apache.org/xindice/ 12 Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 49 3.3.7 Berkeley DB XML Berkeley DB XML ist eine Datenbankbibliothek. Es basiert auf Berkeley DB, das nun kurz vorgestellt wird. Anschließend werden Datenverwaltung und Datenbankfeatures des DBMS aufgezeigt. 3.3.7.1 Berkeley DB Bei Berkeley DB handelt es sich um eine Datenbankbibliothek, im Gegensatz zu einem Standalone-DBMS. Das heißt: die Bibliothek wird direkt zum Programm gelinkt; damit sind die Datenbankfunktionen sofort verfügbar. Über Funktionsaufrufe sind alle Zugriffe und Abfragen auf die Inhalte der Datenbank durchführbar. Ebenso sind damit direkte Eingriffe in die Datenbankkonfiguration möglich, wie z.B. auf Cachegröße oder Zugriffsmethode. Dafür werden diverse APIs zur Verfügung gestellt, u.A. in C, C++ und JAVA. Durch die Verfügbarkeit für nahezu alle Plattformen ist BDB universell einsetzbar. Der Datenbank liegt kein relationales, objektorientiertes, oder sonstiges gebräuchliches Datenmodell zugrunde. Stattdessen werden Daten in proprietärer Form in einfachen Datensätzen abgelegt. Diese Datensätze bestehen aus einem Schlüssel, welcher der Identifikation beim Zugriff dient, sowie den eigentlichen Daten. Von BDB werden diverse Zugriffsmethoden und Arten des Datenzugriffs angeboten. Näheres dazu wird im Zusammenhang mit der Speicherung der Audiodaten (Kapitel 4, ab Seite 91) vorgestellt. 3.3.7.2 Datenverwaltung Grundlage aller Betrachtungen ist die Art der Verwaltung von XML-Daten durch Berkeley DB XML [28]. Grundsätzlich geschieht die Ablage der Daten in nativer Form. Dabei werden XML-Dokumente in so genannten Containern gespeichert und verwaltet. Ein Container ist eine einzelne Datei, welche ein oder mehrere XML-Dokumente sowie deren Metadaten und Indizes enthält. Zu jedem Dokument können beliebige Metadaten hinzugefügt werden, d.h. Daten außerhalb der Dokumentenstruktur. Auch ist die Erstellung von Indizes über beliebige Teile eines Dokumentes möglich. BDB bietet zwei Möglichkeiten zur Speicherung von XML-Dokumenten in Containern: als ganzes Dokument sowie aufgesplittet in die Dokumententeile. Bei der Speicherung als Ganzes wird das Dokument komplett erhalten und abgelegt, inklusive aller Leerzeichen und Zeilenumbrüchen. Bei der Speicherung in Teilen Inv.-Nr.: 2005-06-01/071/IN99/2254 50 KAPITEL 3. METADATEN wird das Dokument so aufgeteilt, dass jeder Datensatz der Datenbank einen Blattknoten mit allen Attributen, Attributwerten und Textknoten enthält. Grundsätzlich sollte für die Speicherung kompletter Dokumente deren Größe 1 MB nicht übersteigen, da andernfalls starke Performance-Einbußen zu erwarten sind. Jedoch wird für oftmaliges Retrieval ganzer Dokumente die komplette Speicherung bevorzugt. 3.3.7.3 Features Auf Daten in der Datenbank können XPath-Anfragen angewandt werden, um Dokumente oder Teile von diesen abzufragen. Da XQuery eine Erweiterung von XPath 2.0 ist, wird diese Sprache ebenfalls unterstützt. Das Datenbanksystem bietet des Weiteren integrierte Funktionen zur Modifikation, dem Hinzufügen und Entfernen von Dokumententeilen – eigener Code zur Manipulation von z.B. DOM-Bäumen ist dadurch überflüssig. Realisiert wird dies wiederum über XQuery-Ausdrücke. Auch datenbankspezifische Eigenschaften wie Transaktionen, Logging und Sperren werden von Berkeley DB XML zur Verfügung gestellt. Dies bildet die Grundlage, um stets einen konsistenten Datenbestand zu gewährleisten sowie eine mehrbenutzerfähige Anwendung unter Nutzung von BDB XML zu realisieren. Mittels Recovery-Tools lässt sich zudem nach Systemabstürzen oder sonstigen Problemen ein konsistenter Datenbankzustand wiederherstellen. 3.4 Speicherung von XMT-SAW Dokumenten Die erste umgesetzte Anforderung betrifft die Speicherung der Metadaten. Alle Metadaten sind im XMT-SAW Format gespeichert, einer XML-basierten Beschreibungsform. Für die Speicherung und Verwaltung derselben wurde in Kapitel 3.3 BDB XML ausgewählt. Diese XML-Datenbank bietet gerade mit Blick auf die Anforderung „Export nach XMT-SAW“ den entscheidenden Vorteil, dieses ohne zusätzlichen Aufwand umsetzen zu können. Die Struktur der von Spamix ausgegebenen XMT-SAW Dokumente muss nicht angetastet werden. Sie werden wie bisher von Spamix erzeugt, um dann anstatt auf die Festplatte in die Datenbank transferiert zu werden. Ebenso problemlos gestaltet sich das Auslesen von Dokumenten aus der Datenbank, d.h. der Export nach XMT-SAW, da nur die Daten aus der Datenbank ausgelesen werden und so fertig verwendbar vorliegen. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 51 Abbildung 3.2: Verwaltungsstruktur für XMT-SAW Dokumente Da somit der Export der Daten trivial ist, wird diese Anforderung nicht weiter betrachtet. Erst während der Erläuterungen zur programmiertechnischen Implementierung (Abschnitt 3.8 auf Seite 89) wird nochmals darauf eingegangen, speziell in Zusammenhang mit dem Versionierungssystem. Offen ist daher vorrangig das Thema der Konzeption einer geeigneten Verwaltungsstruktur für in die Datenbank eingepflegte XMT-SAW Dokumente. Dieses Thema wird nun eingehend behandelt. 3.4.1 Überblick In Berkeley DB XML werden XML-Dokumente unter einem eindeutigen Namen (dem Identifier) gespeichert. Über diesen ist das Dokument jederzeit abrufbar. So lassen sich (theoretisch) unbegrenzt XMT-SAW Dokumente in der Datenbank ablegen, immer unter Angabe dieses eindeutigen Namens. Jedoch ist kein Bordmittel vorhanden, um einfach Überblick über den Inhalt der Datenbank zu erhalten. Insbesondere im vorliegenden Anwendungsfall, der die Versionierung einbezieht, ist eine Übersicht über eingepflegte Dokumente incl. aktueller Version sinnvoll. Ausgangspunkt ist daher die von BDB umgesetzte Speicherung von XMLDokumenten unter einem eindeutigen Namen. Darauf basierend wird eine erweiterte Verwaltung angelegt, um XMT-SAW Inhalte zu pflegen. 3.4.2 Verwaltungsstruktur Für die Verwaltung der XMT-SAW-Dokumente wird in der Datenbank eine XMLStruktur angelegt, die in Abbildung 3.2 vorgestellt ist. Diese erlaubt es, einen Überblick über alle in der Datenbank enthaltenen Dokumente zu erhalten. Informationen wie aktuelle Version und zugehöriger Kommentar sind dabei integriert. Oberstes Element ist der Knoten docs. Für jedes XMT-SAW Dokument in der Inv.-Nr.: 2005-06-01/071/IN99/2254 52 KAPITEL 3. METADATEN Datenbank wird diesem ein doc genannter Knoten zugeordnet, welcher das Dokument repräsentiert. Dessen Attribute sind name und id. Name ist ein verständlicher und aussagekräftiger Name für das Dokument, der vom Benutzer beim Einpflegen in die Datenbank zu wählen ist. Id ist der Identifier, welcher zur Identifikation des Dokumentes in der Datenbank angelegt und genutzt wird. Er wird bei Eingabe eines Dokumentes automatisch vom Programm angelegt. Mit diesen Informationen hat man einen Überblick über den Inhalt der Datenbank. Das doc-Element wird des Weiteren auch für die Versionsverwaltung benötigt. Um schnell die derzeit aktuelle Version des Dokuments in der Datenbank auslesen zu können, erhält das doc-Element ein Kind namens version. Dieses Element enthält nur einen Text-Knoten, welcher die Version in Form einer Zahl angibt. Weiterhin wird dem Umstand Rechnung getragen, dass bei vielen Versionen schnell der Überblick über die jeweiligen Änderungen verloren geht. Zwar lassen sich die Änderungen schnell auslesen. Jedoch erkennt man anhand der empfangenen XML-Daten nicht sofort die eigentlichen Veränderungen. Daher wird ein comment genannter Knoten als Unterelement von doc eingefügt. Für jede Version des Dokumentes in der Datenbank kann dieser Knoten angelegt werden. Zu welcher Version der Kommentar gehört, ist anhand des Attributes version erkennbar. Damit ist ein leichteres Auffinden einer bestimmten Änderung anhand des Kommentars möglich. Dieser findet sich als Text im comment-Element wieder. Diese einfache XML-Struktur wird wie die eigentlichen Dokumente in der Datenbank abgespeichert und erfüllt in dieser Form die grundlegenden Verwaltungsfunktionen. Für Features wie Versionierung oder Suche sind weitere Datenstrukturen gefragt, welche in den folgenden Abschnitten vorgestellt werden. 3.4.3 Implementierung Der zentrale Punkt aller Aktionen der Datenverwaltung ist eine grafische Oberfläche, die neu implementiert wurde. Diese ist in das aktuelle Spamix integriert und ermöglicht die Steuerung aller Funktionen, welche die Datenverwaltung anbietet. Dies sind im Einzelnen: • Einfügen eines neuen Dokumentes in die Datenbank von Festplatte • Einfügen eines in Spamix neu erstellten Dokumentes in die Datenbank • Einfügen einer neuen Version eines Dokumentes von Festplatte Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 53 • Speichern des aktuellen Bearbeitungszustandes eines Dokumentes in der Datenbank • Entfernen von Dokumenten aus der Datenbank • Suche von Elementen • Indizierung von Dokumenten für die Suche • Export von Dokumenten Die grafische Schnittstelle, inklusive der Präsentation aller Dialoge, ist in der Klasse DbFrontend umgesetzt. Diese wird in die vorhandene Implementierung eingebunden. Sie stellt die Nutzerschnittstelle zur Verfügung und leitet die Aktionen an die anderen Klassen weiter, welche die eigentliche Anwendungslogik implementiert haben. Den Mittelpunkt der Logik bildet die Klasse XMTSAWDbHandler. Diese wird von DbFrontend benutzt. Zur Verwaltung des Datenbestandes dienen die Funktionen: • getDocs Informationen über alle Dokumente in der Datenbank abfragen • getChanges Versionshistorie für ein Dokument abfragen • getComment Kommentar zu einem Dokument in einer bestimmten Version abfragen Sowohl getDocs als auch getComment bedienen sich der Informationen unterhalb des docs-Elementes, vorgestellt in Abschnitt 3.4.2 auf Seite 51. Von dort lassen sich über XPath-Anfragen der Form collection(’<containerName>’)/docs/doc die benötigten Informationen abfragen. Es finden sich Name, Identifier und Version aller Dokumente innerhalb des doc-Elementes, welche so einfach ausgelesen werden können. Den Kommentar kann man für jedes gewünschte Dokument über den Ausdruck collection(’<containerName>’)/docs/doc[@id=’docId’] /comment[@version=5] Inv.-Nr.: 2005-06-01/071/IN99/2254 54 KAPITEL 3. METADATEN erhalten. Für das Dokument mit dem Identifier „docId“ in der Version 5 wird hier der Kommentar ausgelesen. Die Funktion getChanges wiederum nutzt die Informationen in den gespeicherten Dokumenten, um die Änderungen zwischen zwei Versionen abzufragen. Dazu werden timestamp- und timeVaryingAttribute-Elemente im Dokument gesucht, deren Anfangs- oder Endzeit (vtBegin und vtEnd) mit der gewünschten Version übereinstimmen. Bei gleicher Anfangszeit wurde das Element in der Version hinzugefügt oder geändert, bei Endzeit entfernt. Elemente und Attribute, die diese Bedingung erfüllen, werden daher als Änderung zurückgegeben. 3.4.3.1 Export Um Dokumente zu exportieren, stehen in XMTSAWDbHandler die Funktionen exportDocument und getDocument zur Verfügung. Erstere exportiert das Dokument in eine Datei, letztere dagegen importiert das Dokument nach Spamix, um es dort zu bearbeiten. Beide Funktionen fragen die zu exportierende Dokumentversion aus der Datenbank ab, unter Benutzung der XQuery-Funktion in Anhang A.1. Zurückgeliefert wird dabei ein XmlDocument-Objekt, das in BDB XML ein XML-Dokument repräsentiert. Dieses hält die Struktur des in der gewünschten Version angeforderten Dokumentes. Über Funktionen des Xerces-Parsers17 kann es in eine Datei geschrieben werden. Um die Verwendung des Dokumentes in Spamix zu erlauben, wird der Dokumentinhalt dagegen in einen Speicherbereich transferiert und so dem in Spamix verwendeten XML-Parser zur Verfügung gestellt. Dieser liest die Dokumentenstruktur ein und erzeugt die Spamix-interne Repräsentation der Szenenbeschreibung. Für Versionierung, Suche und Export sind eigene Funktionen und Klassen implementiert, welche in den folgenden Abschnitten noch erläutert werden. 3.5 Versionierungssystem Verfahren zur Speicherung von Versionsdaten wurden schon ausgiebig vorgestellt. Eigenschaften wurde zwei Ansätze für die Versionierung als positiv gewertet: ein Verfahren auf Basis von Zeitstempeln sowie eines mit dem Einsatz von Deltas. Dieser Abschnitt behandelt die Frage, welches Verfahren für die XMT-SAW spezifische Versionierung unter Verwendung von Berkeley DB die besseren Ergebnisse liefert. Eine Gegenüberstellung wird anhand der jeweiligen Eigenschaften 17 http://xml.apache.org/xerces-j/ Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 55 und Ergebnisse in verschiedenen Untersuchungen eine Entscheidung zugunsten eines der Verfahren liefern. Details hierzu gibt der Teil „Speicherung von Versionsdaten“ ab Seite 59. Doch vorher wird der bis hierhin offene Punkt der Bestimmung dieser Versionierungsdaten bei zwei gegebenen XMT-SAW Dokumenten behandelt. Der kommende Teilabschnitt widmet sich diesem Thema. 3.5.1 XMT-SAW spezifische Bestimmung von Versionierungsdaten Allen Versionierungsverfahren ist gleich, dass die Unterschiede zwischen zwei Versionen erkannt werden müssen. Die möglichen Änderungen wie neue Knoten oder veränderte Attribute wurden bereits vorgestellt. Eine Erkennung derselben erfordert andere Schritte als bei zeilenbasierten Verfahren, wie in diesem Zusammenhang schon erläutert wurde. Wie sich dies mit XMT-SAW Dokumenten umsetzen lässt, ist Inhalt dieses Abschnitts. 3.5.1.1 Persistente Identifier (PID) Die Möglichkeit, dass viele Knoten in einem XML-Dokument denselben Namen haben können, erschwert die Differenzierung beim Dokumentenvergleich. Wurde einer von verschiedenen gleichnamigen Knoten zwischen zwei Versionen verändert, ist nicht immer erkennbar, welcher von diesen verändert wurde. Eine eindeutige Zuordnung ist schwer möglich. Daher ist für die Versionierung mit XML (somit auch XMT-SAW) die Identifizierbarkeit von Knoten entscheidend. Um dies zu ermöglichen, werden persistente Identifier eingeführt. Dies sind eindeutige Identifikatoren, welche jedem Knoten zugewiesen werden, diesen innerhalb aller Dokumente eindeutig machen und mit dem Dokumenteninhalt in der Datenbank gespeichert werden. Über diese Identifier ist es problemlos möglich, Elemente eines Dokumentes über viele Versionen verfolgen und unterscheiden zu können. Dies ist wichtig für eine Vereinfachung der kompletten Versionierung. Anhand des PID kann man bei gegebenem Knoten diesen in einem anderen Dokument suchen. Bei NichtAuffinden ist dieser dort entfernt. Falls gefunden, kann einfach die Attributmenge der Knoten auf Unterschiede untersucht werden. Das Vertrauen in PIDs erfordert, dass jedem Knoten eines XMT-SAW Dokumentes ein solcher zugewiesen wird, da andernfalls der entwickelte Algorithmus Inv.-Nr.: 2005-06-01/071/IN99/2254 56 KAPITEL 3. METADATEN Knotenname Attribut room id layer id audio id additionalSrc src spamixSrc ref Tabelle 3.2: ID-geeignete Attribute fehleranfällig oder unkorrekt arbeiten könnte. Dabei ist ein vereinfachender Faktor in der Struktur von XMT-SAW Dokumenten zu beachten: das Vorhandensein von als PID nutzbaren Attributen. Nutzbare Ids Die XMT-SAW spezifische Versionierung ermöglicht es, bezüglich der Zuweisung von PIDs eine Vereinfachung vorzunehmen. Grund hierfür ist, dass das Schema für XMT-SAW Dokumente für eine Vielzahl der Knoten ein Attribut aufweist, das sich als Identifier einsetzen lässt. Voraussetzung ist dabei, dass jeder Knoten für dieses Attribut einen dokumentenweit eindeutigen Wert zugewiesen bekommt. Ist das entsprechende Attribut eines Knotens in einem gegebenen Dokument vorhanden und dessen Wert eindeutig, ist das Einfügen eines PID für diesen Knoten unnötig. Dies spart Aufwand bei der Dokumentenverwaltung sowie unnötigen Overhead durch doppelte Identifikationsmöglichkeiten. Tabelle 3.2 zeigt einen Ausschnitt von Knoten mit zugehörigen, als Identifier nutzbaren Attributen. Des Weiteren existieren Elemente, welche in jedem Dokument nur ein Mal auftreten können – daher muss für diese keine PID erzeugt werden. Dazu gehören XMT-SAW, body, head, spamixCfg oder Timestamp. Verwaltung von PIDs Trifft die Versionsverwaltung bei einem neu zu verwaltenden Dokument auf einen Knoten, bei dem das zugehörige Attribut nicht gesetzt wurde, oder bei dem kein geeignetes Attribut existiert, so muss ein Identifier generiert und eingefügt werden. Zu diesem Zweck werden alle Knoten eines neuen Dokumentes, oder einer neuen Version eines existierenden Dokumentes, auf das Vorhandensein eines PID-fähigen Attributes oder eines PID überprüft. Jedes Dokument wird nur inklusive der PIDs abgespeichert, d.h. es existieren in der Verwaltung keine Dokumente mit nicht eindeutig identifizierbaren Knoten. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 57 Das PID-Prinzip erfordert auch, dass Änderungen an Dokumenten, welche der Versionsverwaltung unterliegen, nur auf Dokumenten aus der Datenbank geschehen dürfen. Hier haben alle Knoten einen PID, die zur Bearbeitung mit ausgeliefert wird. Beim Rückschreiben der geänderten Version lassen sich Änderungen wie beschrieben auf den Identifikatoren basierend nachvollziehen. Würde jedoch ein externes, nicht in der Datenbank verwaltetes Dokument als neue Version eingefügt, wären in diesem noch keine PIDs vergeben worden. Somit würden auch Knoten, die keinerlei Unterschiede aufweisen, mangels übereinstimmender Identifikation als verschieden erkannt. 3.5.1.2 Reihenfolge und Textinhalte von Knoten Weiterer Faktor für eine Differenzerkennung von XML-Dokumenten ist die Reihenfolge von Knoten. Im hier vorgestellten Fall wird die Versionierung dadurch erleichtert, dass Knoten in XMT-SAW Dokument unabhängig von der Reihenfolge sind. Somit ist die Reihenfolge von Elementen bei der hier vorgestellten Versionierung nicht berücksichtigt, d.h. verschobene Elemente werden nicht vom System als Unterschied erkannt. Auch zu beachten ist der Umstand, dass XMT-SAW Dokumente keine reinen Textknoten oder uninterpretierte Elemente (CDATA) besitzen. Somit treten Elemente der Form <element>text</element> nicht auf. Veränderte Textinhalte von Knoten müssen daher nicht erkannt werden. 3.5.1.3 Prinzip der Differenzbestimmung Die Bestimmung von Versiondifferenzen erfolgt entsprechend einem Algorithmus, der über die XML-Struktur der beiden zu vergleichenden Dokumente iteriert. Er macht dabei in der Implementierung vom vorgestellten Prinzip der PIDs Gebrauch. Gegeben seien zwei XML-Bäume B1 und B2. B1 repräsentiert die Struktur der neuen Version eines XML-Dokumenten, B2 die der alten Version. Besuche alle Knoten von B1 /*Erkenne Einfügungen und Updates*/ Sei x der aktuelle Knoten aus B1 If x hat keinen Partner in B2 Inv.-Nr.: 2005-06-01/071/IN99/2254 58 KAPITEL 3. METADATEN vermerke Neuer_Knoten(x) Else sei y Partner von x in B2 Seien a Attribut von x, b Attribut von y Für alle a If a hat Partner in b If Wert(a) != Wert(b) vermerke Attribut_Änderung(a) Else vermerke Attribut_Neu(a) Für alle b If b hat keinen Partner in a vermerke Attribut_Entfernt(b) Besuche alle Knoten in B2 /*Erkenne Löschungen*/ Sei y aktueller Knoten aus B2 If y hat keinen Partner in B1 vermerke Neuer_Knoten(y) Quelltext 3.2: Differenzbestimmung zweier XML-Dokumente Der Algorithmus macht nichts anderes, als zuerst über den XML-Baum des neuen Dokumentes zu iterieren. Über Vergleiche mit dem alten Dokument lässt sich erkennen, ob ein Knoten neu hinzugefügt wurden. Falls nicht, können ebenso alle Unterschiede in den Attributmengen, d.h. Einfügungen, Löschungen oder Änderungen, erkennen. Anschließend liefern ein Durchlaufen des alten Dokumentes und ein Vergleich mit der neuen Version alle gelöschten Knoten zurück. Somit werden alle in XMT-SAW Dokumenten möglichen Änderungen erkannt. Der Algorithmus lässt sich auf unterschiedliche Arten implementieren. Liegt die Hauptlogik auf der Ebene des Anwendungsprogramms, das auf die Datenbank zugreift, wird die Iteration über Objekte abgewickelt, welche XML-Elemente der Dokumente in der Datenbank repräsentieren. Verlagert man die Logik in die Datenbank, kann die Iteration über XQuery Funktionen direkt auf dem Datenbestand durchgeführt werden. Beide Verfahren weisen unterschiedliche Performance-Charakteristiken auf und eignen sich jeweils für unterschiedliche Verfahren zur Speicherung von Versionsdaten. Dies zeigt sich in Abschnitt 3.5.2.3. Wie die Änderungen vermerkt werden, ist abhängig von der Methode zur Speicherung von Versionsdaten. So wird bei Deltas für jede Änderung ein entInv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 59 sprechendes Element (siehe 3.5.2.1) erzeugt, das die Änderung aufzeichnet. Beim Zeitstempelverfahren werden entsprechend Elemente eingefügt, welche die Gültigkeitszeiten der veränderten Elemente anpassen. 3.5.2 Speicherung von Versionsdaten Nachdem die Möglichkeiten zur Speicherung der Versionsdaten, d.h. der Differenzen zwischen zwei Dokumenten, vorgestellt wurden, geht es jetzt an die Umsetzung für IOSONO. Es werden zwei Verfahren detailliert beschrieben und getestet: Deltas sowie eine auf τ XQuery basierende Methode. Über diesen Vergleich wird die geeignetste Methode bestimmt. Gleichzeitig wird so schon die Realisierung des entsprechenden Versionierungssystems aufgezeigt. 3.5.2.1 Deltas Das erste untersuchte Verfahren basiert auf der Verwendung von Deltas für die Speicherung von Versionsdaten. Prinzip Grundlage der Speicherung ist der Fakt, dass die aktuellste Version eines Dokumentes stets komplett gespeichert ist. Ältere Versionen befinden sich dagegen nicht komplett in der Datenbank, sondern sind nur in den Änderungen – d.h. in Form der Deltas – repräsentiert. Die Änderungen sind dabei von der aktuelleren Version zur älteren bestimmt. Der Vorteil dieses Vorgehens: die häufigste Anwendung, das Abfragen der aktuellsten Version, kann sehr schnell und ohne großen Aufwand geschehen. Dafür braucht nur das entsprechende Dokument aus der Datenbank abgefragt werden. Zur Abfrage älterer Versionen dagegen müssen die Änderungen in umgekehrter Reihenfolge auf das Ausgangsdokument angewendet werden. Klar ist: der dafür nötige Aufwand nimmt mit zunehmender Distanz zur Vollversion zu. Um einem linearen Anstieg entgegenzuwirken werden daher noch Hauptversionen eingeführt. Dabei handelt es sich um Versionen, die in regelmäßigen Abständen zusätzlich zu den eigentlichen Änderungen als komplettes Dokument gespeichert werden. Somit kann bei Abfragen weit zurück liegender Versionen auf die nächste Hauptversion zugegriffen werden, um die Änderungen einzubringen. Die Deltas verzeichnen nun alle Änderungen, die sich zwischen zwei Version ergeben haben. Sie enthalten eine Reihe von Operationen, mit welchen man von der neueren zur älteren Version kommen kann. Dabei sind Deltas nicht geordnet, Inv.-Nr.: 2005-06-01/071/IN99/2254 60 KAPITEL 3. METADATEN d.h. sie geben keine explizite Ordnung vor. Jedoch ist die Ausführungsreihenfolge zu beachten. Sollen z.B. Kindelemente vor den zugehörigen Eltern wiederhergestellte werden, kann dies fehlerhafte Ergebnisse verursachen. Daher gilt die Regel, dass Eltern immer vor Kindern zu bearbeiten sind. Im entwickelten Algorithmus ist dies erfüllt durch die Bearbeitungsreihenfolge sowohl beim Erkennen von Änderungen als auch beim Rückändern. Änderungen werden in Reihenfolge und Tiefe geordnet gespeichert und in dieser Folge auch umgekehrt. Im Falle von Löschungen ist das Prinzip umzukehren. Durch die Speicherung von Änderungen mit dem kompletten Pfad sind auch Eltern von Änderungen einfach erkennbar. Details Die Deltas verzeichnen die Unterschiede zwischen zwei Versionen. Dies geschieht strukturerhaltend. Abgelegt werden sie in einem XML-Dokument, im Weiteren History genannt. Versionsunterschiede äußern sich in verschiedenen Änderungen, welche mittels zugehöriger XML-Elemente abgelegt werden. Die folgende Auflistung zeigt die entsprechenden Elemente sowie deren Bedeutung: • changedAttribute: Beschreibt ein verändertes Attribut • addedAttribute: Hinzugekommenes Attribut • removedAttribute: Gelöschtes Attribut • addedNode: Neuer Knoten • removedNode: Gelöschter Knoten Alle Knoten, die Änderungen an Attributen betreffen, haben zwei Attribute: name und value. Während name den Namen des Attributes, das von der Änderung betroffen ist, erthält, wird value der Wert des Attributes aus der alten Version des Dokumentes zugewiesen. Elemente, welche Knoten betreffen, haben keine Attribute. Stattdessen enthalten sie entweder den kompletten XML-Code eines entfernten Knoten, inklusive aller Kind-Elemente. Oder eben den eines Knotens, so wie er neu in das Dokument aufgenommen wurde. Um die Änderungen in die Dokumentenstruktur einordnen zu können, werden die aufgeführten Elemente unter dem Lokalisierungspfad gespeichert, der zu dem veränderten Knoten oder Attribut führt. Somit kann die History durchlaufen werden und bei jedem Element dessen Lokalisierungspfad benutzt werden, um die Änderung im Originaldokument zu lokalisieren und einzubringen. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 61 Abbildung 3.3: Ausschnitt aus der Struktur eines XMT-SAW Dokuments Dazu ein kurzes Beispiel, basierend auf einem schemahaft konstruierten XMTSAW Dokument mit einer Struktur wie in Abbildung 3.3. Das Element audio wird über das Attribut id mit dem Wert 4 identifiziert. Es wird nun angenommen, dass die Anfangszeit (festgehalten im Attribut begin) dieses Audioobjektes von 20 auf 10 geändert wurde. Der Lokalisierungspfad zum zugehörigen audio-Element und dem begin-Attribut wäre dementsprechend /XMT-SAW/body/layer[@id=’layer0’]/audio[@id=’4’] /@begin Soll diese Änderung in die History gespeichert werden, ergibt sich eine XMLStruktur wie in Abbildung 3.4 auf der nächsten Seite gezeigt. Klar ist, dass nicht der aktuelle, sondern der alte Wert des Attributes in die History übernommen wird. Man sieht, dass die komplette Struktur des Original-Dokumentes bis zum geänderten Element, somit dessen kompletter Lokalisierungspfad, in der Struktur abgebildet ist. Die Änderung selber wird in Form des Elementes changedAttribute vermerkt. Dieses enthält mit dem Namen und Wert des geänderten Attributes alle Informationen für die Wiederherstellung der Vorgängerversion. Gesamtstruktur Die so strukturierten Änderungen müssen nun Informationen erhalten, um einem Dokument sowie einer Version zugeordnet werden zu können. Dafür gibt es eine eigene XML-Struktur zur Verwaltung der History. Das history-Element ist oberster Knoten. Es besitzt für jedes Dokument ein itemInv.-Nr.: 2005-06-01/071/IN99/2254 62 KAPITEL 3. METADATEN Abbildung 3.4: XML-Struktur der Versionsdaten in Form von Deltas Unterelement. Dessen Attribut id identifiziert das Dokument, zu welchem die History-Einträge gehören. Unter diesem Element finden sich für jede Version alle Änderungen in Form der Elemente addedNode, removedNode, addedAttribute, changedAttribute und removedAttribute, die schon aufgeführt wurden. Aufgeführt sind diese im values-Element, das die zugehörige Version mittels des versionAttributes angibt. Daraus ergibt sich eine XML-Struktur, die folgendem Aufbau folgt: <history> <item id=’the_document_id’> <values version=’1’> <-- path to changed nodes/attributes --> <changedAttribute name=’attribute_name’ value=’attribute_value’/> <addedAttribute name=’...’ value=’...’ /> <removedAttribute name=’...’ value=’...’ /> <addedNode> <node_name> ... node content including all subnodes and attributes ... Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 63 </addedNode> <removedNode> ... </removedNode> </values> <values version=’...’> ... </values> </item> <item id=’next_document_id’> ... </item> </history> Quelltext 3.3: History-Struktur bei Delta-Versionierung Diese Struktur kann beliebige Ausmaße und Tiefe annehmen, ist dabei aber immer mit der eigentlichen Dokumentenstruktur verknüpft. Bewertung Welches sind die Nachteile dieses Verfahrens? Der gravierendste Punkt ist der hohe Wiederherstellungsaufwand für ältere Versionen. Für alle Versionen, die aktuellste ausgenommen, müssen Deltas in das aktuelle Dokument eingebracht werden. Mit zunehmender Anzahl an Versionen, die wiederhergestellt werden müssen, steigt daher auch der Aufwand. Um diesen Aufwand einzuschränken, werden Hauptversionen benutzt. Diese gehen jedoch mit steigendem Overhead einher. Somit ist ein Kompromiss zu finden bzw. die Priorität auf Performance oder Speicherplatz zu legen. 3.5.2.2 Zeitstempel Beim Zeitstempelverfahren erhalten alle Elemente eines Dokumentes eine Gültigkeitszeit. Im Unterschied zum Verfahren in τ XQuery wird jedoch nicht mit Zeitwerten gearbeitet. Stattdessen werden Versionen durch ganzzahlige Versionsnummern repräsentiert. Realisiert wird die Zuweisung von Versionsnummern über die beiden Elemente timestamp und timeVaryingAttribute. Während timestamp der Markierung von Knoten dient und als Kind-Element zugewiesen wird, werden Attribute mit timeVaryingAttribute versioniert. Beide Elemente enthalten die Attribute vtBegin Inv.-Nr.: 2005-06-01/071/IN99/2254 64 KAPITEL 3. METADATEN und vtEnd zur Markierung von Anfang und Ende der Gültigkeitszeit, angegeben mittels einer Versionsnummer. Letzteres erhält zudem die Attribute name und value, um Attributname und -wert des versionierten Attributes anzugeben. Vergabe von Versionsnummern Bei dem Einpflegen eines Dokuments in die Datenbank wird die Dokumentenstruktur durchlaufen und allen Knoten eine Versionsnummer in Form des timestamp-Elementes zugewiesen. Das zugehörige Attribut vtBegin wird auf den Wert 1 (für die erste Dokumentversion) gesetzt. Die Attribute des Dokuments werden noch nicht versioniert – um unnötigen Overhead zu vermeiden, passiert dies erst mit der ersten Änderung an einem Attribut. Dies erfordert auch, beim Retrieval einer Version zunächst alle Attribute eines Elementes abzufragen, welche diesem zugeordnet sind. Daraufhin werden alle Attribute, welche mittels timeVaryingAttribute versioniert sind, auf Gültigkeit untersucht und dementsprechend zugewiesen. Wird ein neuer Knoten erkannt, erhalten dieser sowie alle seine Kindelemente eine Versionsnummer über einen eigenen timestamp. Für neue Attribute wiederum wird ein timeVaryingAttribute mit Name und Wert des Attributes sowie einer Anfangsversion entsprechend der neuen Version eingefügt. Wird ein Knoten gelöscht, erhält das zugehörige timestamp-Element das Ende der Gültigkeitszeit durch Setzen von vtEnd auf die aktuelle Version. Ebenso wird vorgegangen bei gelöschten Attributen, welche schon in ein timeVaryingAttributeElement integriert sind. Ist dieses noch nicht vorhanden, wird es angelegt und mit den benötigten Werten gefüllt, sowie das Attribut aus seinem Elternelement entfernt. Damit wird vermieden, dass es wegen seines Vorhandenseins im Element später als gültig erkannt wird. Das Vorgehen bei geänderten Attributen ist ähnlich: ist noch kein entsprechendes timeVaryingAttribute vorhanden, wird dies angelegt und das Attribut aus dem Elternelement gelöscht. Andernfalls wird dem aktuellsten timeVaryingAttributeElement ein tvEnd zugewiesen, welches dort noch nicht vorhanden ist. Zudem wird ein neues timeVaryingAttribute mit aktuellem Attributwert und der aktuellen Dokumentversion als Anfangszeit zugewiesen. Das bei den Deltas eingeführte Beispieldokument sähe nach Einbringen in die Datenbank aus wie in Darstellung 3.5. Wie erläutert hat jeder Knoten ein Unterelement timestamp – in der Abbildung kursiv markiert – erhalten. Zu beachten ist, dass bestimmte Elemente keiner Versionierung bedürfen. Dies sind z.B. das oberste Element XMT-SAW oder Knoten wie body und head, welche in jedem Dokument nur einmal vorkommen und keine eigenen änderbaren Daten Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 65 Abbildung 3.5: Versioniertes XML-Dokument mit Zeitstempeln, Version 1 Abbildung 3.6: XML-Dokument in Version 2 oder Attribute enthalten. Daher bleiben diese unverändert. Soll nun hier wiederum eine Änderung des Attributes begin von 20 auf 10 vermerkt werden, ändert sich die XML-Struktur wie in der Abbildung 3.6 gezeigt. Das Dokument befindet sich dann in Version zwei. Es ist erkenntlich, dass zwei timeVaryingAttribute-Elemente hinzugekommen sind. Das erste beschreibt den Wert des Attributes vtBegin in Version eins, das zweite ab Version zwei. Versionsabfrage Um eine bestimmte Version zu finden, ist eine XQuery-Anfrage nötig. Darin wird eine Funktion definiert, welche die Selektion aller Elemente ermöglicht, die der geforderten Version entsprechen. Dies sind alle Knoten Inv.-Nr.: 2005-06-01/071/IN99/2254 66 KAPITEL 3. METADATEN und Attribute, deren timestamp einen vtBegin-Wert kleiner oder gleich der Versionsnummer haben, sowie einen offenen vtEnd-Wert bzw. einen Wert größer der Versionsnummer für das Attribut vtEnd. Bewertung Nachteil bei diesem Verfahren ist der Overhead durch die Zuweisung von timestamp-Elementen für Knoten, welche nie einer Änderung unterzogen waren. Zudem ist auch bei Abfrage der aktuellen Version etwas Verarbeitungsaufwand nötig, da aus dem Pool vorhandener Elemente im Dokument diejenigen ausgewählt werden müssen, welche eine der gefragten Version entsprechende Versionsnummer aufweisen. Dafür ist die Abfrage von allen Versionen gleich performant. Einbrüche bei weiter zurück liegenden Versionen gibt es nicht, da alle Anfragen auf einem Dokument ausgeführt werden können. 3.5.2.3 Vergleich von Deltas und Zeitstempeln Ein Vergleich verschiedener Faktoren soll die bessere der beiden Varianten bestimmen. Festgemacht wird dies an dem Overhead durch die Versionierungsdaten, die Zeiten für das Abspeichern von Dokumenten in der Datenbank als auch an der Zeit, die zum Auslesen einer bestimmten Dokumentversion benötigt wird. Datenaufwand für die Änderungsspeicherung Der Umfang der für die Änderungsspeicherung benötigten Daten zeigt, welcher Overhead sich durch die Versionierung, bezogen auf die eigentlichen Dokumentdaten, ergibt. Es wurden zur Untersuchung dieser Größe Dokumente in die Datenbank eingepflegt und mit einer Reihe neuer Dokumentversionen versehen. Die Tabelle 3.3 auf der nächsten Seite zeigt den Overhead von Versionsdaten zur Größe der jeweils aktuellen Dokumentversion. Zur Verdeutlichung nochmals kurz ein Überblick, wie sich die Versionsdaten zusammensetzen. Bei Deltas gibt es versionsabhängige Daten erst nach der zweiten Version, da in Version eins das Originaldokument ohne zusätzliche Informationen in der Datenbank gespeichert ist. Der Overhead bleibt damit bei 0%. Ab der zweiten Version werden alle Änderungen strukturiert gespeichert. Das Dokument bleibt erhalten, wie es ist. Dazu kommen je nach Änderung die Elemente: • addedNode mit dem neuen Knoten als Kind • addedAttribute mit den Attributinformationen Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN Version | 1 2 3 4 5 Delta Versions- Gesamt- Overdaten größe head [kByte] [kByte] [%] 20.5 305.4 6.7 26.3 311.3 8.5 50.0 334.9 14.9 57.8 342.7 16.9 371.3 656.2 56.6 67 Timestamp Versions- Gesamt- Overdaten größe head [kByte] [kByte] [%] 0 289.4 0 32.7 322.1 10.2 65.4 354.8 18.4 370.8 374.6 99.0 681.1 970.5 69.1 Tabelle 3.3: Overhead der Versionierungsverfahren • removedNode und • changedNode mit denselben Infos, letzteres zusätzlich mit dem alten Attributwert • deletedNode mit dem gelöschten Knoten als Kind Wurden in der aktuellen Dokumentversion viele Knoten eingefügt, ergibt sich großer Overhead, da diese Elemente in kompletter Struktur sowohl im Dokument als auch in der Versionsstruktur enthalten sind. Dies sind in diesem Moment redundante Daten. Wird ein Knoten wieder gelöscht, kommt er in Form eines deletedNode wieder komplett in die Versionierung und ist daher erneut doppelt gespeichert. So sind diese Daten stets redundant vorhanden. Beim Zeitstempelverfahren entsteht schon mit der ersten Version Overhead, da jeder Knoten ein timestamp-Element zugeordnet bekommt. Das Problem der Redundanz ist geringer als beim Delta-Verfahren. Dies lieg daran, dass neue Knoten im Originaldokument eingefügt werden, aber keine weitere Stelle diese Daten enthält. Beim Entfernen eines solchen Knotens wird nur dessen Zeitstempel angepasst, die eigentlichen Daten jedoch nicht mehrfach gespeichert. Somit werden für Änderungen • timestamp- und • timeVaryingAttribute-Elemente eingefügt bzw. deren Gültigkeitszeiten angepasst. Letzteres passiert bei gelöschten Knoten oder Attributen, wo das das vtEnd-Attribut auf die entsprechende Version gesetzt wird. Bei gelöschten Attributen wird dieses zudem aus dem betroffenen Element entfernt. Inv.-Nr.: 2005-06-01/071/IN99/2254 68 KAPITEL 3. METADATEN Speicherzeiten Getestet wurde, wie groß der Aufwand für das Einfügen einer neuen Dokumentversion ist. Dabei wurden unterschiedliche Szenarien untersucht. Zu einem in der Datenbank befindlichen Dokument wurde eine neue Version hinzugefügt. Zum einen getestet mit zwei relativ großen Dokumenten (300 kByte) und Änderungen von ca. 30 neuen bzw. entfernten Elementen. Dabei wurden zwei unterschiedliche Implementierungen untersucht, welche starke Zeitunterschiede aufweisen. Weiterhin wurde untersucht, wie sich die Systeme verhalten, wenn viele Änderungen (ca. 230) auftreten, und dabei die beiden Versionen starke Größenunterschiede aufweisen (300 kByte gegenüber 7 kByte). Hier wurde auch getestet, wie sich die Reihenfolge der Größen bemerkbar macht – d.h. die aktuelle Version in der Datenbank ist kleiner als die neue hinzugefügte Version, sowie in umgekehrter Form. Bezüglich der Implementierung des Algorithmus zur Bestimmung der Versionsdifferenzen wurden drei verschiedene Verfahren untersucht: • Verfahren 1 Mit der ersten gewählten Implementierung ergaben sich sehr langsame Zeiten für das Zeitstempelverfahren, aber auch das Delta-Verfahren war relativ langsam. Dabei wurden die Iterationen des Algorithmus auf Objekten des XML-Baumes der Dokumente ausgeführt. Dabei musste für jedes Element des neuen Dokumentes eine Anfrage an die Datenbank gestellt werden, was einen hohen zeitlichen Aufwand erforderte. • Verfahren 2 Eine erste Verbesserung konnte erreicht werden, indem diese Anfragen pro Element beim Durchlaufen der alten Version des Dokumentes eingespart wurden. Dafür werden beim Durchlaufen des neuen Dokumentes alle vorhandenen Elemente vermerkt. So kann vergleichend mit der alten Version festgestellt werden, welche Elemente nicht mehr vorhanden sind und somit gelöscht wurden. • Verfahren 3 Nach Änderung der Implementierung auf ein Verfahren, das nahezu alle Iterationen mittels XQuery-Anfragen und -Funktionen ausführt, waren starke Verbesserungen der Ergebnisse möglich. Dadurch konnten akzeptable Speicherzeiten für dieses Verfahren ermöglicht werden. Jedoch muss dafür das verwendete DBMS Funktionen in XQuery unterstützen. Tabelle 3.4 zeigt die erzielten Speicherzeiten. Die Spalte Verfahren gibt an, mit welchem Verfahren die Bestimmung der Versionsdaten vonstatten ging. In der ersten Zeile, welche die schlechtesten Ergebnisse zeigt, ist dies das Verfahren 1. Alle weitern Zeilen zeigen die optimierte Umsetzung, mit Verfahren 2 für Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN Verfahren 1 2/3 2/3 2/3 Dok 1 [kByte] 300 300 300 7 69 Dok 2 Änderungen Delta Zeitstempel [kByte] [Anzahl] [s] [s] 300 30 35.0 70.0 300 30 18.5 13.0 7 230 1.9 4.3 300 230 0.2 6.4 Tabelle 3.4: Speicherzeiten Deltas und Verfahren 3 mit Zeitstempeln. Dok 1 und Dok 2 geben die Größe der beteiligten Dokumente an, wobei Dok 1 die aktuelle Version darstellt, und Dok 2 die neu eingefügte. Änderungen enthält die Anzahl an neuen/gelöschten Knoten sowie Attributänderungen. Es sind durch die Verwendung von XQuery gute Ergebnisse erzielbar. Es zeigt sich dabei auch, dass die Zeiten für das Einpflegen einer neuen Version stark von der Größe der zu vergleichenden Dokumente, als auch von der Anzahl der veränderten Elemente abhängen. Die Größe macht sich beim Aufwand des Durchlaufens der Dokumentstruktur bemerkbar, sowohl bei Deltas als auch bei Zeitstempeln. Letztendlich zeigen letztere die bessere Performance. Die Anzahl der zu vermerkenden Änderungen spiegeln sich dagegen bei den Zeitstempeln stärker in einer längeren Verarbeitungszeit wieder. Der Grund liegt darin, dass hier für jede Änderung an einer beliebigen Stelle innerhalb eines Dokumente Knoten und Attribute eingefügt werden müssen, was relativ aufwendig ist. Speziell im Vergleich zu den Deltas, wo alle Versionierungsdaten in einer einzigen XML-Struktur gespeichert werden und diese in einem Änderungsvorgang in die Datenbank eingebracht werden kann. Retrievalzeiten Die Retrievalzeiten geben an, wie lange das Auslesen eines Dokumentes in einer gegebenen Version aus der Datenbank andauert. Dies wurde mittels in der Datenbank befindlichen Dokumenten in diversen Versionen untersucht. Beim Delta-Verfahren wurde ohne Hauptversionen operiert, da das Auslesen von Hauptversionen dem von Version eins entspricht, da keine Änderungen eingebracht werden müssen. Alle sechs untersuchten Versionen sind dem Versionierungsverfahren entsprechend gespeichert – die Deltas über eine eigene XMLStruktur, Zeitstempel mittels zugehöriger Elemente im Dokument. Wie schon in den theoretischen Betrachtungen angesprochen sind die Auslesezeiten (Abbildung 3.7 auf der nächsten Seite) beim Zeitstempelverfahren versionsunabhängig. Die Deltas dagegen hängen stark von der Anzahl der umzukehInv.-Nr.: 2005-06-01/071/IN99/2254 70 KAPITEL 3. METADATEN Abbildung 3.7: Retrieval mittels Zeitstempeln und Deltas renden Änderungen ab. Der Aufwand dafür steigt linear im Verhältnis der einzubringenden Änderungen an. Mit Zeitstempeln sind immer die geringsten Zeiten zu erwarten. 3.5.2.4 Evaluierung Nach dem Vergleich der in den Untersuchungen erzielten Ergebnisse fällt die Entscheidung zwischen Delta- und Zeitstempel-Verfahren zugunsten der Zeistempelbasierten Lösung. Primärer Entscheidungspunkt sind die konstant sehr kurzen Auslesezeiten für beliebige Dokumentversionen. Auch die Zeiten zum Einbringen neuer Versionen in die Datenbank sind als ausreichend anzusehen, wenn auch bei bestimmten Konfigurationen relevante Abstände zum Delta-basierten Prinzip auftreten. Im strukturellen Bereich dagegen überzeugen die Zeitstempel mit einer klaren Struktur innerhalb des Originaldokumentes; eine externe Verwaltungsstruktur wie von Deltas benötigt ist überflüssig. Dies erleichtert auch den Umgang mit der Ähnlichkeitssuche, wo der Platz eines XML-Elementes in der Datenbank eine Rolle spielt. Dieser bleibt bei Zeitstempeln unverändert – bei Deltas dagegen wandern Elemente in die Änderungsstruktur, ausgehend vom zuletzt aktuellen Versionsstand. Auch ist im Sinne des Overheads der Zeitstempel das optimalere Verfahren, da er hilft, Speicherplatz zu sparen. Jedoch ist zu bedenken, dass eine rasche Ausführung des Zeitstempelverfahrens die Definition eigener Funktionen in XQuery seitens des Datenbanksystems verlangt. Dies stellt noch keine Selbstverständlichkeit dar. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 71 3.5.3 Implementierung Kernpunkt der Implementierung des Versionierungssystems sind die Funktionen insertDoc und storeDoc, beide von XMTSAWDbHandler implementiert. Sie werden aufgerufen, wenn der Nutzer in der Dialog-Eingabe entsprechend auf „Dokument einfügen“ oder „Version hinzufügen“ klickt, oder beim Speichern von Szenenbeschreibungen über Spamix. Die Funktion insertDoc fügt ein neues Dokument in die Datenbank ein, während storeDoc eine neue Version eines Dokumentes speichert. Beide Funktionen nutzen die Funktionalität des Versionierungssytems, das basierend auf τ XQuery implementiert ist. Neues Dokument Wird ein neues Dokument über insertDoc eingefügt, werden zu Beginn alle Elemente des Dokumentes mit einem Zeitstempel versehen. Dafür wird das Dokument in seiner ganzen Hierarchie durchlaufen. Dies geschieht auf dessen XML-Struktur über Xerces-spezifische Objekte, welche das XMLDokument repräsentieren. Zugleich muss sichergestellt werden, dass alle Elemente ihren PID haben. Im Zuge des Iterierens über alle Dokumentelemente kann dieser, wo benötigt, einfach eingefügt werden. Der PID ergibt sich aus einer Kombination von Elementname und aktueller Systemzeit. Anschließend wird das Dokument inklusive Zeitstempeln in die Datenbank eingefügt und die docs-Struktur (vorgestellt in 3.4.2) um einen neuen Eintrag erweitert. Neue Version Mittels der Funktion storeDoc wird eine neue Version in die Datenbank eingefügt. Dafür werden, wie in 3.5.1.3 erläutert, die Unterschiede zwischen alter und neuer Version des Dokumentes bestimmt. Die Bestimmung der Differenzen geschieht hier über mehrere Funktionen, die in XQuery formuliert und ausgeführt werden. Dargestellt sind diese Funktionen in Anhang A.2. Sie ermöglichen – da direkt vom Datenbanksystem auf dem Datenbestand ausgeführt – die schnellste Ausführung der Differenzbestimmung. Zum Abschluss werden diese Änderungen inklusive Zeitstempel in das neue Dokument übertragen. Für geänderte oder gelöschte Elemente werden zudem die Zeitstempel des Dokumentes in der Datenbank angepasst. Das dem Dokument entsprechende doc-Element in der Verwaltungsstruktur (3.4.2) wird anschließend um einen neuen Kommentar ergänzt und die Versionsnummer angepasst. Inv.-Nr.: 2005-06-01/071/IN99/2254 72 KAPITEL 3. METADATEN 3.6 Suche über Metadaten Es gilt, die Suche innerhalb der XMT-SAW Dokumente auf die Strukturen und Techniken, welche von BDB XML angeboten werden, umzusetzen. Nach einer Vorstellung der typischen Suchvorgänge werden speziell für die Ähnlichkeitssuche einige Techniken aufgelistet und die umgesetzte Implementierung erläutert. 3.6.1 Was soll gesucht werden? Die Suche soll es ermöglichen, innerhalb von Szenenbeschreibungen Teile derselben auf Grundlage von Attributen und Attributwerten aufzufinden. Alle Suchfunktionen beschränken sich auf die Suche anhand von Attributwerten. Eine Volltextsuche über Textknoten wird nicht umgesetzt – im XMT-SAW Format sind solche nicht vorhanden. So läuft alles darauf hinaus, über einem gegebenen Attributwert und zusätzlichen Infos wie den Attributnamen oder die Beschränkung auf Elemente mit bestimmten Namen, ein oder mehrere Element(e) aus einem XML-Dokument zu erhalten. Die Anforderung „Suche“ lässt sich in drei Teilbereiche untergliedern. Erster ist die Suche nach ganzen Zeichenketten. Weitere Anforderung ist die Suche anhand von gegebenen Teilwörtern. Sind so z.B. verschiedene Quellen einem Fahrzeug zugeordnet und haben den Namen „Fahrzeug_1“ und „Fahrzeug_2“, ist ein Auffinden aller Vorkommen über eine gegebene feste Zeichenkette wie „Fahrzeug_1“ nicht möglich. Gibt man jedoch das Teilwort „Fahrzeug“ als Suchbegriff an, können alle zu einem Fahrzeug gehörenden Quellen gefunden werden. Dritter Teilbereich ist die fehlertolerante Suche. Dies kann Tippfehler bei der Dateneingabe in Suchvorgängen ausgleichen, aber auch Werte ähnlich dem gegebenen Suchwort selektieren. Im Folgenden wird auf die einzelnen Bereiche näher eingegangen. Vorher werden kurz typische, zu erwartende Anfragen erläutert. 3.6.2 Typische Anfragen Eine einfache typische Anfrage wird z.B. ein audio-Element anhand seines Attributes id suchen. Dies entspricht dem Fall, dass man ein Element mittels seines Namens wieder finden möchte. Auch möglich ist die Suche nach dem Attribut src eines Audioobjektes, das auf die referenzierten Audiodaten verweist. Muss dieser Verweis geändert werInv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 73 den, kann anhand des bisherigen Namens der Quelle das zugehörige virtuelle Audioobjekt innerhalb der Szene gesucht werden. Hierbei kann die Suche nach Teilzeichenketten helfen, da das src-Attribut die Form <Kanalnummer>:<Quellenname> hat. Eine Suche sollte hier anhand des gegebenen Quellennames zum Erfolg führen. Dies ist über die Suche nach Teilwörtern oder eine Ähnlichkeitssuche realisierbar. Die erfolgreiche Ausführung solcher Suchanforderung ist mittels verschiedener Mittel realisierbar. Diese werden in den folgenden Abschnitten vorgestellt. 3.6.3 Suche nach ganzen Wörtern und Teilwörtern Die Suche nach vollständigen Wörtern und auch Teilwörtern ist über die von BDB XML zur Verfügung gestellten Mittel realisierbar. XPath erlaubt die Selektion von XML-Elementen anhand von Attributwerten. So kann das Suchwort als Attribut in einem XPath-Ausdruck zur Selektion der geforderten XML-Elemente dienen. Die Syntax zur Auswahl anhand eines Attributwertes ist hierbei .../[@attributname=’wert’] Ebenso können Elemente mittels eines gegebenen Teilstrings in einer XPathAnfrage selektiert werden. Dafür wird die XPath-Funktion contains verwendet, mit welcher ein Teilausdruck der Form .../[contains(@attributname, ’wert’)] entsteht. Die Nutzung von Anfrageausdrücken als Bestandteil des Datenbanksystems für die Suchaufgaben bedeutet, dass keinerlei zusätzliche Informationen gespeichert werden müssen, um eine Suche durchführen zu können. Somit steht auch jedes Element eines neu in die Datenbank aufgenommenen Dokumentes sofort der Suche zur Verfügung. 3.6.4 Fehlertolerante Suche und Ähnlichkeitssuche Die fehlertolerante Suche erlaubt sinnvolle Ergebnisse auch dann, wenn sich in den zu vergleichenden Wörtern Buchstaben unterscheiden oder sich Tippfehler eingeschlichen haben. Inv.-Nr.: 2005-06-01/071/IN99/2254 74 KAPITEL 3. METADATEN Zur Umsetzung fehlertoleranter Suche können Zeichenketten-Abstandsmaße verwendet werden. Beim einfachen zeichenbasierten Vergleich von Zeichenketten wird jedes einzelne Zeichen verglichen. Bei nur einer Unterscheidung werden sie als ungleich eingestuft. Es müssen alle Zeichen an den jeweiligen Positionen übereinstimmen, um Gleichheit zu erreichen. Tests auf Ähnlichkeit sind mit solchen Methoden kaum möglich. Daher sind Abstandsmaße ein gutes Mittel für die Ähnlichkeitssuche. 3.6.4.1 Abstandsmaße Um tolerante Vergleiche durchzuführen, benutzt man ein Maß, das Abstand oder Übereinstimmung zweier Zeichenketten durch eine Zahl ausdrückt. Die Größe der Zahl gibt das Maß der Übereinstimmung wieder. Um eine solche Zahl zu erhalten gibt es verschiedene Ansätze. Drei davon – Editierabstand, Hamming-Distanz und N-Gramme – werden hier kurz erläutert. Editierabstand (Levenshtein-Abstand) Dieser ist beschrieben als die kleinste Menge elementarer Operationen, mit denen eine Zeichenkette in eine andere Zeichenkette überführt werden kann. Zu diesen Operationen können gehören: • Zeichen einfügen • Zeichen löschen • Zeichen ersetzen • (Zeichen vertauschen) Der Editierabstand kann als Erweiterung der Hamming-Distanz gesehen werden, welche sich auf die Ersetzung von Buchstaben beschränkt. Hamming-Distanz Dieses Maß ermittelt die Anzahl an Positionen, in denen der Inhalt von zwei Zeichenketten voneinander abweicht. Bei Zeichenketten unterschiedlicher Länge wird die kürzere mit Dummy-Zeichen aufgefüllt, die als nicht übereinstimmend gewertet werden. Sollen die Wörter Audioserver und Audiowiedergabe verglichen werden, ist somit das kürzere Wort (hier: Audioserver) mit Dummy-Zeichen aufzufüllen, was zu dem Ergebnis „Audioserver$$$$“ führt. Der Vergleich mit Audiowiedergabe führt schließlich zu einer Abweichung an acht Stellen. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 75 N-Gramme Ein N-Gramm ist eine Folge benachbarter Elemente. N ist dabei die Länge der verwendeten Folge. Man vergleicht das gemeinsame Auftauchen von Substrings. Je kleiner N, desto toleranter ist das Verfahren. Ist N größer oder gleich dem Maximum der Länge der Strings, wird nur 1 oder 0 zurückgeliefert, je nachdem ob die Strings identisch sind oder nicht. Die Berechnung für N-Gramme geschieht wie folgt: Seien Na und Nb alle N-Gramme, die in der jeweiligen Zeichenkette a und b vorkommen. Dann gilt für den Abstand der beiden Zeichenketten die Formel: dN −Gramm = 1 − 2 #(Na ∩ Nb ) #Na + #Nb 3.6.4.2 Eignung Jedes dieser Verfahren hat eine andere Eignung für unterschiedliche Anwendungen vorzuweisen. Editierabstand Zeicheneinfügungen, -löschungen und -änderungen werden als kleine Änderungen erkannt. Jedoch wird bei Verschiebungen die Verschiebungsdistanz nicht registriert. Die Folge: weiträumige Umstellungen einzelner Buchstaben bleiben ohne entsprechende Änderung des Ähnlichkeitswertes. Hamming-Distanz Dieses Verfahren ist wenig tolerant. Ist in der Zeichenkette sehr weit vorn ein abweichendes Zeichen eingefügt, bricht die Korrespondenz ab. N-Gramme N-Gramme bieten ein gutes Maß bei Zeichenketten, die als sehr ähnlich empfunden werden. Es ist toleranter als die Hamming-Distanz, da es nicht auf den absoluten Positionen der Zeichen in der Zeichenkette beruht. Jedoch gibt es starke Reaktionen bei Buchstabendrehern, d.h. zum Ausgleichen von Tippfehlern sind N-Gramme weniger geeignet. Zudem ergibt sich bei kurzen N-Grammen eine sehr hohe Toleranz. Fazit Nach Bewertung der Eigenschaften fällt die Wahl auf eine Kombination aus N-Grammen und Editierabstand. Die Hamming-Distanz, mit geringer Toleranz, wird nicht berücksichtigt. Stattdessen wird die Suche über N-Gramme begonnen. Nachdem daraus Ergebnisse erzielt wurden, wird letztendlich noch eine Inv.-Nr.: 2005-06-01/071/IN99/2254 76 KAPITEL 3. METADATEN Berechnung des Editierabstandes durchgeführt. Dadurch können Wörter ausgeschlossen werden, die viele N-Gramme teilen, jedoch grundverschieden sind. Somit kann auch das Problem der zu hohen Toleranz bei kurzen N-Grammen eingeschränkt werden. Zudem wird auf 3-Gramme (auch: Tri-Gramme) vertraut. Diese sind nicht zu tolerant, wie dies u. U. bei 2-Grammen der Fall ist, und bieten somit einen guten Kompromiss zwischen Toleranz und Ähnlichkeitsstrenge. Für das weitere Verständnis hier noch ein kurzes Beispiel dafür, wie solche N-Gramme letztendlich aussehen. Dazu werden 3-Gramme für eine Zeichenkette erstellt. Dafür wird diese Zeichenkette in eine Sequenz von Zeichenketten der Länge 3 unterteilt. Für das Wort „Motion“ ergibt sich die Sequenz wie folgt: {##M, #Mo, Mot, oti, tio, ion, on$, n$$}. Wie zu sehen, wird ein N-Gramm schon mit dem ersten Buchstaben eines Wortes gebildet. Für offene Stellen werden Platzhalter eingefügt – hier sind dies ’#’ am Anfang eines Wortes und ’$’ am Ende. 3.6.4.3 Algorithmus Der für die Suche umgesetzte Algorithmus ist an Gravano et al. [15] angelehnt und auf das Berkeley Datenbanksystem angepasst. Die N-Gramme werden als positionsabhängige N-Gramme gespeichert. Das bedeutet: jedes N-Gramm wird mit der zugehörigen Position innerhalb der Zeichenkette gesichert. So wird der Fall ausgeschlossen, dass zwei Zeichenketten viele N-Gramme teilen, die sich jedoch an komplett unterschiedlichen Positionen befinden und damit die Zeichenketten eigentlich wenig Ähnlichkeit aufweisen. Der Algorithmus enthält 3 Filterkriterien. Diese basieren auf der Verwendung des Editierabstands als zusätzliches Vergleichskriterium. Die Kriterien sind dementsprechend: Anzahl-Filter Grundlage dieses Filters ist der Umstand, dass Strings mit geringem Editierabstand viele gemeinsame positionsunabhängige N-Gramme haben. In einem Zusammenhang ausgedrückt, heißt dies: Seien s1 und s2 zwei Zeichenketten mit Länge |s1 | und |s2 |. Wenn s1 und s2 in Editdistanz k sind, dann muss die Kardinalität der N-Gramm-Mengen G(s 1 ) und G(s2 ) mindestens max(|s1 |, |s2|) − 1 − (k − 1) ∗ q sein. Positionsfilter Sind s1 und s2 in Editierabstand k, dann kann ein positionales N-Gramm in einer Zeichenkette nicht zu einem anderen korrespondieren, wenn Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 77 mehr als k Positionen Distanz sind. Längenfilter Sind s1 und s2 in Edit-Distanz k, können sich die Längen der Zeichenketten um nicht mehr als k unterscheiden. Der in das Verwaltungssystem integrierte Algorithmus, welcher diese Kriterien vereint, sieht aus wie folgt: array<qgram_s> found; foreach qgram_s in string //N-Gramme der Zeichenkette { foreach qgram_db_s in db //N-Gramme der ZK aus DB { if( qgram_s.qgram == qgram_db_s.qgram && // Positionsfilter abs( qgram_s.pos - qgram_db_s.pos) <= k && // Längenfilter abs( qgram_s.string.length qgram_db_s.string.length) <= k && // Editierabstand edit_distance( qgram_s.string, qgram_db_s.string) <= k ) { if( found.contains(qgram_db_s ) found[qgram_db_s].count ++; else found.add(qgram_db_s); } } } // Test des Anzahl-Filters for each qgram_s in found { if( qgram_s.count < min_count ) { found.remove(qgram_s); Inv.-Nr.: 2005-06-01/071/IN99/2254 78 KAPITEL 3. METADATEN } } handle_results(found); Quelltext 3.4: Algorithmus der Ähnlichkeitssuche Der Ablauf: alle N-Gramme (stehen in der Struktur qgram_s) der gegebenen Suchzeichenkette werden mit den N-Grammen in der Datenbank (entsprechende Struktur: qgram_s_db) verglichen. Bei Übereinstimmung kommt die Anwendung der Filter zum Einsatz. Es wird die Position der N-Gramme überprüft, ebenso wie die Länge und Edit-Distanz ihrer Zeichenketten. Als Resultat der Abarbeitung des Algorithmus befinden sich im Feld found alle N-Gramm-Strukturen (qram_s), welche die Filterung positiv überstanden haben und somit die Zeichenketten enthalten, die genügend Ähnlichkeit zur gegebenen Zeichenkette aufweisen. Eine solche N-Gramm-Struktur (qgram_s) enthält die Felder: • qgram das N-Gramm • string die Zeichenkette zu der das N-Gramm gehört • pos die Position des QGrams innerhalb der Zeichenkette Durch die Anwendung der Filter werden alle relevanten Strukturen im Array found zusammengefasst und können so zur Weiterbearbeitung übergeben werden. 3.6.4.4 Speicherstrukturen Zur Verwaltung der fehlertoleranten Suche müssen bestimmte Daten gespeichert werden: die vergleichbaren Zeichenketten müssen für die Suche indiziert sowie mit einer Information versehen werden, in welchem XMT-SAW Dokument sie an welcher Position zu finden sind. Dies führt zu einer Datenstruktur, welche zu allen durchsuchbaren Zeichenketten folgendes speichert: • Alle zugehörigen N-Gramme mit der jeweiligen Position innerhalb der Zeichenkette. Dies sind die positionsabhängigen N-Gramme, benötigt für die vorgestellte Vorgehensweise zur Ähnlichkeitsbestimmung. • Eine Form der Lokalisierung der verglichenen Zeichenketten innerhalb der XMT-SAW Dokumente der XML Datenbank. Dafür eignet sich ein Lokalisierungspfad, wie er in XPath-Ausdrücken verwendet wird. Somit lässt sich Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 79 das XML-Element eines Dokumentes, zu welchem die Zeichenkette gehört, einfach mittels einer XPath-Anfrage wieder finden. Damit ergibt sich eine Speicherlayout wie folgt: für den Vergleich von Zeichenketten müssen deren N-Gramme positionsabhängig untersucht werden. Daher ergibt sich der Schlüssel, d.h. die Grundlage für den Datenzugriff, aus einer Kombination von N-Gramm und dessen Position. Als Daten werden diesem Referenzen auf • die eigentliche Zeichenkette • Lokalisierungspfad und • Attribut zugeordnet. Warum nur Referenzen? Es ist klar, dass für eine Zeichenkette mehrere Einträge in der Tabelle nötig sind, einer für jedes N-Gramm. Würden alle zugeordneten Werte wie Lokalisierungspfad oder Attribut für jeden Eintrag komplett gespeichert, würde dies das Datenaufkommen stark erhöhen und unnötige Redundanz verursachen. Durch die Speicherung dieser Daten in jeweils einer eigenen Tabelle, unter einer eindeutigen Id, kann dies stark vermindert werden. Es werden nur Ids in der N-Gramm-Tabelle zugeordnet. Die Zeichenkette wird dabei für den Vergleich von Zeichenkettenlänge sowie den Editierabstand benötigt. Der Lokalisierungspfad, zusammen mit dem Attributnamen, wird schließlich zum Rückliefern des eigentlichen XML-Elementes gebraucht. Die Speicherung dieser Daten benötigt keine logische Struktur, wie sie z.B. von XML zur Verfügung gestellt wird. Daher wird für die Ausführung von Suchfunktionen die Datenablage der Zeichenketten nicht in einer XML-Datenbank vorgenommen. Stattdessen werden Standard-Datenbanken von Berkeley DB genutzt. Da Berkeley DB Basis von BDB XML ist, ist es automatisch auf einem System verfügbar und nutzbar, auf dem BDB XML installiert ist. Somit ist keine zusätzlichen Installation oder Konfiguration erforderlich. Auch kann davon ausgegangen werden, dass der Zugriff über Funktionen auf BDB-Daten schneller vonstatten geht als über Selektionen auf XML-Datenbanken. Daher werden verschieden Datenbanken (Tabellen) angelegt, welche oben aufgezählte Daten enthalten. Es entstehen jeweils Tabellen für: • N-Gramme (Haupttabelle) mit den Attributen Inv.-Nr.: 2005-06-01/071/IN99/2254 80 KAPITEL 3. METADATEN – N-Gramm – Position des N-Gramms – Zeichenketten-Identifier der zugehörigen Zeichenkette – Lokalisierungspfad-Identifier des Pfades zum N-Gramm-String – Attribut-Identifier für das N-Gramm-Attribut • Attribute – Attribut-Identifier – Attribut • Zeichenketten – Zeichenketten-Identifier – Zeichenkette • Lokalisierungspfade – Pfad-Identifier – Pfad Die einzelnen Tabellen sind über die entsprechenden Identifier miteinander verbunden. Ein Beispiel verdeutliche die für die Speicherung benötigten Einträge. Das Attribut src des Elementes audio habe Wert 4:Steps. Diese Information soll für die Suche indiziert werden. Die entsprechende Referenz ist dann doc{container.bdbxml/doc}/XMT-SAW /layer[@id="’layer0"’]/audio[@id="’4] und wird so in die Referenzen-Tabelle eingetragen. Die Attribut-Tabelle erhält einen Eintrag src für das zugehörige Attribut. In die Haupttabelle werden neun Einträge eingefügt – entsprechend neun N-Grammen für das Wort 4:Steps –, jeweils bestehend aus N-Gramm sowie Verweis auf String-, Attribut- und Referenztabelle. Die Grafik 3.8 stellt die entstehenden Beziehungen und Einträge der einzelnen Tabellen in illustrierter Form dar. Wird ein Dokument aus der Verwaltung gelöscht, ist es erforderlich, alle enthaltenen und für die Suche indizierten Zeichenketten aus den N-Gramm-spezifischen Tabellen zu entfernen. Dazu gehören auch nicht mehr benötigte Lokalisierungspfade, Zeichenketten und Attribute aus den zugehörigen Tabellen. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 81 Abbildung 3.8: Tabellenlayout der N-Gramme 3.6.4.5 Zeitaufwand Für die Suche müssen alle relevanten Wörter innerhalb eines Dokumentes indiziert werden. Speziell dieser Vorgang nimmt entsprechend der Dokumentgröße, respektive der Anzahl zu indizierender Wörter, lange Zeit in Anspruch. Dies wird durch den Umstand erschwert, dass XMT-SAW Dokumente über viele Attribute verfügen, welche indiziert werden müssen. Zudem nimmt der Aufwand für das Einpflegen der Daten in die Datenbank mit zunehmender Größe der Datenbankdateien stetig zu. So verlangt die Indizierung eines Dokumentes von 10 kByte mit leerer Datenbank noch 0,03 Sekunden, bei einer Größe der Datei für die N-Gramme von ca. 800 kByte jedoch schon 2,5 Sekunden. Ein 300 kByte großes Dokument benötigt dann schon 50 Sekunden zur Indizierung. Und hat die Datenbankdatei eine Größe von 5 MByte angenommen, dauert derselbe Vorgang ganze 3 Minuten. Unter Berücksichtigung dieser Zeiten gilt es zu prüfen, ob eine Beschränkung der indizierten Attribute auf eine Teilmenge derselben vorgenommen wird. 3.6.5 Evaluierung Die fehlertolerante Suche mittels N-Grammen lässt sich auf dem Datenmodell von Berkeley DB gut umsetzen. Eine zuverlässige und schnelle Suche über alle Dokumentinhalte ist möglich. Einziges Problem stellt der Zeitaufwand für die Inv.-Nr.: 2005-06-01/071/IN99/2254 82 KAPITEL 3. METADATEN Abbildung 3.9: Oberfläche des Suchdialogs Indizierung der Dokumente dar, welcher schnell hohe Werte annehmen kann. Um dies nicht im Produktionsprozess als unerwünschte Begleiterscheinung zu haben, wird die Indizierung von Dokumenten vom Einpflegen derselben in die Datenbank abgekoppelt. Stattdessen wird eine eigene Funktion implementiert, bei deren Aufruf die gewünschten Dokumente für die Suche indiziert werden. So kann die zeitaufwändige Indizierung dann durchgeführt werden, wenn keine zeitkritischen Aufgaben anstehen. Um den Zeitaufwand entscheidend einzuschränken, bleibt jedoch nur eine sinnvolle Lösung: anstatt alle Attribute eines Elementes für die Suche zu indizieren, wird dies nur mit einer Teilmenge durchgeführt. Attribute, die voraussichtlich nie eine Rolle in der Suche spielen werden, verbrauchen unnötig Speicherplatz und verlangsamen die Indizierung merklich. Wird die Menge der relevanten Attribute auf wenige Vertreter eingeschränkt, bringt dies merkliche Geschwindigkeitsvorteile. 3.6.6 Implementierung Zur Verwaltung aller Suchfunktionen wurde die Klasse DbSearch implementiert. Für alle benötigten Aufgaben gibt es entsprechende Funktionen. Sie sind über den in Abbildung 3.9 dargestellten Dialog abrufbar. Dieser erlaubt die Eingabe der Suchkriterien sowie weitere Möglichkeiten, Details zum Suchvorgang anzugeben. Basis ist ein Eingabefeld zur Eingabe des Wortes, welches das Suchkriterium darstellt. Die weiteren zu tätigenden Angaben entscheiden danach, ob eine Ähnlichkeitssuche durchgeführt werden soll. Dies kann über ein AuswahlkästInv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 83 chen definiert werden. Wurde es markiert, und damit eine Ähnlichkeitssuche aktiviert, kann der Suchvorgang gestartet werden. Es werden alle Vorkommen in der Datenbank aufgezeigt, welche dem gegebenen Suchwort ähneln. Bei einer Standardsuche lassen sich weitere Faktoren festlegen. So ist es möglich, den Namen des der Suche zugrunde liegenden Attributes festzulegen, ebenso wie den Namen der Elemente, welche in die Suche einbezogen werden dürfen. Ergebnis jedes Suchvorgangs ist eine Ausgabe, welche die gefundenen Elemente präsentiert. Nun ist es möglich, eines der Elemente auszuwählen und sofort nach Spamix zu exportieren. Dort kann es in die gegenwärtig bearbeitete Szene eingefügt werden. So lassen sich schon in früheren Beschreibungen erstellte Audioobjekte, inklusive aller Eigenschaften, einfach in eine neu zu erstellende Szene übernehmen. 3.6.6.1 Dokument indizieren Die Funktion storeQGrams speichert alle Informationen zu einer Zeichenkette, welche für die Suche indiziert wird. Die Zeichenkette wird zusammen mit dem zugehörigen Attributnamen, dem Elementnamen und dem Lokalisierungspfad als Parameter an die Funktion übergeben. Aufgerufen wird diese Funktion im Normalfall beim Einpflegen eines neuen Dokumentes oder einer neuen Dokumentversion in die Datenbank, wenn die enthaltenen Attribute indiziert werden müssen. Beim Speichern der Suchdaten werden zuerst die zuletzt genannten Daten in die entsprechenden Tabellen gespeichert. Sollten die Elemente dort schon vorhanden sein, wird nur der Schlüssel zurückgeliefert, andernfalls ein neuer erstellt. Die Funktion verfügt nun über Zeichenketten-Id, Pfad-Id und Attribut-Id. Anschließend werden die N-Gramme entsprechend folgender Funktion bestimmt: void getQGrams() { string temp; int tempLength; for( int i = -QGRAM_LENGTH + 1; i < 0; i++ ) { temp = ""; for( int j = 0 ; j < -i; j++ ) Inv.-Nr.: 2005-06-01/071/IN99/2254 84 KAPITEL 3. METADATEN temp += "#"; temp += value.substr(0, QGRAM_LENGTH - (-i)); qgrams.push_back(temp); } for( unsigned int i = 0; i < value.length(); i++ ) { temp = value.substr(i, QGRAM_LENGTH); tempLength = temp.length(); for( int j = 0; j < QGRAM_LENGTH-tempLength; j++) temp += "$"; qgrams.push_back(temp); } } Quelltext 3.5: Bestimmung von QGrams Die im Array qgrams enthaltenen N-Gramme werden anschließend mit ihrer Position und den vorher bestimmten Ids in die N-Gramme-Tabelle abgelegt. 3.6.6.2 Dokument-spezifische Indizierung entfernen Um alle N-Gramme zu einem bestimmten Dokument zu entfernen, wird die Funktion removeQGrams bereitgestellt. Anhand einer übergebenen Dokument-Id können alle zu diesem Dokument indizierten Zeichenketten wieder aus der Datenbank entfernt werden. 3.6.6.3 Elemente finden Mittels findNode wird Voll- und Teilwortsuche realisiert, während findString die N-Gramm-Suche umsetzt. findNode setzt dies über XPath-Funktionen um, wie in 3.6.3 vorgestellt. Diese Anfragen werden an den aktuellen Datenbestand in der Datenbank gestellt und liefern alle XML-Elemente zurück, welche die Kriterien erfüllen. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 85 Um die Ähnlichkeitssuche mittels N-Grammen durchzuführen, wird der Algorithmus wie in 3.6.4.3 gezeigt in C++ umgesetzt. Damit werden alle XMLElemente, welche ein Attribut mit einem Wert ähnlich dem Suchwort enthalten, zurückgegeben. 3.7 Offene Themen Dieser Abschnitt widmet sich den Anforderungen, welche nicht im Rahmen dieser Diplomarbeit gelöst wurden. 3.7.1 Mehrbenutzerunterstützung Mehrbenutzerunterstützung ist im Moment noch nicht in Spamix integriert. Dies impliziert die Einschränkung, dass stets nur ein Benutzer an einer Szene arbeiten kann. Das gleichzeitige Bearbeiten einer Szene durch mehrere Benutzer wird nicht unterstützt. Gerade jedoch bei umfangreichen Szenen kann es erforderlich sein, dass mehrere Beteiligte am Produktionsprozess einer Szene mitwirken. Zur Realisierung der Mehrbenutzerunterstützung wird auf ein Client-ServerModell zurückgegriffen. Eine zentrale Instanz (Server) regelt für alle Zugriffe auf das Datenbanksystem. Es existieren keine weiteren Prozesse, welche Datenbankzugriff erhalten. Somit kann die Koordination der Zugriffe, inklusive Sperren, Konsistenzkontrolle etc., zentral durchgeführt werden. Zur Arbeit mit dem Datenbestand erhält jeder Arbeitsplatz einen Client, welcher sich an der zentralen Instanz anmeldet. Möchte er eine Szene bearbeiten, stellt er eine entsprechende Anfrage an den Server und bekommt die angeforderten Daten zugesandt. Tätigt ein Client eine Änderung, wird dies dem Server mitgeteilt. Wie viele Clients gleichzeitig dieselben Daten verändern dürfen liegt im Ermessen der zugestandenen Parallelität. Hier stehen optimistische und pessimistische Verfahren in der Realisierung zur Verfügung. Pessimistische Verfahren ermöglichen die Bearbeitung von Daten oder Teilen der Daten nur einem Benutzer und sperren diese Daten für weitere Zugriffe bis zum Ende der Bearbeitung. Dies führt zu praktisch keiner Parallelität, da weitere Nutzer ausgeschlossen werden. Realisiert wird dieses Prinzip über Sperren. Optimistische Verfahren erlauben nebenläufige Änderungen, erfordern damit jedoch eine Konfliktauflösung beim Einbringen der Änderungen. Somit erkauft man hohe Parallelität im Bearbeitungsprozess durch größeren Aufwand beim Einbringen von Änderungen. Umgesetzt Inv.-Nr.: 2005-06-01/071/IN99/2254 86 KAPITEL 3. METADATEN werden kann dieses Verfahren in Kombination mit einem Versionierungssystem. Die optimistische Variante bietet damit komfortable Zusammenarbeit. Der Server verwaltet hierfür eine Liste aller konnektierten Clients. Über diese kann er Meldungen über Änderungen an die beteiligten Teilnehmer weiterleiten. Wird so eine Szene von mehreren Nutzern gleichzeitig bearbeitet und ein Beteiligter hat Daten verändert, kann diese Änderung über den Server direkt an alle Beteiligten propagiert werden, welche ebenso an dieser Szene arbeiten. Diese Information kann im Idealfall in Echtzeit übertragen werden, oder alternativ nach Einbringen der Änderung in die Datenbank. Hier ist die Priorität auf entweder stete Aktualität oder leichte Rücksetzbarkeit zu setzen. Denn: wird jede Änderung unverzüglich an die anderen Teilnehmer übermittelt, können diese sofort darauf reagieren. Sollte der initiierende Nutzer jedoch einige Änderungen zurücknehmen, müsste dies ebenso bei allen anderen Teilnehmern passieren. Haben diese schon mit dem geänderten Datenbestand gearbeitet, kann dies hohen Rücksetzaufwand erfordern. Dabei kann auch differenziert werden, ob Änderungen direkt in die Datenbank reflektiert werden, oder ob jeder Client eine eigene Kopie der Daten bearbeitet. In letzterem Falle werden z.B. nach einem Commit des Clients dessen Änderungen in den Datenbestand übernommen, während dies andernfalls stets geschieht. Der Server ist für alle datenbankspezifischen Aufgaben wie Transaktionsverwaltung, Sperren etc. zuständig. Zudem muss über Konsistenz bei simultaner Bearbeitung gewacht werden. Die Umsetzung eines optimistischen Verfahrens sollte im Zusammenhang mit einer Konzeption für lange Transaktionen erfolgen. Dafür eignet sich z.B. eine Lösung mit Arbeitsbereichen, wie im nächsten Abschnitt kurz angesprochen. 3.7.2 Lange Transaktionen Im Einbenutzerbetrieb ist das Konzept der langen Transaktionen schon durch das Versionierungssystem realisiert. Es ermöglicht, beliebige „alte“ Zustände eines Dokumentes wieder herzustellen, welche Tage oder Wochen zurückliegen. Nicht Bestandteil dieser Arbeit ist die Umsetzung langer Transaktionen im Mehrbenutzerbetrieb. Hier ist, wie bei der Mehrbenutzerunterstützung, der Grad der Parallelität – ausgedrückt in pessimistischen und optimistischen Verfahren – Ausschlag gebend für den zu betreibenden Aufwand. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 87 Pessimistische Verfahren Die einfachste Lösung der Problematik bietet ein pessimistisches Verfahren, da dieses keinen größeren Implementierungsaufwand erfordert. Denn: bei pessimistischen Verfahren sind durch das Sperren von Daten diese für nur einen Nutzer gleichzeitig veränderbar. Das im Zuge dieser Diplomarbeit implementierte Versionierungssystem kann darauf einfach angepasst werden, da theoretisch weiter ein Einbenutzerbetrieb vorliegt. Jedoch ist damit ein Teil der Daten über längere Zeiträume für nur einen Nutzer verfügbar, was nicht praktikabel ist. Optimistische Verfahren Ein optimistisches Verfahren erlaubt hohe Parallelität, erfordert aber auch größeren Aufwand. Dafür existieren verschiedene Möglichkeiten, die hier kurz angerissen werden. Diese basieren wiederum auf dem Versionierungssystem, bedürfen jedoch weiterer Funktionalitäten. Wird eine optimistische Variante gewählt, ist die Bearbeitung gleicher Daten durch mehrere Nutzer möglich. Basis ist hier eine Originalversion der Daten. Von dieser ausgehend wird die Parallelität ermöglicht. Eine Möglichkeit zur Realisierung sind Checkouts. Es wird eine Kopie von Teilen des Datenbestandes angelegt, damit ergibt sich ein Arbeitsbereich für den anfordernden Nutzer. In diesem wird gearbeitet, und nach Ende des Bearbeitungsvorgangs bzw. der Transaktion wird der neue Stand in die Originaldaten eingebracht. Dies kann wiederum Konfliktauflösung erfordern, wenn zwischenzeitlich schon andere Änderungen in die Originaldaten eingebracht wurden. In bestimmten Szenarien kann das Prinzip des Checkout Probleme bereiten – im Normalfall dann, wenn nur Teile des Datenbestandes ausgecheckt sind, für das weitere Vorgehen jedoch ein erweiterter Teil benötigt wird. Dies kann z.B. der Fall sein, wenn die Daten untereinander in Beziehung stehen. Erforderlich sind darauf hin weitere Checkouts, wofür die entsprechenden Daten wiederum zur Verfügung stehen müssen. Zu bedenken ist, dass jeder Checkoutvorgang auch zeitliche Auswirkungen hat, da er sich über längere Zeit erstrecken kann. Eine weitere Möglichkeit stellt der Einsatz von sog. Alternativen dar. Es werden letztendlich von der Originalversion ausgehend neue Zweige gestartet. In diesen Zweigen werden alle Änderungen zur Ausgangsversion vermerkt, d.h. das Anlegen einer kompletten Datenkopie entfällt. Ist der Änderungsprozess vollendet, werden die vermerkten Änderungen in die Originalversion eingebracht. Durch dieses Prinzip ist einfach nebenläufiges Arbeiten möglich. Die Unterstützung von sich so entwickelnden Baumstrukturen ist als Vorteil zu werten. So können von Zweigen wiederum neue Zweige abgehen. Vorteil ist zudem, dass kein Checkout Inv.-Nr.: 2005-06-01/071/IN99/2254 88 KAPITEL 3. METADATEN der Daten nötig ist, der in bestimmten DBS und DB-Szenarien sehr lange Zeit beanspruchen kann. Zur Umsetzung der Transaktionsverwaltung, in welcher Art auch immer, kann das System zur Mehrbenutzerunterstützung genutzt werden. Es setzt den Datencheckout als auch die Konfliktauflösung um, um letztendlich für viele Clients die gemeinsame Arbeit zu unterstützen. 3.7.3 Konsistenz von Meta- und Audiodaten Die Datenkonsistenz betrifft verschiedene Teile der Erstellung und Verwaltung von Szenen und in diesen referenzierten Daten. 3.7.3.1 Konsistenz von Referenzen und Eigenschaften Zum einen gilt es, Szenendaten (Metadaten) und von diesen referenzierte Audiodaten konsistent zu halten. Dies betrifft z.B. die Kontrolle der Übereinstimmung von Aktivitätszeiten (Lebenszeit) eines Audioobjekts und der Spielzeit der zugewiesenen Audiodatei. Es gilt zu vermeiden, dass ein Audioobjekt eine längere Lebenszeit hat als die Audiodatei Daten zur Verfügung stellen kann. Eine fehlende Audiowiedergabe wäre sonst die Folge. Um den Nutzer im Arbeitsprozess zu unterstützen, ist zudem die Verwaltung von Referenzzählern auf verwendete Audiodaten sinnvoll. Diese Zähler enthalten Informationen über die Anzahl an Audioobjekten, welche auf bestimmte physische Audiodaten verweisen. Sind keine Verweise mehr auf eine Audiodatei vorhanden, kann dieses automatisch vom System entfernt werden. Der entgegengesetzte Weg wird gegangen, um leere Referenzen zu finden. Das heißt, eine Szene verweist auf eine Audiodatei, welche nicht auf Festplatte existiert. Hier ist es wiederum am System, den Nutzer auf diese Inkonsistenz hinzuweisen. Bezüglich der Verwaltung gilt zu entscheiden, ob die Audiodaten weiterhin in einer Ordnerstruktur auf Festplatte verbleiben, oder in die Datenbank aufgenommen werden. In letzterem Fall kann ungewollter Eingriff von außen vermieden werden. Dazu gehören Löschungen oder Verschiebungen referenzierter Daten, was zu Leerverweisen führen könnte. 3.7.3.2 Konsistenz von Szenenbeschreibungen Auch eine zentrale Rolle spielt die Konsistenz des Inhalts von Szenenbeschreibungen. Hier dürfen keine Inkonsistenzen in der Definition von Audioobjekten Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 3. METADATEN 89 und deren Start- und Endzeiten auftreten. Im Moment sind diese Zeiten noch absolut zum Szenenstart angegeben. Perspektivisch wird jedoch die Umstellung auf relative Zeiten, und damit auf relative Abhängigkeiten zwischen Audioobjekten, angestrebt. Es ergeben sich dann Ausgabebedingungen wie „Audioobjekt x startet 5 s nach Audioobjekt y“. Dabei spielt die Konsistenz der angegebenen Bedingungen (Constraints) eine große Rolle. In der Diplomarbeit von Schröder [29] wird ein System zur Überprüfung von Ausgabebedingungen in Multimedia-Datenbanken vorgestellt. Dies ist auch für den Einsatzzweck im IOSONO-System geeignet. Ausgabebedingungen werden über Difference Constraints18 definiert und in einen Graphen transformiert. Unter Verwendung z.B. eines Bellman und Ford Algorithmus kann dieser auf Konsistenz überprüft werden. Anschließend kann mittels des Graphen ein Ausgabeschedule berechnet werden. Anhand dessen kann die Ausgabe der Audioobjekte erkannt und vorgenommen werden. Gültigkeit und Konsistenz sind damit gesichert. 3.8 Implementierung - Zusammenfassung Zur Umsetzung der vorgestellten Funktionen und Datenstrukturen wurden diverse Klassen und Funktionen implementiert, die schon vorgestellt wurden. Zusammenfassend sind diese Ausschnittsweise in Abbildung 3.10 dargestellt. Enthalten sind nur wichtige Funktionen für den Zugriff von anderen Klassen. Private Funktionen zur Realisierung der Funktionalität sind nicht aufgeführt. Eindeutig ist die zentrale Rolle der Klasse XMTSAWDbHandler, von der alle Aktionen ausgehen. Unterstützend stehen die Klassen DbSearch, DbUpdate und DbLoad zur Verfügung, welche spezifische Funktionalitäten anbieten. DbSearch übernimmt alle Suchfunktionen und wurde schon eingehend erläutert. DbUpdate und DbLoad sind zuständig für das Ausführen von Updates auf dem Datenbankbestand sowie für das Einfügen von Dokumenten, die in Form von Zeichenketten oder Dateien vorliegen. Die Strukturen dbChanges und dbDocument werden für den Datenaustausch bei Funktionsaufrufen eingesetzt. Wenn mittels getChanges die Änderungen zwischen zwei Versionen abgefragt werden, kann jede Änderung in dbChanges eingetragen werden. Bei getDocs wird für jedes Dokument in der Datenbank ein Objekt vom Typ dbDocuments angelegt, um dort die dokumentspezifischen Infor18 Difference Constraints erlauben, zeitliche und räumliche funktionelle Zusammenhänge zwischen Objekten zu definieren Inv.-Nr.: 2005-06-01/071/IN99/2254 90 KAPITEL 3. METADATEN Abbildung 3.10: Klassenstruktur der implementierten Metadatenverwaltung mationen wie Name (im Attribut name) oder aktuelle Version (Attribut version) einzutragen. Inv.-Nr.: 2005-06-01/071/IN99/2254 Kapitel 4 Verwaltung der Audiodaten Abbildung 4.1: Systemarchitektur, Teilsystem Audiodaten Dieses Kapitel widmet sich der Verwaltung und Speicherung der Audiodaten. Dies betrifft die Komponente Audioserver im IOSONO-System, in Abbildung 4.1 entsprechend hervorgehoben. Inv.-Nr.: 2005-06-01/071/IN99/2254 92 KAPITEL 4. AUDIODATEN 4.1 Anforderungen Auch bei den Audiodaten stehen spezielle Anforderungen an die Verwaltung im Vordergrund. Im Gegensatz zu den Metadaten, wo die komfortable Verwaltung primäres Ziel ist, spielen hier die Echtzeitanforderungen die größte Rolle. Im Zuge der Neuorientierung der Datenspeicherung sind somit dahin gehende Optimierungen vorzunehmen. Die Anforderungen sind in den folgenden Abschnitten detailliert formuliert. 4.1.1 Echtzeitwiedergabe Beim Wiedergabeprozess von WFS-Content ist die Ausgabeschnittstelle hinsichtlich Performance derart zu optimieren, dass mindestens 32 Audiodateien gleichzeitig in Echtzeit ausgespielt werden können. 4.1.2 Wiedergabe entsprechend der Bedingungen der Szenenbeschreibung Da WFS einen objektorientierten Soundwiedergabeansatz verfolgt, verfügen die einzelnen virtuellen Audioquellen über Lebenszeiten. Entsprechend dieser Lebenszeiten erfolgt die Ausgabe der Audiodaten an die WFS-Renderer. Während der Wiedergabe ist zu prüfen, inwiefern die Ressourcen es zulassen, dass die Audiodaten entsprechend der in der Szenenbeschreibung definierten Wiedergabezeitpunkte ausgespielt werden können und keine Kapazitätsengpässe auftreten. 4.1.3 Evaluierung Diese Anforderungen müssen mit geeigneten Mitteln erfüllt werden. Die Performance hängt maßgeblich von der Datenrate ab, mit welcher die Audiodaten von Festplatte gelesen werden. Um die Geschwindigkeit des Auslesens zu erhöhen, muss letztendlich die Datenrate verbessert werden. Die zentrale Frage ist daher: Wie kann diese Verbesserung erreicht werden? Als mögliche Mittel werden gesehen: • Datenkompression Werden die Audiodaten in komprimierter Form (wie im MP3-Format) gespeichert, kann Speicherplatz gespart und die Anzahl der Festplattenzugriffe reduziert werden. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 93 • Partitionierung Werden die Daten auf mehrere Festplatten verteilt, welche parallel gelesen werden können, lässt sich die Gesamttransferrate steigern. Zugriffszeit und Speichereffizienz lassen sich so optimieren. • Datenanordnung Durch eine Anordnung der Daten in Abspielreihenfolge kann die Anzahl der wahlfreien Zugriffe auf unterschiedliche Festplattenpositionen vermindert werden. • Indexierung Für den wahlfreien Zugriff, d.h. wenn Sound ab einer bestimmten Position abgefragt werden soll, wirkt eine Indexierung unterstützend. Ein Zeitgewinn durch den Direktzugriff sollte sich bemerkbar machen. • Caching Bei Schleifen oder der wiederholten Verwendung derselben Objekte kann Caching die Anzahl der Festplattenzugriffe reduzieren. Dieser Fall ist im IOSONO-System jedoch recht selten, daher wird der Erfolg von Caching als recht gering angesehen. • Prefetching Um Engpässe auszugleichen, kann ein Prefetching von Audiodaten verwendet werden. Damit findet stets eine Vorpufferung der als nächstes benötigten Daten statt. Tritt so ein Lesezugriff mit hohem Zeitbedarf auf, kann dieser im Optimalfall durch die vorgepufferten Daten ausgeglichen werden. Natürlich muss zwischen solchen Ausreißern genügend Zeit für das Prefetching bleiben. Eingeschränkt werden müssen diese Möglichkeiten mit Blick auf die Umsetzung in IOSONO. Zum einen soll im Moment darauf verzichtet werden, mehrere Festplatten vorauszusetzen. Dies soll es Kinos oder sonstigen Anbietern erleichtern, das IOSONO-System zum Einsatz zu bringen, ohne in aufwändige Hardware investieren zu müssen. Zum anderen wird darauf verzichtet, die Daten zu komprimieren. IOSONO ist auf optimalen Klang ausgelegt. Da z.B. mp3 mit Qualitätseinbußen einhergeht, wird vom Einsatz eines solchen Systems abgesehen. Langfristig wird jedoch über die Verwendung von z.B. mpeg4 nachgedacht. Somit bleiben die Möglichkeiten, welche an Strukturen und Funktionen betreffs Speicherung und Retrieval von Audiodaten ansetzen. 4.2 Wichtige Systemkomponenten Alle Aktionen, für welche die Audiodaten von Relevanz sind, spielen sich im Audioserver ab. Dieser liest die Audiodaten von Festplatte, puffert diese und ist Inv.-Nr.: 2005-06-01/071/IN99/2254 94 KAPITEL 4. AUDIODATEN für ihre Weiterleitung an die Renderer verantwortlich. Da die Datenübertragung an die Renderer keinen Flaschenhals darstellt, sind alle performancerelevanten Faktoren im Audioserver zu finden. Alle optimierenden Hard- oder SoftwareÄnderungen sind dort anzusetzen. Der Audioserver besteht aus diversen Komponenten, welche die Gesamtfunktion zur Verfügung stellen. Verantwortlich für das Auslesen der WAV-Dateien sind die Klassen DiskThread und DiskThreadScheduler. Diese übernehmen im Kern die Funktionen des Audioservers, welche in Abbildung 2.3 auf Seite 25 schon dargestellt wurden. Um ein neues Datenspeicherformat zu integrieren, bilden diese Klassen die anzupassende bzw. zu ersetzende Schnittstelle. Andere Komponenten und enthaltene Klassen können bestehen bleiben, wodurch sich der Änderungsaufwand für ein neues Datenverwaltungssystem in Grenzen hält. 4.3 Systeme zur Speicherung von Audiodaten Derzeitig werden die Audiodaten in WAV-Dateien auf Festplatte gespeichert. Somit ist das Dateisystem Basis der Speicherung. Eine optimierende Datenverwaltung existiert nicht. Indexierung oder Datenanordnung spielen keine Rolle oder sind nicht beachtet. Einzig ein Prefetching ist implementiert, um unperformante Lesevorgänge auszugleichen. Es muss nun ein Verwaltungssystem gefunden werden, das große Mengen an Audiodaten in Echtzeit zur Verfügung stellen kann. Dafür als geeignet angesehene Techniken werden im Folgenden vorgestellt. 4.3.1 Streaming-Server Streaming-Server sind für die Auslieferung von Audiodaten in Echtzeit konzipiert und erfüllen daher die hier gestellte Anforderung. Verschiedene Anbieter, wie Apple mit QuickTime1, bieten solche Systeme an. Diese sind im weltweiten Netz für das Streamen von Audio-Inhalten an vielen Clients im Einsatz. Der Nachteil aller Vertreter ist, dass die Systeme auf proprietären Formaten basieren. Daten werden über Encoder in komprimierte Datenformate umgewandelt. Da IOSONO das WAV-Format beibehalten soll, und auch die Qualität dieser Daten nicht sinken darf, fallen Streaming-Server aus der Liste der brauchbaren Lösungen. 1 http://developer.apple.com/quicktime/ Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 95 4.3.2 Datenbankmanagementsysteme Indexierung und Caching, als mögliche performancesteigernde Faktoren gesehen, sind in nahezu jedem Datenbanksystem integriert. Die Datenanordnung kann dabei den Speicherstrukturen hinsichtlich optimaler Performance angepasst werden. Prefetching muss jedoch über eigene Mechanismen zur Verfügung gestellt werden. Somit kann ein Datenbankmanagementsystem als mögliche Lösung der Speicherproblematik gesehen werden. Ein kurzer Blick auf herkömmliche RDBMS oder OODBMS soll deren Tauglichkeit zeigen. 4.3.2.1 RDBMS und OODBMS In einem solchen Datenbanksystem lässt sich jede Art von Daten speichern, somit auch Audiodaten. Jedoch existieren keine Hilfsmittel zur Speicherung von Multimediadaten, gerade was die Performance angeht. Zwar lassen sich bei RDBMS in Form von BLOBs oder ähnlichen Strukturen beliebige Daten speichern und verwalten – damit auch Audiodaten, wie hier gefordert. Jedoch müssen bzgl. der Echtzeitanforderungen Abstriche gemacht werden. Gleiches gilt für OODBMS, bei denen die Audiodaten in Objektform überführt werden müssten. Da somit diese DBMS keine herausragenden Vorteile bieten, ist die Verwendung eines DBMS mit proprietärem Datenmodell denkbar. Hier entfällt der Aufwand für die Umwandlung der Daten in relationale Strukturen. Da für die Verwaltung der Metadaten mit BDB XML schon ein proprietäres DBMS verwendet wurde, bietet sich die Verwendung von dessen Basis für die Audiodatenspeicherung an. Diese Basis ist das schon vorgestellte Berkeley DB, das ein komplettes Datenbankmanagementsystem zur Verfügung stellt. Da es schon in IOSONO integriert ist, ließe sich durch dessen Verwendung die Abhängigkeit des IOSONO-Systems von weiteren Datenbankdateien und -bibliotheken vermeiden. 4.3.2.2 Berkeley DB Berkeley DB bietet einen schlanken Aufbau, ist als Bibliothek leicht ins bestehende System integrierbar und verzichtet auf umfangreiche Zusatzelemente. Grafische Oberflächen oder sonstige Tools sind nicht vorhanden, werden aber im betrachteten Fall auch nicht benötigt. Berkeley DB vertraut nicht auf ein relationales oder objektorientiertes Datenmodell. Daten müssen daher nicht in Relationen oder Objekte überführt werden. Sie werden mit zugeordnetem Schlüssel, welcher der Inv.-Nr.: 2005-06-01/071/IN99/2254 96 KAPITEL 4. AUDIODATEN Identifikation dient, in Dateien abgelegt. Durch dieses Prinzip lassen sich beliebige Daten einfach speichern und adressieren. Auch wird nicht über eine Anfragesprache wie SQL auf die Daten zugegriffen. Stattdessen werden Daten direkt über Funktionsaufrufe und darin integrierte Dateizugriffe abgefragt. Dies verspricht performantere Zugriffe als z.B. relationale DBMS dies anbieten, da der mit SQL verbundene Anfrageaufwand und die Abbildung von Relationen aufs Dateisystem entfallen. 4.3.3 Dateisystem Alternativ bietet sich weiterhin die Speicherung in Dateien an, worauf schon gegenwärtig gebaut wird. Im Unterschied zur bisherigen Variante sollte jedoch vom Prinzip der vielen, meist kleinen, WAV-Dateien abgesehen werden. Durch Zusammenlegen der in diesen enthaltenen Audiodaten in nur eine Datei (oder wenige große Dateien, d.h. unter Umständen bis zum Gigabyte-Bereich), angeordnet entsprechend der Abspielreihenfolge der Daten, kann womöglich eine optimierte Leseperformance erreicht werden. Als Grundlage dafür wird der Punkt angesehen, dass das oftmalige Lesen kleiner Datenmengen aus vielen Dateien dann vermieden werden kann. Es ist kein stetiger Wechsel zwischen den beteiligten Dateien nötig, was durch Festplattenrotationen zur Ansteuerung der Dateicluster Performance kostet. Optimal wird die Ein-Datei-Lösung, wenn diese Datei nicht fragmentiert auf Festplatte liegt. Im Vergleich zur Lösung mit Berkeley DB entfällt zusätzlich der Aufwand zur Verwaltung der Daten in bestimmten Zugriffsstrukturen. So können Leseanfragen direkt und in chronologischer Ordnung bearbeitet werden, ohne erst anhand z.B. Baumstrukturen die benötigten Dateien oder Dateiabschnitte aufzusuchen und auszulesen. 4.3.4 Fazit Da Streaming-Server durch proprietäre Audioformate nicht verwendbar sind und Standard-DBMS keine wirklich positiven Eigenschafen bieten, wird letztendlich das DBMS Berkeley DB als Lösung der Datenverwaltungsproblematik in Betracht gezogen. Dort können verschiedene Arten der Datenanordnung, diverse Zugriffsmethoden und weitere Konfigurationsmöglichkeiten so an die Anforderungen angepasst werden, dass eine optimale Speicherung der Daten möglich erscheint. Weniger Konfigurationsoptionen bietet eine Speicherung in Form einfacher Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 97 Dateien. Jedoch sind hier noch Optimierungen im Vergleich zur aktuellen Implementierung möglich, welche daher auf ihre Eignung untersucht werden. Somit spielen diese zwei Systeme in den folgenden Betrachtungen die zentrale Rolle. Anhand diverser Performancetests wird die Eignung für den Einsatz in IOSONO untersucht. Diese lassen erkennen, ob datenbankspezifische Mittel wie Indexierung und Caching die Performance gegenüber dem Dateisystem verbessern können. Als Vertreter des Dateisystems wird vergleichend eine neue Variante der Speicherung der Audiodaten in Dateien auf ihre Performance untersucht. 4.4 Randbedingungen Um die Echtzeitanforderungen – die primäre Anforderung an die AudiodatenVerwaltung – näher zu spezifizieren, kommt im Folgenden eine kurze Vorstellung der verschiedenen beteiligten Werte. Im IOSONO-System werden Audiodaten im WAV-Format mit einer Samplegröße von 24 Bit und einer Samplingfrequenz von 48.000 Hz verarbeitet. Dies erfordert eine Datenrate von 48.000 Samples/s · 3 Byte ≈ 140 kByte/s pro Audioobjekt. Wird der Fall von 64 simultan aktiven Audioobjekten angenommen, so ergibt sich ein Bedarf von ca. 9 MByte Audiodaten pro Sekunde, welche ausgelesen und in IOSONO verarbeitet werden müssen. Als technische Randbedingung ist zu nennen, dass für Datenspeicherung und -retrieval ein Standard-Rechner zu verwenden ist. Daher sind bestimmte Performance bestimmende Faktoren durch verwendete Hardware, Betriebssystem sowie Dateisystem eingeschränkt. 4.5 Tests Vor der Umsetzung in ein neues Datenverwaltungssystem stehen umfangreiche Tests. Für eine Realisierung in Berkeley DB gilt es, unter Beachtung von Faktoren wie Datenorganisation, Indizes, Caching und anderen Konfigurationsparametern die geeignetste Datenbankkonfiguration zu finden. Anschließend wird anhand von Testergebnissen über die Eignung für den Einsatz im IOSONO-System entschieden (Abschnitt 4.7). Ebenso werden Tests für die neue auf Dateien basierende Lösung durchgeführt (Abschnitt 4.8). Dies ermöglicht einen Vergleich der verschiedenen Realisierungsmöglichkeiten untereinander und zur gegenwärtigen Umsetzung in IOSONO. Deren Performance wird zuerst untersucht (Abschnitt 4.6) Alle durchgeführten UnInv.-Nr.: 2005-06-01/071/IN99/2254 98 KAPITEL 4. AUDIODATEN tersuchungen basieren auf WAV-Daten mit einer Samplegröße von 24 Bit und einer Frequenz von 48.000 Hz. Alle Tests simulieren das Lesen von Audiodaten zu einer gegebenen Menge von gleichzeitig aktiven Audioobjekten. Deren Zahl wird je nach Test auf 32 bzw. 64 festgesetzt. 32 entspricht der aktuellen Grenze des IOSONO-Systems, und mit 64 Quellen lässt sich das Potential der untersuchten Speichermethoden erkennen, insbesondere ob noch Spielraum für eine Erweiterung um weitere Quellen existiert. In jedem Test wird eine bestimmte Anzahl von Abfragen durchgeführt. Pro Abfrage werden am Stück 512 Samples für jedes der 32 bzw. 64 beteiligten Audioobjekte gelesen. Der Wert von 512 Samples hat sich als für die Tests genauso geeignet herausgestellt wie z.B. 4.096 oder andere Werte, d.h. diese zeigten keine Zeitunterschiede. Auch lassen sich mit 512 Samples die erzielten Lesezeiten gut vergleichen. Die Basis für die Vergleiche stellt ein Soll von ca. 10 ms dar. In dieser Zeit müssen für alle aktiven Quellen die 512 Samples gelesen werden. Mit der Anzahl an Abfragen lässt sich schließlich die Gesamtmenge an gelesenen Daten und somit die Aussagekraft der Durchschnittswerte pro Abfrage erhöhen. Jedes Testszenario wurde mehrmals (im Durchschnitt 10 Mal) durchgeführt, um repräsentative Ergebnisse zu erzielen. Die im Folgenden angegebenen Zeiten sind daher als Mittelwerte aus diesen Durchgängen zu sehen. 4.6 Die aktuelle IOSONO-Implementierung Grundlage aller Vergleiche und Optimierungsversuche ist ein Blick auf die aktuelle Systemimplementierung des Auslesens der Audiodaten. Um die Performance von Datenbankentwurf und alternativen Lösungen beurteilen zu können, wird die aktuelle Implementierung einem ersten Test unterzogen. Dies ermöglicht später eine Einordnung der Ergebnisse der untersuchten Alternativen. 4.6.1 Implementierung Von technischer Seite sind Grundlage der aktuellen Lösung WAV-Dateien, welche die Audiodaten enthalten. Jedem Audioobjekt sind entsprechende Dateien zugeordnet. Das Auslesen geschieht über verschiedene C++-Klassen, welche letztendlich auf die read-Funktion des Dateisystems zugreifen. Die Übertragung beruht auf einem Slot-Konzept. Slots repräsentieren die Audioströme mit den Audiodaten aus den WAV-Dateien in einem für den Renderer verarbeitbaren Format. Die Slots können zeitgetaktet ausgelesen werden. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 99 Jeder Slot enthält Audiodaten für ein zugehöriges Audioobjekt. Das heißt: bei einem System mit max. 32 parallel aktiven Audioobjekten existieren 32 Slots. Während der Wiedergabe werden ständig Audiodaten aus den WAV-Dateien gelesen, deren Sample-Werte bestimmt und in die Slots eingefügt. Dort werden sie gepuffert, bis sie für die Übertragung an die Renderer benötigt werden. Die Pufferung ist nötig, da das Auslesen der Audiodateien keine verlässlich gleichniedrigen Zeiten vereinnahmt, sondern auch Ausreißer auftreten können. Es gilt, diese auszugleichen, wofür die Puffer eingesetzt werden. Dabei enthält jeder Slot Speicherplatz für 100.000 Samples, um ausreichend Spielraum zu haben. Bei jeder Abfrage wird nur eine bestimmte Anzahl an Samples pro Datei gelesen. Es gilt, aus allen Dateien für alle Slots gleichmäßig Daten zu lesen, um nicht einen Slot an das Pufferende kommen zu lassen. Andernfalls würde ein Kanal keine Audiodaten für die Wiedergabe enthalten und somit in der Audiowiedergabe Lücken auftreten. Die Slots werden entsprechend des aktuellen Bedarfs nach Prioritäten sortiert und in dieser Reihenfolge mit Daten bedient – Slots mit nur noch wenigen gepufferten Daten zuerst. Ohne die Pufferung und das getaktete Lesen könnte die Datenrate beim Auslesen den Bedarf an Daten z.T. nicht decken. Alle Audiodaten eines Slots sind mit Informationen zu deren Wiedergabezeitpunkt innerhalb der Audioszene gekennzeichnet. Ist einem Slot für eine bestimmte Wiedergabezeit keine Audiodatei zugeordnet, enthält dessen Puffer keine Daten. Stattdessen werden schon die nächsten benötigten Daten gelesen und mit einer Wiedergabezeit versehen. Bis diese erreicht wird, werden für die Übertragung an die Renderer leere Samples generiert, welche Stille repräsentieren. 4.6.2 Performance Alle Tests zielen darauf hinaus, die Zeiten für das Auslesen einer bestimmten Anzahl von Audiodaten zu untersuchen. So kann gesehen werden, ob die Echtzeitanforderungen durch das untersuchte System, oder eine bestimmte Konfiguration, erfüllt werden können. Untersucht wurde im ersten Test das Auslesen von Audiodaten für 32 parallel aktiven Audioquellen. Dabei wurden ca. 100.000 Audiosamples pro Quelle gelesen, aufgeteilt auf 200 Abfragen je 512 Samples. Die Ergebnisse sind in Diagramm 4.2 zu sehen. Die entstehende Verteilung bestätigte sich in unterschiedlichen Tests. Zu sehen sind auf der x-Achse die 200 Abfragen à 32×512 Samples, auf der y-Achse die benötigte Zeit je Abfrage in Millisekunden. Das Ergebnis: Die durchschnittliche Lesezeit für 32×512 Samples beträgt Inv.-Nr.: 2005-06-01/071/IN99/2254 100 KAPITEL 4. AUDIODATEN Abbildung 4.2: 200 Abfragen mit je 512 Samples und 32 Audioquellen 10.9 ms. Eindeutig zu sehen ist, dass dabei ein Großteil der Werte bei 2-3 ms, und damit weit unter dem Soll von 10 ms, liegt. Jedoch sorgen die starken Ausreißer – bis zu über 600 ms – für eine relevante Verschlechterung der Lesezeit. Aus der Verteilung wird auch klar, dass nur die Nutzung eines großen Puffers die geforderten Lesezeiten sicherstellen kann. In der Zeit der schnellen Lesezeiten ergibt sich genug Spielraum, um die schlechten Ergebnisse auszugleichen. Deutlich wird anhand der Zeiten jedoch auch, dass offensichtlich kein Platz nach oben besteht. Das heißt, eine Erweiterung auf mehr als 32 gleichzeitig aktiven Quellen scheint vom System nicht bewältigbar. Somit erklärt sich auch der Bedarf nach einer neuen Speicherlösung. Untermauert wird dies durch einen Test mit 64 Quellen. Die Abbildung 4.3 auf der nächsten Seite zeigt erneut den erzielten Verlauf. Mit einer Durchschnittszeit von 25 ms und Ausreißern von bis zu 1.3 Sekunden für das Lesen von nun 64×512 Samples ist keine Echtzeitfähigkeit mehr gewährleistet. Skalierbarkeit ist dementsprechend nicht mehr gegeben. Um die Tauglichkeit der alternativen Lösungen Berkeley DB und integrierte Datei zu untersuchen, werden diese in den nächsten Abschnitten mittels ähnlicher Testszenarien untersucht. 4.7 Verwaltung mittels Berkeley DB In diesem Abschnitt wird die Verwendbarkeit des Berkeley Datenbanksystems für die gestellten Anforderungen untersucht. Speziell Tests zur Leseperformance solInv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 101 Abbildung 4.3: 200 Abfragen mit je 512 Samples und 64 Audioquellen len zeigen, ob die geforderten Echtzeitanforderungen eingehalten werden können. Zuvor folgen zur Einführung ein paar Worte über das BDB Datenbankkonzept. Grundsätzlich enthält jede Berkeley Datenbank Datensätze, wobei logisch gesehen jeder Datensatz einen einzelnen Eintrag in der Datenbank repräsentiert. Jeder Datensatz besteht aus zwei Teilen: einem Schlüssel sowie den eigentlichen Daten. Der Schlüssel identifiziert einen Datensatz. Durch diese Schlüssel-/Daten-Paare kann man sich die Datenbank als zweispaltige Tabelle vorstellen. Dabei können Schlüssel als auch Daten beliebiger Art und Komplexität sein. 4.7.1 Konfigurationsmöglichkeiten für BDB-Tests Für die Tests mit Berkeley DB gibt es eine Reihe von Faktoren, die zu beachten sind. Es geht um verschiedene Konfigurationsmöglichkeiten, welche die Geschwindigkeit des Datenzugriffs und somit der Auslieferung der Audiodaten aus der Datenbank beeinflussen können. Bevor die Tests beginnen, werden hier die Faktoren angesprochen, welche in Zusammenhang mit der Performance stehen. 4.7.1.1 Art des Datensatz-Schlüssels Der Zugriff auf die Datensätze geschieht über Schlüsselwerte. Diese müssen sinnvoll gewählt werden, um die benötigten Daten schnell zu ermitteln. In Kombination mit der richtigen Zugriffsmethode (4.7.1.3) stellen Schlüssel einen geschwindigkeitsrelevanten Faktor dar. Da alle Audiodaten einen Zeitbezug haben (in Form des Wiedergabezeitpunktes), ist es sinnvoll, diesen in den Schlüsseln zu verwenden. So könnte ein Zeitstempel-Wert den Wiedergabezeitpunkt der Daten eines Datensatzes angeben und Inv.-Nr.: 2005-06-01/071/IN99/2254 102 KAPITEL 4. AUDIODATEN als Schlüssel verwendet werden. Ein Faktor, welcher bei der Wahl eines Schlüssels zu beachten ist, ist die parallele Aktivität verschiedener Audioquellen. Dies bewirkt, dass ein einfacher Zeitwert nicht mehr zur Identifikation ausreicht. Sind 32 Audioquellen gleichzeitig aktiv, müssen zum entsprechenden Zeitwert 32×512 Samples ausgelesen werden. Welches Sample zu welcher Quelle gehört ist aus einem Zeitwert dabei nicht erkennbar. Ein komplexerer Schlüssel ist daher nötig, um gleichzeitig aktive Quellen unterscheiden zu können. In den Tests wird davon ausgegangen, dass dafür eine geeignete Lösung gefunden wird. Eine Möglichkeit wäre, alle Samples von parallelen Quellen für einen Zeitwert t unter aufeinander folgenden Schlüsseln abzulegen. Anschließend kämen alle Samples der Quellen für den Zeitwert t+1 und so weiter fort. Dabei muss der Überblick behalten werden, wie viele Quellen gleichzeitig aktiv sind. Denkbar ist auch eine Erweiterung des Zeitwertes um die Kanalnummer, wobei eine Sortierung der Werte zuerst nach Zeit und anschließend nach dieser Nummer erfolgt. Somit werden Samples aller Audioquellen entsprechend ihrer Abspielreihenfolge abgespeichert. Eine weitere Möglichkeit ist die Einführung einer extra Datenstruktur für den Schlüssel. Auswahl für die Testszenarien In den Tests wird der einfachste Fall, mit Zeitstempeln als Schlüssel, angenommen. Dafür wurden chronologisch aufeinander folgende Integer-Werte verwendet, um Zeitstempel-Werte zu simulieren. Da sich Zeistempel auch in Form von Zeichenketten speichern lassen, werden in gegenüberstellenden Tests beide Formen der Speicherung getestet – in Form von Integern und Zeichenketten. 4.7.1.2 Datensatzgröße Jeder Datensatz in einer BDB Datenbank enthält eine bestimmte Menge von Daten – für IOSONO wären dies eine bestimmte Anzahl an Samples – und somit eine bestimmte Größe. Die Frage ist, wie viele Samples für die effizienteste Datensatzgröße zu wählen sind. Dafür werden verschiedene Möglichkeiten in Erwägung gezogen. Variante 1 Eine Orientierung erfolgt hierfür an der aktuellen IOSONO-Implementierung. Dort werden bei einer Abfrage der Audiodaten Datenmengen für Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 103 4.096-8.192 Samples pro Audiodatei entnommen und gepuffert. Angelehnt daran wird diese Datenmenge als Grundlage eines Testfalls für BDB genommen: jeder Datensatz erhält Daten für 4.096 Samples. Als Schlüssel werden Zeitstempelbezogene Werte verwendet, welche den Wiedergabezeitpunkt der entsprechenden Samples angeben. Zu untersuchen ist jedoch, ob 4.096 Samples pro Datensatz (S/DS) auch tatsächlich die schnellste Variante darstellen. Für eine Vergleichsmöglichkeit werden weitere Werte herangezogen: • Daten für 512 Samples pro Datensatz, da dies die Datenmenge pro Übertragung an den Renderer darstellt • 128 Samples, um zu sehen, ob das häufige Lesen kleiner Datenmengen effizienter ist als der umgekehrte Weg Variante 2 Eine weitere Möglichkeit ist ein komplett anderer Ansatz, die Audiodaten zu verteilen. Anstatt jedem Datensatz nur einen Ausschnitt an Audiodaten einer WAV-Datei zuzuordnen, kann auch der komplette Audioinhalt einer oder mehrerer WAV-Dateien (referenziert von einer gemeinsamen Audioquelle) einem Datensatz zugeordnet werden. Als Schlüssel wird dabei der jeweils eindeutige Name der Audioquelle gewählt, alternativ ist auch ein Zeitstempel-Wert denkbar. Da bei dieser Datenanordnung der Zugriff auf die Daten zu einem bestimmten Abspielzeitpunkt nicht mehr direkt über den Schlüssel möglich ist, muss die Abfrage etwas differenzierter geschehen. Dafür wird nur ein Teil der im Datensatz abgelegten Daten abgefragt, entsprechend der aktuell benötigten Datenmenge. Ein derartiges Verhalten ist mittels von BDB zur Verfügung gestellten Abfragemethoden erreichbar. Das Ergebnis der Tests beider Möglichkeiten wird zeigen, ob eine Datenbank mit wenigen großen Datensätzen performanter ist als eine Datenbank mit vielen kleineren Datensätzen. 4.7.1.3 BDB Zugriffsmethoden BDB bietet für die Datenverwaltung verschiedene Zugriffsmethoden an. Dies sind BTree, Hash, Recno und Queue. Jede Methode bietet Vor- und Nachteile entsprechend der Art der zu speichernden Daten und der Art des zu erwartenden Zugriffs. Inv.-Nr.: 2005-06-01/071/IN99/2254 104 KAPITEL 4. AUDIODATEN • BTree Bei der Zugriffsmethode BTree werden die Daten in einer sortierten, balancierten Baumstruktur abgespeichert. Ein Vorteil dieser Zugriffsmethode ist, dass mehrere Datensätze den gleichen Schlüssel haben können. • Hash Daten werden als erweiterter linearer Hash abgelegt. Duplikate, d.h. unter einem Schlüssel befinden sich mehrere Datensätze, sind wie auch beim BTree erlaubt. • Queue Die Daten werden in Form einer Liste als Datensätze mit fester Länge abgespeichert. Das Design bevorzugt schnelle Einfügeoperationen am Ende der Liste. Zudem gibt es spezielle Operationen für Retrieval und Löschen vom Kopf. Die Queue ermöglicht als einzige Zugriffsmethode Sperren auf Datensatzebene. • Recno Datensätze mit fester oder variabler Länge sind erlaubt. Zur Identifikation werden logische Datensatznummern als Schlüssel verwendet. Auswahl einer geeigneten Zugriffsmethode Zu den verschiedenen Zugriffsmethoden gibt es einige Regeln, die zur Auswahl zwischen diesen herangezogen werden können. Die richtige Zugriffsmethode ist mitentscheidend über die Performancecharakteristika der zu implementierenden Datenbankumgebung im IOSONO-System. Die Zugriffsmethode richtet sich stark nach Größen wie Datentyp und Inhalt der Schlüssel als auch der Größe der Datensätze. Bezogen auf die vorgestellten Arten des Schlüssels und Samples pro Datensatz lässt sich festhalten: Werden den Datensätzen begrenzt Samples zugeordnet (wie z.B. je 4.096; Datensatzgröße-Variante 1) und als Schlüssel Zeitstempel genutzt, empfiehlt sich die Nutzung von Queue oder Recno. Der Grund ist, dass bei logischen Datensatznummern, und insbesondere Integer-Werten, diese die beste Wahl sind. Werden dagegen ganze WAV-Dateien je Datensatz abgelegt (Datensatzgröße-Variante 2), und die zugehörigen Schlüssel als beliebige Zeichenketten erstellt, sind BTree oder Hash zu wählen. Diese sind erste Wahl bei beliebigen Schlüsseln. Jedoch sind dies nur grundlegende Auswahlregeln. Bei detaillierterem Blick auf die Einflussfaktoren gilt: • BTree/Hash Ist die Größe von Datensätzen kleiner als der Cache, aber größer als dass nahezu alle Datensätze in den Cache passen, so sollte bei LokaInv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 105 lität des Schlüsselzugriffs 2 der BTree gewählt werden. Außer bei Vor- oder Rückspulen wird bei IOSONO Sample für Sample aus der Datenbank benötigt, d.h. die Datensätze werden entsprechend ihrer Sortierreihenfolge abgerufen. Somit ist Lokalität gegeben, was auf den BTree hindeutet. Andererseits sind die Datenmengen so groß, dass nur ein Teil der ausgelesenen Daten in den Cache passt, und viele Zugriffe werden benötigt. Dies passt auf die Charakteristiken des Hash-Zugriffs, der dann von der geringeren Anzahl an Verwaltungsdaten profitieren könnte. • Queue/Recno Die Queue eignet sich besonders bei hohem Grad an konkurrierendem Zugriff, da Sperren auf Datensatzebene unterstützt werden. Jedoch können nur Datensätze fester Größe verwendet werden, im Gegensatz zu Recno. Recno erlaubt zudem selbst festlegbare Schlüssel, was bei Queue nicht möglich ist. Zudem können flache Textdateien als permanenter Speicher benutzt werden. Auf IOSONO bezogen ist eindeutig Recno zu bevorzugen, da feingranulare Sperren nicht benötigt werden, dagegen eine freie Schlüsselwahl zu präferieren ist. Fazit Für die Tests werden BTree, Recno und Hash einer eingehenden Überprüfung unterzogen. Diese erfüllen für Variante 1 und 2 der Datensatzgrößen jeweils einen Teil der an sie gestellten Anforderungen, und sind daher für die weiteren Schritte relevant. 4.7.1.4 Datenzugriff Neben der datenbankinternen Zugriffsmethode gilt es, die geeignete Art des Datenzugriffs zu wählen. Dazu stehen grundsätzlich, neben der einfachen Suche über den Datensatzschlüssel, Cursor und Bulk-Abfragen zur Verfügung. Hier stellt sich die Frage, mit welcher Methode die schnellste Lesbarkeit der später eingepflegten Audiodaten erreicht wird. Cursor Cursor erlauben u.a. schnelles Durchlaufen der Datensätze einer Datenbank. Bezüglich allen Zugriffsmethode gilt die Regel, dass der Zugriff über Cursor das Problem mit großen Datensätzen lindert. 2 Eine Lokalität des Schlüsselzugriffs kann dazu beitragen, schnellere Reaktionszeiten bei Zugriffen auf benachbarte Schlüssel (und somit Datensätze) zu erhalten. Diese Lokalität liegt z.B. vor, wenn zwei benachbarte Schlüssel die Werte „aaaaa“ und „aaaab“ haben, d.h. aufsteigend sortiert sind. Inv.-Nr.: 2005-06-01/071/IN99/2254 106 KAPITEL 4. AUDIODATEN Bulk-Abfragen Beim Auslesen einer großen Anzahl von Datensätzen aus einer Datenbank kann die Anzahl an Funktionsaufrufen die Performance stark beeinflussen. In manchen Fällen kann dies durch Bulk-Abfragen verbessert werden. Dabei werden mehrerer Datensätze mit einem einzigen Funktionsaufruf aus der Datenbank abgefragt. Anschließend werden die abgefragten Datensätze aus der erhaltenen Struktur extrahiert. Indexe Keine Wahl bei der Organisation der Datenstruktur spielen Indexe. Diese sind in Berkeley DB nicht explizit setzbar. Der Zugriff erfolgt allein über den Schlüssel eines Datensatzes. Somit sind Indizierungen von Komponenten der Datenbank weder möglich noch nötig. 4.7.1.5 Format der gespeicherten Daten Offen ist auch die Frage, in welcher Form die Daten abgespeichert werden. Zwei Alternativen scheinen sinnvoll: zum einen das Abspeichern von Samples in ihrer Repräsentation als Float-Werte, wie sie auch zum Renderer gesendet werden. Zweite Möglichkeit ist das Abspeichern im WAV-Format, wie sie in den WAVDateien enthalten sind. Hier ist nach Auslesen der Daten eine Umwandlung ins Float-Format nötig, um den Renderer zu bedienen. Die Unterschiede durch die Wahl des Datenformates sollten im Datenvolumen sichtbar werden. Im WAV-Format sind pro Sample 16 bzw. 24 Bit nötig. Ein Float benötigt im Normalfall 32 Bit, d.h. um 25-50% mehr Datenvolumen ist zu erwarten. Damit bleibt zu klären, ob der Umwandlungsaufwand höher liegt als der erhöhte Ausleseaufwand durch die vergrößerte Datenbank. 4.7.1.6 Seitengröße (Pagesize) Dieser Parameter gibt die Größe der Seiten an, welche für die Datenbanken benutzt werden. Auch diese hat entscheidenden Einfluss auf die Performance und wird durch diverse Faktoren beeinflusst (siehe [30], Abschnitt „Access Method Configuration, Selecting a page size“). Die Testdurchgänge wurden mit zwei verschiedenen Werten für die Seitengröße durchgeführt. Dies ist zum einen 4 kByte, was der Seitengröße des Dateisystems entspricht. Eine kleinere Größe wurde zwar untersucht, brachte durch die starke Clusterung der Daten aber nur Geschwindigkeitseinbußen und wird daher hier nicht weiter betrachtet. Zweiter Testwert ist 64 kByte. Die maximale SeitenInv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 107 größe ist auf diesen Wert durch das Datenbanksystems restriktiert. Mit diesem und dem Wert von 4 kByte wird getestet, welche Seitengröße geeignet ist. 4.7.2 Testszenarien und Ergebnisse In diesem Abschnitt werden alle durchgeführten Testszenarien sowie deren Ergebnisse vorgestellt. Alle Tests liefen daraus hinauf, die Performance der Systemkonfiguration im jeweiligen Tests zu überprüfen. So wurde mit verschiedenen BDB-Konfigurationen sowie Datenverteilungsmöglichkeiten gearbeitet, um die performanteste Lösung zu finden. Die Grundlage der Tests bildeten diverse, von Berkeley DB mit Parametern entsprechend der jeweiligen Konfiguration angelegten Datenbankdateien. Diese waren mit Beispieldaten aus vorhandenen WAV-Dateien gefüllt und wurden in den Tests entsprechend der Auslesecharakteristiken von IOSONO, d.h. in chronologischer Ordnung, ausgelesen. Die abgefragten Datenmengen unterschieden sich entsprechend den Testszenarien. Die ersten Tests wurden mit weniger Datenvolumen durchgeführt, um einen Trend zu erkennen. Damit konnten die geeignetste Zugriffsmethode sowie Zugriffsart bestimmt werden. Auch ließ sich die Größe der entstehenden Datenbankdateien untersucht, um Konfigurationen mit zu großen Dateien auszuschließen. Anschließend folgten Tests mit mehr Durchläufen und größerem Datenvolumen, um eine Feinabstimmung durchführen zu können. 4.7.2.1 Erste Erkenntnisse Getestet wurde mit Schlüsseln in Form von aufsteigend geordneten Zeitstempeln, sowohl als Integer wie auch als String. Bei entsprechender Sortierung und Vergleichsfunktion 3 konnten keine Zeitunterschiede zwischen beiden Arten festgestellt werden. Auch unter Nutzung eines Cursors gab es keine messbaren Differenzen zwischen beiden Methoden. Daher wurden alle weiteren Tests mit IntegerWerten als Schlüssel durchgeführt. Auch getestet wurde die Abfrage der Daten mittels eines so genannten BulkZugriffs. Waren Daten für 32 Quellen je 512 Samples pro Datensatz gespeichert, sollte die Bulk-Abfrage die Daten aller 32 Datensätze mit einem Funktionsaufruf abfragen. Jedoch stellte sich heraus, dass die Ergebniszeiten schlechter wa3 Vergleichsfunktionen vergleichen Schlüssel von Datensätzen zur Sortierung und den Datenzugriff und können vom Nutzer festgelegt werden Inv.-Nr.: 2005-06-01/071/IN99/2254 108 KAPITEL 4. AUDIODATEN ren als beim Normalfall mit 32 Abfragen an die Datenbank. Also zeigt sich hier, dass mehrere einzelne Funktionsaufrufe einen umfangreichen Aufruf übertreffen. Bulk-Zugriffe werden somit in den vorgestellten Tests nicht weiter betrachtet. Auch schlechte Ergebnisse lieferte der Versuch, Variante 2 aus „Datensatzgröße“ (4.7.1.2) durchzuführen. Wurden einem Datensatz die Inhalte ganzer WAVDateien zugeordnet und stets Teile dieser Daten abgefragt, erzielte dies konstant schlechtere Werte als mit Variante 1. Daher wird im Weiteren nur die Umsetzung mit kleineren Datensatzgrößen betrachtet. 4.7.2.2 Speicherbedarf Vor der Durchführung der Lesetests wurden die durch das Füllen mit Daten entstehenden Datenbankdateien auf ihre Größe untersucht. Es ergaben sich entsprechend der Zugriffsmethode und weiteren Konfigurationsmöglichkeiten die unterschiedlichsten Dateigrößen. Dies liegt darin begründet, dass manche Zugriffsmethoden (wie BTree) mehr Verwaltungsinformationen speichern als andere. Aber auch die Seitengröße in Kombination mit der Größe eines Datensatzes kann zu erheblichen Mehrverbrauch an Speicherplatz führen, wenn Seiten nur zu kleinen Teilen mit Daten belegt sind. Bestimmte Speicherarten disqualifizierten sich so schon durch den entstehenden Speicherbedarf. Bei einer Vergrößerung der Ursprungsdatenmenge um fünfzig oder mehr Prozent ist kein sinnvoller Einsatz abzusehen, gerade wenn die Messwerte nicht zum Positiven verändert wurden. Die Größe der entstehenden Datenbankdateien hängt von diesen Faktoren ab: • Zugriffsmethode • Seitengröße • Menge der Daten pro Schlüssel • Art der gespeicherten Daten - Daten der WAV-Dateien oder umgewandelte Samples Entsprechend dieser Faktoren ergaben sich die unterschiedlichsten Dateigrößen, wie in Tabelle 4.1 auf der nächsten Seite zu sehen. Basis für das Füllen der Datenbank waren sechs WAV-Dateien mit einer Gesamtgröße von 30.8 MByte. Zu beachten ist, dass hierbei auch die Verwaltungsdaten der Dateien inkludiert sind. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 109 Zugriffsmethode Seitengröße Daten/Schlüssel Datenart [kByte] [kByte] BTree 4 128 WAV Float 4 4.096 WAV Float 64 512 WAV Float 64 4.096 WAV Float Hash 64 512 WAV Float Recno 64 512 WAV Float Größe [MByte] 65,0 54,9 41,1 51,3 32,2 43,9 41,2 164,1 39,5 80,1 32,2 43,9 Tabelle 4.1: Datenbank-Größen Dagegen stehen Verwaltungsinformationen, wie Schlüssel oder Baumstruktur, in den Datenbankdateien. Zu vergleichen sind nun die original 30.8 MByte mit den Größen der entstandenen Datenbankdateien. Man sieht, dass im Extremfall über 160 MByte an Daten entstanden, was mehr als das fünffache der geringst möglichen Dateigröße entspricht. Bei einem Datenbestand von mehreren Gigabyte für Audioszenen ist dementsprechend mit solch einer Konfiguration nicht mehr arbeitbar. Auch Probleme bereiteten diverse Konfigurationen beim Füllen mit Daten. Entsprechende Laderoutinen waren so langsam, dass sie mangels Fortschritt abgebrochen und somit der Testfall aufgegeben wurde. Anscheinend leiden manche Zugriffsmethoden mit bestimmten Konfigurationen unter starken Geschwindigkeitsproblemen beim Füllen der Datenbank. Insbesondere beim Hash war dieses Phänomen verbreitet. Ein Beispiel ist der Fall Hash mit 4 kByte Seitengröße und 128 Samples pro Schlüssel. 4.7.2.3 Testreihe 1 Die Performancetests starten mit der ersten Testreihe, welcher folgende Konfiguration des verwendeten Testrechners zugrunde lag: R Pentium R M, 1.8GHz • CPU: Intel Inv.-Nr.: 2005-06-01/071/IN99/2254 110 KAPITEL 4. AUDIODATEN 128 Samples/DS 512 Samples/DS 4.096 Samples/DS BTree 9,04 34,80 11,12 Hash — 21,66 80,64 Recno 13,73 29,49 12,79 Tabelle 4.2: Durchschnittszeit (ms) bei einer Seitengröße von 4 kByte • Arbeitsspeicher: 512 MByte RAM • Festplatte: 12 ms Zugriffszeit, 100 MBps, 4200 rpm • Betriebssystem: SUSE Linux 9.1 • Dateisystem: Ext3, Seitengröße 4 kByte Auf diesem Rechner wurden die ersten Tests zum Bestimmen der Lesezeiten für Audiodaten aus einer Berkeley DB Datenbank getestet. Testdurchgang: Zugriffsmethoden und S/DS bei 4 kByte Seitengröße Der erste Test wurde mit minimaler Seitengröße durchgeführt, was der Blockgröße des Dateisystems entspricht. Dies waren 4 kByte. Simuliert wurde das Lesen von 32 parallel aktiven Audioquellen. Dabei wurden 2.500-mal je 512 Samples pro Quelle gelesen. Es interessierten bei gegebener Seitengröße die schnellste Zugriffsmethode sowie die beste Menge an Daten pro Datensatz. In Tabelle 4.2 sind die Ergebnisse für die drei Zugriffsmethoden BTree, Hash und Recno für unterschiedliche Datenmengen pro Datensatz dargestellt – letztere wurden mit 128, 512 und 4.096 Samples je Schlüssel untersucht. Die Daten wurden im WAV-Format in der Datenbank gespeichert. Zu sehen ist jeweils die Durchschnittszeit für eine Abfrage, welche entsprechend den Randbedingungen unter 10 ms bleiben muss. Das Ergebnis zeigt: nur eine Konfiguration kann diese Anforderung erfüllen. Als schnellste Variante zeigt sich eindeutig der BTree, von der Konfiguration mit 512 Samples pro Datensatz abgesehen. Der Hash zeigt sich bei 4.096 S/DS weit abgeschlagen, und auch Recno kann nicht überzeugen. Der Versuch mit 128 S/DS wurde für den Hash nicht durchgeführt, da das Füllen der Datenbank schon unverhältnismäßig viel Zeit in Anspruch nahm. Die Datenmenge pro Datensatz erscheint bei einer Größe von 128 Samples optimal. Da die WAV-Dateien mit 24 Bit aufgezeichnet wurden, entspricht dies 384 kByte Daten pro Datensatz. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN BTree Hash Recno 111 128 Samples/DS 512 Samples/DS 4.096 Samples/DS 7,35 7,16 9,38 42,00 13,50 19,16 7,39 7,24 10,60 Tabelle 4.3: Durchschnittszeit (ms) bei einer Seitengröße von 64 kByte Eine Verteilung der Messwerte ist in Darstellung 4.4 erkennbar. Die x-Achse stellt die Abfragen dar, die y-Achse die Zeit in Millisekunden, welche zur Bearbeitung der Abfrage benötigt wurde. Erkennbar ist das häufige Auftreten von sehr langsamen Antwortzeiten. Zum Teil geschieht dies, auch wenn auf der Darstellung nicht erkennbar, in kurzen aufeinander folgenden Abfragen. Testdurchgang: Zugriffsmethoden und S/DS bei 64 kByte Seitengröße Der nächste Test erfolgte mit maximaler Seitengröße, die derzeit auf 64 kByte beschränkt ist. Alle weiteren Parameter blieben unverändert zum vorherigen Szenario. Anhand dieses Tests ist der Einfluss der Seitengröße auf die Performance erkennbar. Es zeigt sich (Tabelle 4.3), dass die Werte gegenüber dem Test mit geringer Seitengröße in allen Fällen verbessert sind. Bei dieser Konfiguration zeigen BTree und Recno ähnliche Ergebnisse. Da die besten Ergebnisse bei einer Konfiguration von 512 S/DS erreicht wurde, spielen die Werte für 4.096 S/DS keine weitere Rolle. Der Hash ist wiederum weit abgeschlagen und kann letztendlich als ungeeignet gesehen werden. Bei der Seitengröße von 64 kByte zeigen sich, im Gegensatz zur Konfiguration mit 4 kByte, Datenmengen für 512 Samples pro Datensatz als optimale Lösung. Dabei sind die besten Testwerte einer Abfrage für 512 Samples immerhin 1.6 ms besser als im 4 kByte-Fall. Dieses Ergebnis geht auch mit der Dokumentation von Abbildung 4.4: 32 Soundquellen, 1.000 Abfragen Inv.-Nr.: 2005-06-01/071/IN99/2254 112 KAPITEL 4. AUDIODATEN BDB konform. Danach sollte ab einer bestimmten Größe der Datensätze die Seitengröße größtmöglich gewählt werden. Mit den gegebenen ca. 1,5 kByte Daten pro Datensatz scheint diese Größe erreicht zu sein. Erstes Fazit Die ersten Tests zeigten die Tendenz, dass die maximale Seitengröße zu wählen ist, um gute Ergebnisse zu erzielen. Des Weiteren überzeugte der BTree als Zugriffsmethode sowie eine Datenmenge von 512 Samples pro Datensatz. Jedoch waren die Ergebnisse grundsätzlich nicht überzeugend. Für 512 Samples und 32 Audioquellen waren im Idealfall noch über 7 ms Lesezeit vonnöten. Bei geforderten 10 ms bleibt nicht mehr viel Spielraum, um 64 oder mehr Audioquellen zuverlässig auszulesen. Für die weiteren Tests wurde daher auf ein schnelleres Testsystem ausgewichen, wo bessere Ergebnisse erzielt werden konnten. 4.7.2.4 Testreihe 2 Die weiteren Tests wurden auf einem Testsystem mit mehr Arbeitsspeicher und schnellerer Festplatte durchgeführt. So konnten schnellere Lesezeiten erreicht und die Anforderungen besser erfüllt werden. Gleichzeitig konnte untersucht werden, ob bei veränderter Hardware die ersten Tendenzen bestätigt werden können. Ein Einfluss des verwendeten Dateisystems konnte durch die Verwendung von ReiserFS untersucht werden, im Unterschied zum bisher eingesetzten Ext3. • CPU: Intel Pentium 4 3.00 GHz • Arbeitsspeicher: 1 GB RAM • Festplatte: 80 GB, 8.5 ms Zugriffszeit, 7200 rpm, 100 MBps • Betriebssystem: SUSE Linux • Dateisystem: ReiserFS Testdurchgang: 64 Audioquellen Einstieg ist ein Vergleich der Zugriffsmethoden, basierend auf einem Test mit 64 aktiven Audioquellen. Gelesen wurden in 2.500 Abfragen jeweils 512 Samples pro Quelle, d.h. ca. 3,5 MByte je Quelle. Die Seitengröße war, wie in allen folgenden Tests, auf 64 kByte festgesetzt. Ein Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 512 WAVs/DS, 64 kByte Seitengröße 113 BTree Hash Recno 7,25 25,80 7,23 Tabelle 4.4: Durchschnittszeit (ms) bei 64 Audioquellen Abbildung 4.5: 64 Soundquellen und Lesen von 10.000x512 Samples Ausschnitt der Ergebnisse, wiederum in Form der Durchschnittszeit für eine Abfrage, wird in Tabelle 4.4 gezeigt. Die Ergebnisse zeigen auch bei dieser Rechnerkonfiguration das gleiche Bild wie in der ersten Testreihe: der BTree bietet zusammen mit Recno die besten Ergebnisse. Die gemessenen Werte allein sind noch nicht allzu aussagekräftig. Neben den eigentlichen Lesezeiten ist gerade auch die Verteilung (Abbildung 4.5) der Lesezeiten von Bedeutung. Sind alle Abfragen gleich schnell, ist dies optimal und die Ergebnisse so hinnehmbar, wie gemessen. Jedoch zeigt sich in der Verteilung eine deutliche Diskrepanz zwischen einzelnen Antwortzeiten. Zudem kommt es zu Häufungen von Ausreißern. Dies macht die Vorsorge gegen solche Ausreißer mittels einer Pufferung extrem schwer. Vergleich des Datenformats: Floats vs. WAV Auch eine Größe, die beachtet werden muss: die Art der Datenspeicherung. Speichert man die Daten im WAVFormat (entsprechend den WAV-Dateien) oder aber Samples, welche im FloatFormat dargestellt sind? Die Frage stellt sich, da die Audiodaten ursprünglich im WAV-Format gespeichert sind, in IOSONO dagegen als Float-Werte weiter verarbeitet werden. Um die effizientere Variante zu finden, wurde auch dies in entsprechenden Tests untersucht. Dafür wurden jeweils die gleichen Daten in den jeweiligen Formaten verglichen. Die WAV-Dateien wurden mit 24 Bit aufgezeichnet, d.h. pro Sample sind 3 kByte Daten vonnöten. Im Vergleich dazu ergeben Samples im Inv.-Nr.: 2005-06-01/071/IN99/2254 114 KAPITEL 4. AUDIODATEN Float 512 Samples/DS 8,30 4.096 Samples/DS 10,36 WAV 7,25 7,79 Tabelle 4.5: Durchschnittszeit (ms) im Vergleich: Float und WAV 4.096 Floats/DS, 4 kByte Seitengröße 512 WAVs/DS, 64 kByte Seitengröße 4.096 WAVs/DS, 4 kByte Seitengröße Cursor 9,12 7,25 7,79 Kein Cursor 9,98 7,45 9,68 Tabelle 4.6: Durchschnittszeit (ms) im Vergleich: Cursorzugriff Float-Format auf dem getesteten System eine Größe von 32 Bit (4 kByte) pro Sample. Der Vergleich zeigt, ob es günstiger ist: • geringere Datenmengen abzuspeichern und diese nach dem Auslesen in Float-Werte zu konvertieren oder • größere Datenmengen abzuspeichern und dabei die Konvertierungszeit zu sparen Es ist zu erwarten, dass die Speicherung im WAV-Format die bessere Wahl darstellt, da bei diesem Vergleich die Zugriffe auf den Externspeicher entscheidend für die Performance sein sollten. Tabelle 4.5 zeigt einen Ausschnitt aus den Ergebnissen, die beim Lesen von je 512 Samples in 2.500 Abfragen erzielt wurden. Die Seitengröße wurde auf 64 kByte festgesetzt. Simuliert wurden 64 Audioquellen. Resultat: das Abspeichern im WAV-Format zeigt wie erwartet die schnelleren Antwortzeiten. Damit ist es effizienter, weniger Daten zu speichern und diese erst im Nachhinein umzuwandeln, als den umgekehrten Weg zu gehen. Einfluss eines Cursors Neben verwendeter Zugriffsmethode und gewählter Datenverteilung spielt auch die Art des Datenzugriffs eine Rolle bei der Performance. Diesbezüglich wird der Einfluss eines Cursors aufs Zugriffsverhalten untersucht. Dafür wurden Datenbanken sowohl mit als auch ohne Cursor abgefragt. Da die Daten sukzessive ausgelesen werden, ist eine Geschwindigkeitssteigerung mit Cursor zu erwarten, da dies dem Prinzip des Cursorzugriffs entgegenkommt. Mit dem Beibehalten der Testdurchführung der letzten Versuche zeigen die erzielten Ergebnisse (Tabelle 4.6), dass ein cursorunterstützter Zugriff jenen ohne Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 512 Floats/DS, 64k Seitengröße 4096 Floats/DS, 4k Seitengröße 115 64 kByte Cache 8,22 9,12 256 MByte Cache 8,56 10,87 Tabelle 4.7: Durchschnittszeit (ms) abhängig von der Cachegröße Cursor übertrifft. Somit ist, wie schon erahnt, ein Cursor einzusetzen, um optimale Performance zu erzielen. Auswirkung der Cachegröße Ziel dieses Versuches ist es, den Einfluss der Cachegröße auf das gegebene Datenbankszenario zu testen. Dies soll zeigen, ob der Cache einen positiven Einfluss auf das Auslesen von Daten hat. Jedoch wird schon jetzt kein bzw. kaum Einfluss erwartet, da die von BDB implementierte Cachestrategie ein Least Recently Used4 (LRU) darstellt. Dies optimiert den Zugriff auf schonmals gelesene Daten, da die häufigsten Zugriffe im Cache gehalten werden. Da in IOSONO Daten chronologisch, und zumeist nur einmalig benötigt werden, ist kein Erfolg dieser Cachestrategie zu erwarten. Um die Cachebedeutung zu erkennen, wurden sowohl die minimalste, als auch eine relativ große Cachegröße gewählt, um Tendenz und Ergebnis zu ermitteln. Die Tests wurden mit der Zugriffsmethode BTree durchgeführt, und wiederum in 2.500 Abfragen Daten für je 512 Samples gelesen. Die Tabelle 4.7 zeigt, dass: a) die Cachegröße, wenn auch abhängig von z.B. Seitengröße und Anzahl Daten pro Datensatz, die Performance nicht positiv beeinflussen kann sowie b) eine große Cachegröße noch schlechtere Ergebnisse bedeutete als eine kleine Somit brachten Änderungen der Cachegröße keine spürbare Geschwindigkeitssteigerung. Zugriffsmethode Schon in den vorherigen Testreihen hat sich der BTree als beste Zugriffsmethode herausgestellt. Zur Vervollständigung wird nochmals die schnellste Zugriffsmethode mittels eines weiteren Tests bestimmt. Dafür sind zwei verschiedene Konfigurationen angelegt. Zum Test stand eine Datenbank mit Daten 4 Bei LRU werden lange nicht benutzte Einträge verdrängt, wenn der dem Cache zur Verfügung stehende Speicherplatz nicht mehr ausreicht Inv.-Nr.: 2005-06-01/071/IN99/2254 116 KAPITEL 4. AUDIODATEN 512 S/DS BTree 7,15 Hash 13,50 Recno 7,24 4.096 S/DS 9,38 19,16 10,60 Tabelle 4.8: Vergleich der Zugriffsmethoden, abhängig von S/DS für 512 Samples pro Datensatz sowie mit Daten für 4.096 Samples pro Datensatz. Die Durchschnittszeiten bei 2.500 Abfragen sind in Tabelle 4.8 aufgeführt. Der BTree als Zugriffsmethode zeigt die besten Ergebnisse. Zwar kann Recno teilweise mithalten, jedoch ist dort die Einschränkung bzgl. der Schlüsselwahl negativ einzubeziehen (siehe 4.7.1.3). Der Hash jedoch ist keineswegs in der Lage, mit den anderen Zugriffsmethoden mitzuhalten. Auch zeigt sich erneut, dass Daten für 512 Samples die geeignetste Option darstellen. Vorläufiges Fazit In diversen weiteren Tests mit anderen Datenmengen, Seitengrößen und Cachegrößen konnten keine besseren Ergebnisse erzielt werden als die hier vorgestellten. Die aufgezeigten Tendenzen wurden dagegen bestätigt. 4.7.3 Auswertung der Ergebnisse Dieser Abschnitt fasst die Erkenntnisse zusammen, die in den durchgeführten Testreihen erlangt wurden. Die daraus entstandene beste Konfiguration von BDB ist im Folgenden aufgezeigt. 4.7.3.1 Beste Konfiguration • Zugriffsmethode: BTree. Auch unter Benutzung von Integern als Schlüssel zeigt die Recno-Methode keine Vorteile. Der Hash brachte ebenfalls schlechtere Ergebnisse. Somit kosten die erweiterten Verwaltungsinformationen des BTree offenbar weniger Geschwindigkeit, als die chronologischen Schlüssel, welche Lokalität des Schlüsselzugriffs ermöglichen, einbringen. • Ein Datensatz enthält Daten für 512 Samples. Weitere Möglichkeiten wie 128 oder 4.096 Samples pro Schlüssel resultierten nicht in verbesserten oder langsameren Antwortzeiten. Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 117 • Seitengröße ist 64 kByte. Die Tests zeigten, dass die maximal mögliche Seitengröße von 64 kByte die besten Ergebnisse erzielte. • Cachegröße ist unbedeutend. Unter normalen Umständen ist die Cachegröße ein bestimmender Faktor beim Einsatz eines Datenbanksystems. In dem hier benötigten Szenario jedoch, das meistens einem Kaltstart der Datenbank und einem nur einmaligen Lesen eines Datensatzes entspricht, spielt der Cache keine Rolle. Dieser enthält meistens nur Daten, welche während des nächsten Aufrufs nicht benötigt werden. Somit hatte die Cachegröße keinen Einfluss auf die Testergebnisse und kann als unbedeutend eingestuft werden. • Für den Datenzugriff wird ein Cursor benutzt. Der Umstand, dass die Daten in chronologischer Folge abgefragt werden, unterstützt die Funktionsweise eines Cursors, welcher über alle Datensätze einer Datenbank iteriert. Somit ist es keine Überraschung, dass ein Cursorzugriff den Standardzugriff geschlagen hat. Ein Bulk-Zugriff wiederum zeigte keinerlei Vorteile. Eher das Gegenteil, ein verlangsamter Zugriff, war das Ergebnis. 4.7.3.2 Fazit Das Ergebnis der Untersuchungen ist auch mit der besten Konfiguration folgendes: mit Berkeley DB als Verwaltungssystem für die Audiodaten sind die Echtzeitanforderungen nicht immer erfüllbar. Während die durchschnittliche Zugriffszeit den Anforderungen entspricht, treten z.T. gebündelt starke Ausreißer auf, welche selbst durch Puffer kaum ausgeglichen werden können. Die Ausreißer gehen in den Bereich von über 100 ms, und sind teilweise von Abfragen mit 20, 30 oder mehr ms umgeben. An solchen Stellen wäre selbst mit großem Puffer die Echtzeitrealisierung unsicher, da der Puffer zwischen den Ausreißern nicht genügend Füllzeit hat. Dazu sind die Antwortzeiten mit niedrigen Werten zu selten. Daher muss die Feststellung sein, dass Berkeley DB für die Verwaltung der Audiodaten nicht geeignet ist. Schlussfolgerung ist damit, dass eine alternative Speicherungsform gefunden werden muss. Darauf wird im nächsten Abschnitt näher eingegangen. Inv.-Nr.: 2005-06-01/071/IN99/2254 118 KAPITEL 4. AUDIODATEN Abbildung 4.6: 64 Soundquellen, 10.000x512 Samples gelesen 4.8 Verwaltung über integrierte Audiodatei Dieser Abschnitt widmet sich der zweiten angedachten Möglichkeit zur Verwaltung der Audiodaten: in Form einer großen Datei. Nachdem das Layout derselben entworfen wurde, sind ebenfalls diverse Tests durchgeführt worden. Diese zeigen im Vergleich zu BDB sowie zur aktuellen Systemimplementation, welche Performance die Dateilösung bieten kann. Ansatz hierfür ist eine Datei, in welcher alle Daten für die Audioausgabe einer Szene abgelegt werden. Zu beachten sind dabei sowohl zeitlich korrekte Reihenfolge der Datenablage von Audiosamples, als auch Einordnung anhand der zugehörigen Quelle – die Parallelität von Quellen spielt wiederum eine Rolle. Nur so kann eine korrekte Audioausgabe mit Zeit- und Kanalbezug erfolgen. Für die Testdurchführung wurde eine Datei erzeugt und mit Daten für Samples aus diversen Audiodateien gefüllt. Anschließend wurde eine konstante Anzahl an Samples ausgelesen. Simuliert wurde dabei das Auslesen von Daten für 32 bzw. 64 gleichzeitig aktive Quellen. Damit wurden jeweils Daten für 32×512 Samples bzw. 64×512 Samples pro Abfrage ausgelesen. Dies wurde mit 1.000 und 10.000 Abfragen an Dateien bis zu ca. 1,5 GB Größe untersucht. 4.8.1 Testergebnisse Das Diagramm 4.6 zeigt die erzielten Testergebnisse für 64 Quellen und 10.000 Abfragen. Die Tests wurden auf dem gleichen Rechner durchgeführt wie Testreihe 2 bei Berkeley DB (siehe 4.7.2.4). Bei einer Gesamtantwortzeit von 53 s ergibt sich eine Lesezeit von 5,3 ms pro 512 Samples, was die geforderten 10 ms deutlich unterbietet. Zudem ist die maximale Antwortzeit mit 76 ms nur halb so groß wie die 150 ms der Datenbanklösung. Sofort erkennbar ist, dass die Verteilung der Lesezeiten nicht so zufällig erInv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 119 scheint wie bei der Datenbanklösung. Die Ergebnisse sind dabei innerhalb der Anforderungen. Ein Puffer in vernünftiger Größe kann die Ausreißer gut ausgleichen. Insbesondere, da zwischen zwei Ausreißern Zeit zum Neupuffern vorhanden ist. Zum Vergleich werden die Ergebnisse dieses Tests denen von Berkeley DB sowie der aktuellen IOSONO-Implementierung gegenübergestellt (Tabelle 4.9). Eindeutig erkennbar sind, gerade bei den Tests mit 64 Audioquellen, die besten Ergebnisse auf Seiten der integrierten Datei. 4.8.1.1 Evaluierung Die Dateilösung lässt weniger Spielraum bei Konfigurationen als Berkeley DB. Jedoch zeigten sich in der gewählten Anordnung der Daten Leseergebnisse, welche die von BDB als auch die des aktuellen Systems deutlich schlagen. Dies war die Voraussetzung, um eine Lösung zur Speicherung der Audiodaten als erfolgreich anzusehen. Die Dateilösung hat diese Voraussetzung erfüllt und wird daher in Zukunft die Speicherung der Audiodaten für IOSONO übernehmen. Somit wird im Weiteren die Umsetzung der Integration der neuen Speicherung in das IOSONO-System erläutert. Nach einer detaillierten Vorstellung der neuen Datenstruktur wird kurz auf die Erzeugung dieser Struktur eingegangen. 4.8.2 Die Datenstruktur Dieser Abschnitt behandelt die zu entwickelnde Datenstruktur der Datendatei. Wie sich gezeigt hat, sollten die Daten für optimale Performance in der Auslese- und Abspielreihenfolge gespeichert werden. Die Daten werden im WAVFormat abgespeichert, d.h. so, wie sie auch in den originalen WAV-Dateien vorliegen. Dabei werden die Daten in der Anordnung gespeichert, wie sie zur Abspielzeit benötigt werden. So kann die Datei im Normalfall chronologisch, ohne Durchschnittszeit Maximum 32 Quellen 64 Quellen 32 Quellen 64 Quellen IOSONO Aktuell 10,9 25,1 628,2 1.375,0 Berkeley DB 3,7 7,2 75,7 150,6 Datei neu 2,5 5,3 78,0 76,4 Tabelle 4.9: Zeitaufwand (ms) für verschiedene Implementierungen Inv.-Nr.: 2005-06-01/071/IN99/2254 120 KAPITEL 4. AUDIODATEN Abbildung 4.7: Dateilayout Sprünge, ausgelesen werden. Dies ist wichtig für die Performance, um unnötige Bewegungen innerhalb der Datei und auch auf der Festplatte zu vermeiden. Das chronologische Auslesen entspricht dem Standardverhalten des IOSONOSystems, wo die normale Wiedergabe der Regelfall ist. Bei der Erarbeitung der Struktur ist die Abfragecharakteristik der Daten zu beachten. Was tun wenn keine Daten vorliegen? Entweder wie „richtige“ Daten komplett abspeichern – dies geht einher mit unnötigem Datenaufkommen. Zweite, und zu bevorzugende Variante: Leerdaten nicht abspeichern und stattdessen den zugehörigen Bereich als leer markieren. Weiterhin ist zu beachten, dass oftmals nur ein Teil der Gesamtzahl von Kanälen aktiv ist. In diesem Fall macht es keinen Sinn, Daten für die inaktiven Kanäle abzuspeichern. Daher scheint es sinnvoll, sich für die Szene zu vermerken, wann welche Slots aktiv sind. Dementsprechend werden nur zu aktiven Slots Daten abgespeichert. Um diese und weitere benötigte Verwaltungsinformationen zu sichern wird die Datei in zwei Bereiche eingeteilt: die Verwaltungsdaten sowie die eigentlichen Audiodaten. Die Aufteilung wird in Abbildung 4.7 dargestellt. Für die Verwaltung werden spezielle Dateiheader eingeführt. Entwickelt werden Formate für einen Haupt- und mehrere Teilheader pro Datei. Der Inhalt dieser Header gestaltet sich wie folgt: Hauptheader • Maximale Anzahl an Kanälen • Anzahl an Bits pro Sample Die Informationen des Hauptheaders gelten für die komplette Datei. Mit der Anzahl an Bits pro Sample wird beim Auslesen erkannt, wie viele Daten für ein Inv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 121 Sample ausgelesen werden. Dies wird im Normalfall eine Größe von 24 Bit sein, was jedoch variieren kann. Die maximale Anzahl an Kanälen zeigt, wie viele Kanäle maximal parallel aktiv sein können. Maximal daher, da nicht immer alle Kanäle gleichzeitig aktiv sein werden. Über die Aktivität der jeweiligen Kanäle in Abhängigkeit von der Zeit enthalten die Teilheader weitere Informationen. Der Maximalwert wird jedoch in der Anwendung benötigt, um die entsprechenden Datenstrukturen zur Aufnahme der Audiodaten passend dimensionieren zu könne. Teilheader • Aufzählung der aktiven Slots • Offset der zugehörigen Datensektion • Länge der Datensektion • Info über Leerdaten Jeder Teilheader verweist auf einen zugehörigen Datenbereich innerhalb der Datei. Dafür wird der Offset-Wert genutzt, welcher die Position des Bereiches in Bytes angibt. Mit der Länge der Datensektion wird angegeben, für welchen Datenbereich der Header Informationen enthält. Die Zahl der aktiven Kanäle gibt an, wie viele der im Hauptheader festgelegten Kanäle zum Gültigkeitszeitpunkt des Headers aktiv sind. Mit der Info über Leerdaten kann man Zeitpunkte definieren, in denen für bestimmte Kanäle keine Daten verfügbar sind. Die Header werden vor Beginn des Abspielvorgangs ausgelesen und die enthaltenen Informationen vermerkt. So ist jederzeit schneller Zugriff auf diese Daten möglich. Dies ist eine Voraussetzung, um jederzeit schnell an eine gewünschte Abspielposition zu navigieren. 4.8.3 Erzeugung Die Erzeugung der Audiodatei kann vorerst über die vorhandene Systemimplementierung ermöglicht werden. Dort werden während des Abspielens einer Szene alle beteiligten Audiodaten ausgelesen und weiterverarbeitet. Dies ist der Einstiegspunkt für die Dateierzeugung. Anstatt die ausgelesenen Daten an die folgenden Systemkomponenten weiterzuleiten, werden diese an ein neu zu implementierendes Interface gesendet. Dieses nimmt die einkommenden Daten und wandelt Inv.-Nr.: 2005-06-01/071/IN99/2254 122 KAPITEL 4. AUDIODATEN Abbildung 4.8: Dateierzeugung diese so um, dass sie in das Dateiformat passen. So werden diese Daten in die Datei geschrieben. Mittels des vorhandenen Wissens aus der Szenenbeschreibung und dieser Daten kann zudem die Sektion mit den Steuerinformationen der Datei erzeugt werden. Das Aufteilen der Datenbereiche der Datei ergibt sich anhand der aktiven Kanäle laut Szenenbeschreibung. Datenbereiche definieren sich aufgrund der Änderung in den aktiven Kanälen. Werden zu einem Zeitpunkt Kanälen inaktiv oder andere aktiv, beginnt ein neuer Datenbereich mit Audiodaten für die zum entsprechenden Zeitpunkt aktiven Kanäle. Nach diesem Prinzip gliedert sich die Datei in mehr oder weniger viele logische Teilbereiche, wie in Abbildung 4.8 gezeigt. Dort sind im oberen Bereich Kanäle dargestellt, welche in bestimmten Intervallen (ausgefüllt dargestellt) aktiv sind, d.h. Audiodaten enthalten und wiedergeben. Nach der Erstellung des Dateilayouts ergeben sich daraus sechs Datenbereiche, jeder mit einer individuellen Konfiguration an aktiven Kanälen. Langfristig steht das Ziel, die Erzeugung der Datei an das Prinzip der Ausgabeschedules anzugliedern. Wenn anhand dieser die Datenverteilung berechnet werden kann, ist über dieses Wissen die Dateierzeugung regelbar. 4.8.4 Integration Die Integration der neuen Dateilösung erfordert keine großen Änderungen der Leseschnittstelle. Wie schon in 4.2 erläutert, sind die Klassen DiskThread und DiskThreadScheduler anzupassen. Das in diesen implementierte anforderungsspezifische Auslesen aus einem Pool von Dateien entfällt. Dafür wird chronoInv.-Nr.: 2005-06-01/071/IN99/2254 KAPITEL 4. AUDIODATEN 123 logisch aus nur noch einer Datei ausgelesen. Die gelesenen Daten werden entsprechend der Informationen im Dateiheader auf die verschiedenen Slots verteilt, über welche die Daten zum Renderer übertragen werden. Das Slot-Konzept (4.6.1) wird somit nicht angetastet, wodurch alle weiteren Aktionen wie bisher durchgeführt werden können. 4.8.5 Evaluierung Die Wahl einer Datei für die Speicherung der Audiodaten bietet, wie durch die Tests gezeigt, die beste Performance für das IOSONO-System. Jedoch stellt sie praktisch eine statische Lösung, mittels Vorrendern der Audiodaten, dar. Ein Vorteil des IOSONO-Systems, die Veränderung von Parametern zur Abspielzeit, fällt damit aus. Die Datei muss bei jeder Änderung neu erstellt werden. Um den dafür notwendigen Aufwand zu verringern, ist eine Aufteilung der Datei in kleinere logische Bestandteile möglich. Dann müssen nur die betroffenen Bestandteile verändert und neu berechnet werden. Eine Aufteilung der Datei kann weiterhin nötig sein, wenn die Grenzen des Dateisystems erreicht sind. Da z.T. die obere Grenze für Dateien bei 4 GB liegt, muss auch die erzeugte Datei diese einhalten. Gelingt dies nicht, muss der Dateiinhalt auf mehrere Dateien aufgeteilt werden. Hier besteht die Wahl zwischen zwei Vorgehensweisen. Entweder, man gibt jeder Datei die entsprechenden Header bei, oder nur die erste Datei erhält alle Header und die weiteren Dateien enthalten nur Audiodaten. Inv.-Nr.: 2005-06-01/071/IN99/2254 Kapitel 5 Fazit und Ausblick Diese Arbeit beschäftigte sich mit der Verwaltung spatio-temporaler Daten für die Wellenfeldsynthese. Eingeteilt in die Datenarten Meta- und Audiodaten, wurden Lösungen und Ansätze für grundlegende Fragen der Datenverwaltung gefunden. Die Metadaten sind nun in ein komfortables Datenverwaltungssystem integriert. Dies ermöglicht es mehreren Benutzern, konsistent Daten zu speichern und zu verwalten. Jedoch kann immer nur ein Nutzer gleichzeitig mit denselben Daten arbeiten, um diese konsistent zu halten. Daher bleibt ein umfangreiches Thema noch offen: die Mehrbenutzerunterstützung. Diese ist entsprechend zu integrieren. Eine denkbare Lösung ist die Installation eines Client-Server Systems, welches den Nutzern gegenseitige Änderungsverfolgung und simultanes Arbeiten an gleichen Daten ermöglichen kann. Im Sinne dieser Entwicklung sind auch lange Transaktionen für eine Mehrbenutzerumgebung zu implementieren, da diese im Moment nur für einen Nutzer mittels des Versionierungssystems umgesetzt sind. Auch für mehrere Clients lässt sich das Versionierungssystem als Grundlage nutzen, wenn es z.B. um Arbeitsbereiche erweitert wird. Die genaue Umsetzung ist eine der offenen Fragen. Weiterhin zu lösen ist die Thematik der Konsistenz von Meta- und Audiodaten. Dies betrifft zum einen die Überwachung der physischen Speicherung der Audiodaten. So ist mittels Referenzkontrolle über Löschung oder Erhaltung referenzierter Audiodaten zu entscheiden. Tiefer greift die Konsistenzkontrolle der aufgestellten Szenen in Verbindung mit den referenzierten Daten. Die Ausgabereihenfolge von Audiodaten für Audioszenen ist in bestimmten Bedingungen zu fassen. Ein Ausgabeschedule sorgt für die korrekte Bereitstellung der Daten, während diese Bedingungen mittels geeigneter Algorithmen auf Konsistenz zu überprüfen sind. Ansätze hierfür bietet die Diplomarbeit von Thomas Schröder [29]. Inv.-Nr.: 2005-06-01/071/IN99/2254 126 KAPITEL 5. FAZIT UND AUSBLICK Die dort vorgestellten Konzepte sind über geeignete Mittel in das Datenverwaltungssytem der Metadaten zu integrieren. Auf Seiten der Audiodaten wurde anhand von umfangreichen Tests eine Speicherung der Daten in einer Datenbank verworfen. Die erzielten Ergebnisse hielten den Anforderungen nicht stand. Stattdessen wurde ein Modell zur Speicherung der Audiodaten in komplexen Dateien entwickelt. Es gilt, dieses umzusetzen sowie im realen Einsatz auf seine Leistungsfähigkeit zu überprüfen. Auch gilt es, neben der Wiedergabe eine funktionierende Lösung für den Aufnahmeprozess der Dateien zu entwerfen. Großer Aufwand zum Neu-Rendern der Datei bei Änderungen ist zu vermeiden. Auch kann über eine Lösung zum Rendern der Datei während des Aufnahmeprozesses der Audiodaten nachgedacht werden. Inv.-Nr.: 2005-06-01/071/IN99/2254 Anhang A XQuery-Funktionen A.1 Funktion zum Abfragen einer bestimmten Dokument-Version declare function local:myFunc($el as item(), $time as xs:integer) as item()* { typeswitch($el) case document-node() return document { for $r in $el/child::element() return local:myFunc($r, $time) } case element() return if( not(empty($el/xmtsaw:timestamp)) and ( every $vt in $el/xmtsaw:timestamp satisfies ( $vt/@vtBegin > $time or $vt/@vtEnd <= $time ))) then () else element {node-name($el)} { for $a in $el/@* return attribute {node-name($a)} {data($a)}, if( empty($el/*) ) Inv.-Nr.: 2005-06-01/071/IN99/2254 128 ANHANG A. XQUERY-FUNKTIONEN then () else ( for $ta in $el/xmtsaw:timeVaryingAttribute where ( $ta/@vtBegin <= $time and ( empty($ta/@vtEnd) or $ta/@vtEnd > $time )) return attribute {$ta/@name} {$ta/@value}, for $s in $el/child::node() where( local-name-from-QName( node-name($s)) != \"timestamp\" and local-name-from-QName( node-name($s)) != \"timeVaryingAttribute\") return local:myFunc($s, $time) ) } default return $el }; for $a in doc("dbxml:/containerName/docId")/* return local:myFunc($a, version); Quelltext A.0: Abfrage eines Dokumentes A.2 Funktionen zur Bestimmung von Versionsdifferenzen declare function local:getId($el as element() ) as xs:string* { let $n:= name($el) return if( $n = "body" or Inv.-Nr.: 2005-06-01/071/IN99/2254 ANHANG A. XQUERY-FUNKTIONEN $n $n $n $n = = = = 129 "head" or "timecode" or "spamixCfg" or "topLayout") then () else if( not( empty($el/@dbNodeId)) ) then "dbNodeId" else if( $n = "region" ) then "regionName" else if( $n = "additionalSrc" ) then "src" else if( $n = "spamixSrc" ) then "ref" else if( $n = "audio" ) then "id" else "id" }; Quelltext A.1: Bestimmung des als PID funktionierenden Attributes zum Element declare function local:getIdVal($el as element() ) as xs:string* { let $n:= name($el) return if( $n = "body" or $n = "head" or $n = "timecode" or $n = "spamixCfg" or $n = "topLayout") then () Inv.-Nr.: 2005-06-01/071/IN99/2254 130 ANHANG A. XQUERY-FUNKTIONEN else if( not( empty($el/@dbNodeId)) ) then string($el/@dbNodeId) else if( $n = "region" ) then string($el/@regionName) else if( $n = "additionalSrc" ) then string($el/@src) else if( $n = "spamixSrc" ) then string($el/@ref) else if( $n = "audio" ) then string($el/@id) else string($el/@id) }; Quelltext A.2: Bestimmung des Wertes des PID-Attributes zu gegebenem Element declare function local:getEl($parent as element()*, $el as element() ) as element()* { let $n:= name($el) for $x in $parent/*[name() = $n] return if( $n = "body" or $n = "head" or $n = "layer" or $n = "timecode" or $n = "spamixCfg" or $n = "topLayout" ) then $x else if( count($el/@dbNodeId) != 0 and count($x/@dbNodeId) != 0 and Inv.-Nr.: 2005-06-01/071/IN99/2254 ANHANG A. XQUERY-FUNKTIONEN 131 string($x/@dbNodeId) = string($el/@dbNodeId)) then $x else if( $n = "region" and string($x/@regionName) = string($el/@regionName) ) then $x else if( $n = "additionalSrc" and string($x/@src) = string($el/@src) ) then $x else if( $n = "spamixSrc" and string($x/@ref) = string($el/@ref) ) then $x else if( $n = "audio" and count($x/@id) != 0 and count($el/@id) != 0 and string($x/@id) = string($el/@id) ) then $x else if( count($el/@id) != 0 and count($x/@id) != 0 and string($x/@id) = string($el/@id) ) then $x" else () } Quelltext A.3: Ermittelt für Eltern-Element das Kind mit gleichem PID-Wert wie gegebenes Vergleichselement declare function local:getAttributes( $oldEl as element()*, $el as element(), $path as xs:string) as element() Inv.-Nr.: 2005-06-01/071/IN99/2254 132 ANHANG A. XQUERY-FUNKTIONEN { let $a:= "" return insert-before( for $x in $el/@* let $oldAttr := $oldEl/@*[name()=name($x)] return if( count($oldAttr)=0 ) then <newAttrib> <path>{$path}</path> <name>{name($x)}</name> <value>{data($x)}</value> </newAttrib> else if( data($oldAttr) != data($x) ) then <changed> <path>{$path}</path> <name>{name($x)}</name> <oldVal>{data($oldAttr)}</oldVal> <newVal>{data($x)}</newVal> </changed> else () , 0, for $x in $oldEl/@* return if( count($el/@*[name() = name($x)]) = 0 ) then <deletedAttrib> <path>{$path}</path> <name>{name($x)}</name> <value>{data($x)}</value> </deletedAttrib> else () ) }; Quelltext A.4: Liste aller neuen, veränderten und gelöschten Attribute zu gegebenem Element bestimmen Inv.-Nr.: 2005-06-01/071/IN99/2254 ANHANG A. XQUERY-FUNKTIONEN 133 declare function local:myFunc($el as element(), $elOld as element()*, $p as xs:string) as element()* { for $c in $el/* let $old := local:getEl($elOld, $c), $loc := if(empty(local:getId($c))) then concat($p, "/xmtsaw:", name($c)) else concat($p, "/xmtsaw:", name($c), "[@", local:getId($c), "=", local:getIdVal($c), "]") return if( name($c) = "timestamp" or name($c) = "timeVaryingAttribute") then () else if( count( $old)=0 ) then <new> <location>{$p}</location> <path>{$loc}</path> <content>{$c}</content> </new> else insert-before(<element>{$loc}</element>, 0, insert-before( local:getAttributes($old, $c, $loc), 0, local:myFunc($c, $old, $loc) )) }; for $a in doc("dbxml:/containerName/new_doc")/* let $b := doc("dbxml:/containerName/current_doc")/ return local:myFunc($a, $b, "") Quelltext A.5: Bestimmung der Differenzen zwischen zwei XML-Dokumenten Inv.-Nr.: 2005-06-01/071/IN99/2254 Literaturverzeichnis [1] CVS. https://www.cvshome.org/. [2] Cyclic RCS page. https://www.cvshome.org/cyclic/cyclic-pages/rcs.html. [3] Cyclic SCCS page. https://www.cvshome.org/cyclic/cyclic-pages/sccs.html. [4] Toshiyuki Amagasa, Masatoshi Yoshikawa, und Shunsuke Uemura. A Data Model for Temporal XML Documents. In DEXA ’00: Proceedings of the 11th International Conference on Database and Expert Systems Applications, Seiten 334–344, London, UK, 2000. Springer-Verlag. [5] Peter Batty und Richard G. Newell. Technical Paper 8: GIS Databases are Different. Dez 1998. [6] Bill Beauregard. Oracle Database 10g Workspace Manager Overview. Oracle Corporation, Nov 2003. [7] Sandra Brix, Frank Melchior, Thomas Roder, Stefan Wabnik, und Christian Riegel. Authoring Systems for Wave Field Synthesis Content Production. In 115th Audio Engineering Society Convention, New York, Okt 2003. Audio Engineering Society. [8] S. Chien, V. Tsotras, und C. Zaniolo. A Comparative Study of Version Management Schemes for XML Documents, 2000. [9] Faiz Currim, Sabah Currim, Curtis E. Dyreson, und Richard T. Snodgrass. A Tale of Two Schemas: Creating a Temporal XML Schema from a Snapshot Schema with tXSchema. In EDBT, Seiten 348–365, 2004. [10] Curtis E. Dyreson. Observing Transaction-Time Semantics with TTXPath. In WISE (1), Seiten 193–202, 2001. Inv.-Nr.: 2005-06-01/071/IN99/2254 LITERATURVERZEICHNIS 135 [11] Fraunhofer Institut Digitale Medientechnologie. Klangfeldsynthese, Jan 2004. www.idmt.fraunhofer.de/presse/textarchiv/produktinformation/ IOSONObasicdeutsch.pdf. [12] D. Gao und R. T. Snodgrass. Syntax, Semantics, and Query Evaluation of the tXQuery Temporal XML Query Language, Mär 2004. [13] John Robert Gardner und Zarella L. Rendon. XSLT & XPath - A Guide to XML Transformations. Prentice Hall PTR, New Jersey, USA, 2002. [14] F. Grandi und F. Mandreoli. The Valid Web: it’s Time to Go, 1999. [15] Luis Gravano, Panagiotis G. Ipeirotis, H. V. Jagadish, Nick Koudas, S. Muthukrishnan, und Divesh Srivastava. Approximate String Joins in a Database (Almost) for Free. In VLDB 2001, Seiten 491–500, 2001. [16] Stephan Grimm. Unscharfer Vergleich von Produktnamen auf StringBasis unter Zuhilfenahme von Kontextinformationen im Rahmen eines eCommerce-Projektes. Diplomarbeit, Fachhochschule Karlsruhe, . . [17] Andreas Heuer und Gunter Saake. Datenbanken – Konzepte und Sprachen, Kapitel 12.1. MITP-Verlag, Bonn, 2000. [18] Thomas Höss und Tobias Rieck. WAV-Audio-Format. Projekt im Fach Multimedia, Jul 2000. [19] Volker Janzen. XML und Zeit - Ein vergleichender Überblick. Feb 2004. [20] Markus Kalb, Kerstin Schneider, und Günther Specht. T-XPath: ein zeitliches Modell für XML-Datenbanken. In BTW, Seiten 157–166, 2003. [21] Wolfgang Lehner und Harald Schöning. XQuery – Grundlagen und fortgeschrittene Methoden. dpunkt.verlag GmbH, Heidelberg, 2004. [22] Amelie Marian, Serge Abiteboul, Gregory Cobena, und Laurent Mignet. Change-centric management of versions in an XML warehouse. In The VLDB Journal, Seiten 581–590, 2001. [23] Didier Martin, Mark Biberck, und Michael Kay. XML Professionell, Seiten 82–84. MITP-Verlag, Bonn, 2000. [24] Frank Melchior. Untersuchung der Einsatzmöglichkeiten der Wellenfeldsynthese im Kino. Diplomarbeit, Technische Universität Ilmenau, Aug 2003. Inv.-Nr.: 2005-06-01/071/IN99/2254 136 LITERATURVERZEICHNIS [25] Katrin Münnich. Untersuchung und Implementierung von Speicher- und Übertragungsformaten für Mischwerkzeuge der Wellenfeldsynthese. Diplomarbeit, Technische Universität Ilmenau, Sep 2003. [26] Michael A. Olson, Keith Bostic, und Margo Seltzer. Berkeley DB. Sleepycat Software, Inc. [27] Gunter Saake, Ingo Schmidt, und Can Türker. Objektdatenbanken. International Thomson Publishing, 1997. [28] Steve Sarette. Getting Started with Berkeley DB XML for C++. Sleepycat Software, Inc., Jan 2005. [29] Thomas Schröder. Effiziente Überprüfung von Ausgabebedingungen in einem Multimedia-Datenbanksystem. Diplomarbeit, Technische Universität Ilmenau, Mai 2005. [30] Sleepycat Software, Inc. Berkeley DB Reference Guide, Jan 2005. [31] Paul A. Tipler. Physik, Seiten 1027–1028. Spektrum Akademischer Verlag, Heidelberg, 1994. [32] W3C World Wide Web Consortium. Extensible Markup Language (XML), 1. Apr 2005. http://www.w3.org/XML. [33] W3C World Wide Web Consortium. Synchronized Multimedia Integration Language (SMIL 2.1), 1. Feb 2005. http://www.w3.org/TR/2005/WDSMIL2-20050201/. [34] W3C World Wide Web Consortium. XML Path Language (XPath) 2.0, 1. Apr 2005. http://www.w3.org/TR/xpath20. [35] W3C World Wide Web Consortium. XQuery 1.0: An XML Query Language, 1. Apr 2005. http://www.w3.org/TR/XQuery. [36] Aaron Walsh und Mikael Bourges-Sevenier. MPEG-4 Jump Start, Kapitel 11. Prentice Hall, Dez 2001. [37] web3D Consortium. X3D Documentation. http://www.web3d.org/x3d/. [38] Justin Zobel und Philip W. Dart. Finding Approximate Matches in Large Lexicons. Software - Practice and Experience, 25(3):331–345, 1995. Inv.-Nr.: 2005-06-01/071/IN99/2254 Abbildungsverzeichnis 2.1 2.2 2.3 Wellenüberlagerung bei Kugelquelle . . . . . . . . . . . . . . . . 15 Systemarchitektur . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Abspielvorgang . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 Systemarchitektur, Teilsystem Metadaten . . . . . . . . . Verwaltungsstruktur für XMT-SAW Dokumente . . . . . . Ausschnitt aus der Struktur eines XMT-SAW Dokuments . XML-Struktur der Versionsdaten in Form von Deltas . . . Versioniertes XML-Dokument mit Zeitstempeln, Version 1 XML-Dokument in Version 2 . . . . . . . . . . . . . . . . Retrieval mittels Zeitstempeln und Deltas . . . . . . . . . Tabellenlayout der N-Gramme . . . . . . . . . . . . . . . Oberfläche des Suchdialogs . . . . . . . . . . . . . . . . . Klassenstruktur der implementierten Metadatenverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 51 61 62 65 65 70 81 82 90 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 Systemarchitektur, Teilsystem Audiodaten . . . . . . . 200 Abfragen mit je 512 Samples und 32 Audioquellen 200 Abfragen mit je 512 Samples und 64 Audioquellen 32 Soundquellen, 1.000 Abfragen . . . . . . . . . . . 64 Soundquellen und Lesen von 10.000x512 Samples . 64 Soundquellen, 10.000x512 Samples gelesen . . . . Dateilayout . . . . . . . . . . . . . . . . . . . . . . . Dateierzeugung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 100 101 111 113 118 120 122 . . . . . . . . . . . . . . . . Inv.-Nr.: 2005-06-01/071/IN99/2254 Tabellenverzeichnis 3.1 3.2 3.3 3.4 Native XML-Datenbanken . . . . . . ID-geeignete Attribute . . . . . . . . Overhead der Versionierungsverfahren Speicherzeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 . 56 . 67 . 69 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 Datenbank-Größen . . . . . . . . . . . . . . . . . . . . . Durchschnittszeit (ms) bei einer Seitengröße von 4 kByte . Durchschnittszeit (ms) bei einer Seitengröße von 64 kByte Durchschnittszeit (ms) bei 64 Audioquellen . . . . . . . . Durchschnittszeit (ms) im Vergleich: Float und WAV . . . Durchschnittszeit (ms) im Vergleich: Cursorzugriff . . . . Durchschnittszeit (ms) abhängig von der Cachegröße . . . Vergleich der Zugriffsmethoden, abhängig von S/DS . . . Zeitaufwand (ms) für verschiedene Implementierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inv.-Nr.: 2005-06-01/071/IN99/2254 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 110 111 113 114 114 115 116 119 Quelltextverzeichnis 2.0 3.0 3.1 3.2 3.3 3.4 3.5 Ausschnitt eines XMT-SAW Dokumentes XML-Dokument mit Semantik im Layout XML-Dokument ohne semantisches Layout Differenzbestimmung zweier XML-Dokumente History-Struktur bei Delta-Versionierung Algorithmus der Ähnlichkeitssuche Bestimmung von QGrams 22 41 42 58 63 78 84 A.0 A.1 A.2 A.3 Abfrage eines Dokumentes 128 Bestimmung des als PID funktionierenden Attributes zum Element 129 Bestimmung des Wertes des PID-Attributes zu gegebenem Element 130 Ermittelt für Eltern-Element das Kind mit gleichem PID-Wert wie gegebenes Vergleichselement 131 A.4 Liste aller neuen, veränderten und gelöschten Attribute zu gegebenem Element bestimmen 132 A.5 Bestimmung der Differenzen zwischen zwei XML-Dokumenten 133 Inv.-Nr.: 2005-06-01/071/IN99/2254 Abkürzungsverzeichnis ACID ALSA API BDB BLOB CVS DB DBMS DBS DOM DTD MPEG OODBMS RCS RDBMS SAX SCCS SMIL SQL W3C WFS X3D XML XMT Atomicity Consistency Isolation Durability Advanced Linux Sound Architecture Application Programming Interface Berkeley DB Binary Large Object Concurrent Versioning System Datenbank Datenbank-Management-System Datenbanksystem Document Object Model Document Type Definition Moving Picture Experts Group Objektorientiertes DBMS Revision Control System Relationales DBMS Simple API for XML Source Code Control System Synchronized Multimedia Integration Language Structured Query Language World Wide Web Consortium Wellenfeldsynthese Extensible 3D Graphics eXtensible Markup Language eXtensible MPEG-4 Textual Format Inv.-Nr.: 2005-06-01/071/IN99/2254 Thesen • Das IOSONO-System stellt bezüglich der Verwaltung der benötigten Daten diverse Anforderungen, welche mit der aktuellen Implementierung nur unzureichend erfüllt werden können. Die Speicherung der Metadaten bietet keine Verwaltungsdienste, und die Audiodaten bringen in ihrer Speicherform das System an seine Performancegrenzen. • Das Datenbankmanagementsystem Berkeley DB XML ist dazu geeignet, die Metadaten von IOSONO komfortabel und integriert zu verwalten. Es bietet leichte Erweiter- und Anpassbarkeit der Funktionalitäten. • Auf Grundlage des in dieser Arbeit vorgestellten und implementierten Verwaltungssystems lässt sich ein komplexes Multiuser-System aufbauen. Dazu können die schon umgesetzten Komponenten einfach angepasst und erweitert werden. • Die aktuelle Speicherung der Audiodaten liefert keine ausreichende Performance, um die Anzahl an aktiven Audioquellen merklich zu erhöhen. Bei 32 Quellen ist die Grenze schon erreicht, mit 64 Quellen beginnt das System zu stocken. • Die Speicherung der Audiodaten mittels des Datenbanksystems Berkeley DB bietet keine Möglichkeiten, die Echtzeitanforderungen des IOSONOSystems zu erfüllen. Berkeley DB ist daher für den Einsatz in dieser Umgebung nicht geeignet. • Mit der Ablage der Audiodaten in Form einer optimierten Dateilösung lässt sich die IOSONO-Performance relevant steigern. Auf diesem Ansatz kann in Zukunft aufgesetzt werden, um die Leistungsfähigkeit des Systems zu erhöhen. Inv.-Nr.: 2005-06-01/071/IN99/2254 Eigenständigkeitserklärung Hiermit versichere ich, dass ich vorliegende Arbeit selbstständig verfasst und keine anderen als die angegebenen Hilfsmittel benutzt habe. Die Stellen, die anderen Werken dem Wortlaut oder dem Sinn nach entnommen wurden, habe ich in jedem einzelnen Fall durch die Angabe der Quelle, auch der benutzten Sekundärliteratur, als Entlehnung kenntlich gemacht. Ilmenau, den 30. Mai 2005 Hendrik Rusch Inv.-Nr.: 2005-06-01/071/IN99/2254