Performance-Analysen für Realisierungsansätze im Kontext der Aspektorientierten Datenhaltung Matthias Liebisch Friedrich-Schiller-Universität Jena DBIS-Lehrstuhl, Ernst-Abbe-Platz 2 07743 Jena [email protected] Matthias Plietz ORISA Software GmbH Humboldtstr. 13 07743 Jena [email protected] Abstract: Funktionale Aspekte als Vertreter sogenannter cross-cutting concerns beeinflussen das Design sowohl von Applikationen als auch des zugrundeliegenden Datenmodells. Ähnlich wie das Paradigma der Aspektorientierten Programmierung sollen im Rahmen der Aspektorientierten Datenhaltung funktionale Aspekte als orthogonale Dimensionen zum fachlichen Datenmodell behandelt werden können. Dieses Paper beschreibt zwei mögliche Realisierungsansätze, welche die Konzepte und Anforderungen der Aspektorientierten Datenhaltung in einem relationalen Datenbanksystem implementieren und dabei unterschiedliche Schwerpunkte bezüglich Performance und Normalisierung setzen. Für einen qualitativen Vergleich werden beide Ansätze in einem Benchmark analysiert und anschließend anhand der Ergebnisse bewertet. Abschließend stehen die Grenzen und Möglichkeiten zur Diskussion, um die häufig gegensätzlichen Forderungen nach Performance, Normalisierung, Konsistenz und Flexibilität innerhalb eines Datenmodells zu vereinen. 1 Einleitung Für die Persistierung von Anwendungsdaten haben sich seit ihrer Einführung vor über drei Jahrzehnten relationale Datenbankmanagementsysteme (RDBMS) basierend auf dem relationalen Modell[Cod70] als die geeignetste Möglichkeit durchgesetzt. Dabei müssen im Prozess der Datenmodellierung neben den fachlichen Anforderungen der Anwendung auch sogenannte funktionale Aspekte berücksichtigt werden, beispielsweise die Fähigkeit zur Mehrsprachigkeit, Versionierung oder auch zur Definition verschiedener Preislisten. Gegenüber der traditionellen Herangehensweise, derartige Aspekte mittels iterativer Schema-Evolutionen (DDL-Anweisungen) in ein Datenmodell zu integrieren, wird mit dem Paradigma der Aspektorientierten Datenhaltung[Lie10a] das Ziel einer vom konkreten fachlichen Datenmodell unabhängigen Integration verfolgt. Im Fokus dieser Arbeit stehen zwei Realisierungsansätze (Abschnitt 2), welche diesem Paradigma genügen und basierend auf den Ergebnissen der nachfolgenden Performance-Untersuchungen (Abschnitt 3) miteinander verglichen werden (Abschnitt 4). 1.1 Aspektorientierte Datenhaltung Analog zum Paradigma der Aspektorientierten Programmierung[KLM+ 97] zur Bewältigung sogenannter cross-cutting concerns im Prozess der Software-Entwicklung[CSR02], stellt auch die Abbildung funktionaler Aspekte durch das Konzept der Aspektorientierten Datenhaltung ein geeignetes Entwurfsmuster für die strukturierte Datenmodellierung dar [GHJV94, Pli10]. Die damit einhergehenden Anforderungen werden im Folgenden kurz erläutert, um den Entwurf der in Abschnitt 2 vorgestellten Ansätze zu motivieren. Weitergehende Details und Ausführungen finden sich in [Lie10a]. Das Paradigma der Aspektorientierten Datenhaltung ist geprägt durch fünf Eigenschaften: • Modularität: alle zu einem funktionalen Aspekt gehörenden Informationen sollen in einer logischen Modellierungseinheit zusammengefasst werden können. • Orthogonalität: für beliebige funktionale Aspekte müssen einerseits alle potentiell möglichen Integrationsreihenfolgen das Datenmodell in einen semantisch äquivalenten Zustand überführen und andererseits darf es nicht zu Wechselwirkungen bezüglich der beeinflussten Attributmengen kommen. Damit verbunden ist auch die Forderung, dass die Zuordnung einer konkreten Menge aspektspezifischer Daten zu mehr als einem Aspekt möglich sein muss. • Lokalität: bei der Integration eines Aspektes sollte nicht das gesamte Datenmodell einer Transformation unterzogen werden. • Universalität: für eine maximale Anwendungsbreite über relevante DBMS-Produkte hinweg soll die Realisierung funktionaler Aspekte nur auf Sprachelementen des SQL:92-Standards basieren. • Benutzbarkeit: zur einfachen Integration eines funktionalen Aspektes ist eine Unterstützung des Anwenders erforderlich. Dabei spielen vorallem die Kriterien der Modularität, Orthogonalität und Lokalität für die Entwicklung von Realisierungsansätzen eine entscheidende Rolle. 1.2 Anwendungsszenario Zur Veranschaulichung der Analysen in dieser Arbeit soll beispielhaft die Verwaltung von Modulstrukturen dienen. Wie in Abbildung 1 dargestellt, werden dazu einerseits die Stammdaten der einzelnen Bauteile in der Tabelle M ODUL und andererseits die Stücklisteninformationen in der Tabelle S TRUKTUR gespeichert. Neben dieser rein fachlichen Modellierung sollen nun die funktionalen Aspekte Internationalisierung und Versionierung integriert werden, um beispielsweise Produkte mehrsprachig und in verschiedenen Varianten im globalisierten Handel anbieten zu können. Dabei stellt das Attribut M O DUL .VARIANT ein Kennzeichen für die mögliche Nutzung in einem Konfigurationsprozess dar und soll unabhängig von funktionalen Aspekten sein. Version Modul Struktur PK ModulID Name Preis Variant PK,FK Oberteil PK,FK Unterteil Menge Sprache PK: Primärschlüssel FK: Fremdschlüssel Abbildung 1: Relationales Modell für die Abbildung von Modulstrukturen 2 Realisierungsansätze Basierend auf den in Abschnitt 1.1 beschriebenen Anforderungen für die Aspektorientierte Datenhaltung stellt sich im anschließenden Prozess zur Entwicklung von Modellierungsansätzen wie so häufig die Aufgabe, einen Kompromiss zwischen verschiedenen und teilweise widersprüchlichen Zielen zu finden. Auf der einen Seite müssen Kritieren wie Normalisierung und Konsistenz bei der Abbildung funktionaler Aspekte berücksichtigt werden. Andererseits sollen diese auch in einer möglichst performanten Art und Weise verarbeitet werden können. Nachfolgend werden zwei Realisierungsstrategien jeweils mit dem Schwerpunkt auf einem der beiden Ziele präsentiert, um funktionale Aspekte in relationalen Datenbankmanagementsystemen zu integrieren. Zur Verdeutlichung dieser Ansätze bildet das in Abbildung 1 dargestellte Anwendungsszenario die Grundlage des zu erweiternden Fachmodells. 2.1 Dynamische Aspektintegration Im Zentrum der in Abbildung 2 präsentierten Modellierung stehen die Tabellen A SPECTVALUE und A SPECTA SSIGN, welche beide auf dem EAV-Konzept[NMC+ 99] basieren und dadurch ein hohes Maß an Flexibilität und Dynamik bezüglich der aspektspezifischen Zuordnung bieten. Dazu wird im ersten Schritt in Tabelle A SPECT VALUE zu einer beliebigen über das Tripel (TABLE , C OLUMN , ROW ID) identifizierbaren Tabellenzelle ein Wert (VALUE) als aspektspezifische Ausprägung hinterlegt. Hierfür ist es notwendig, dass alle ursprünglichen Tabellen des fachlichen Datenmodells einen einattributigen typgleichen Primärschlüssel besitzen, wie z.B. S TRUKTUR .ROW ID. Zudem muss für A SPECTVALUE .VALUE ein möglichst generischer Datentyp (z.B. VARCHAR) zur Persistierung verschiedener Datentypen verwendet werden. In einem zweiten Schritt erfolgt in der Tabelle A SPECTA SSIGN die Zuordnung aspektspezifischer Daten (A SPECT VALUE) zu einer konkreten Aspekt-Ausprägung (A SPECT, K EY VALUE) unter Einhaltung der UNIQUE-Bedingung über (A SPECT, K EY VALUE , A S PECT VALUE ). Dabei verweisen Fremdschlüssel-Attribute der beiden bisher beschriebenen Aspekt-Tabellen auf eine feste Anzahl weiterer Tabellen im Bereich Aspektstammdaten, welche notwendige Metadaten zu den im Modell hinterlegten funktionalen Aspekten speichern. Eine genaue Beschreibung von A SPECT D EFINITION , A SPECT K EY VALUE , A SPECT DATATYPE , A SPECT C OLUMN und A SPECT TABLE ist in [Lie10b] zu finden. Modul AspectAssign AspectKeyValue PK ModulID Name Preis Variant PK FK FK FK PK AspKeyID FK Aspect KeyValue Comment Struktur AspectValue AspectDefinition PK RowID FK Oberteil FK Unterteil Menge PK AspValID FK Table FK Column RowID Value PK AspDefID Name Key FK Datatype AspAssID Aspect KeyValue AspectValue AspectDatatype PK AspTypeID TypeName Length Scale AspectColumn PK AspColID FK Table ColumnName FK Datatype AspectTable PK AspTabID TableName Nutzerdaten Aspektverknüpfung PK: Primärschlüssel Aspektstammdaten FK: Fremdschlüssel Abbildung 2: Datenmodell für die dynamische Aspektintegration 2.2 Statische Aspektintegration Die grundlegende Idee des in Abbildung 3 dargestellten Ansatzes besteht im Konzept der sogenannten Schattentabellen. Diese stellen jeweils eine strukturelle Kopie der betreffenden Originaltabelle dar und persistieren die zugehörigen aspektspezifischen Informationen. Um derartige Datensätze auf einheitlichem Weg einem konkreten Aspekt zuordnen zu können, wird jede Schattentabelle um einen neuen Primärschlüssel (ROW ID) ergänzt und der ursprüngliche Schlüssel als Fremdschlüssel mit Bezug auf die Originaltabelle umdefiniert (z.B. A SPECT M ODUL .M ODUL ID referenziert M ODUL .M ODUL ID). Die eigentliche Aspekt-Zuordnung erfolgt entsprechend der Anforderung nach Orthogonalität unabhängig in der Tabelle A SPECTA SSIGN, in der ein spezifischer Datensatz einer Schattentabelle (TABLE , ROW ID) mit einer konkreten Aspekt-Ausprägung (A SPECT, K EY VALUE) unter Einhaltung einer UNIQUE-Bedingung über (A SPECT, K EY VALUE , TABLE , ROW ID) verknüpft wird. Dabei verweisen die Attribute dieser Zuordnungstabelle größtenteils auf weitere Tabellen im Bereich Aspektstammdaten, welche bereits im Rahmen des dynamischen Modellierungsansatzes in Abschnitt 2.1 beschrieben wurden. Modul AspectModul AspectKeyValue PK ModulID Name Preis Variant PK RowID FK ModulID Name Preis Variant PK AspKeyID FK Aspect KeyValue Comment Struktur AspectDefinition AspectStruktur PK,FK Oberteil PK,FK Unterteil Menge PK AspDefID Name Key FK Datatype PK RowID FK Oberteil FK Unterteil Menge AspectDatatype PK AspTypeID TypeName Length Scale AspectAssign PK FK FK FK Nutzerdaten AspAssID Aspect KeyValue Table RowID AspectTable PK AspTabID TableOrigin TableAspect Aspektverknüpfung PK: Primärschlüssel Aspektstammdaten FK: Fremdschlüssel Abbildung 3: Datenmodell für die statische Aspektintegration 3 Testumgebung Nachdem im vorherigen Abschnitt 2 die zu untersuchenden Realisierungsansätze vorgestellt wurden, können diese nun einem Benchmark unterzogen werden. Dazu erfolgt zuerst die Spezifikation sowohl des zugrundeliegenden Testsystems als auch der verwendeten Workload. Der letzte Teil dieses Abschnitts beschreibt schließlich die konkrete Testdurchführung. 3.1 Testsystem Für die Performance-Untersuchungen kommt ein am Lehrstuhl existierender IBM-Server vom Typ RS/6000 7025 Model F80 zum Einsatz[LM00]. Dieser weist folgende Leistungsmerkmale und Systemcharakteristik auf: • Hardware: 2 Prozessoren vom Typ RS64-III mit jeweils 450MHz, 4GB Speicher • Betriebssystem: AIX 5.2 • Datenbanksystem: IBM DB2 8.2.4 LUW Die Verwendung eines weiteren Testsystems bzw. eines anderen DBMS wurde explizit nicht in Betracht gezogen, da eine qualitative Aussage zum Laufzeitverhalten der beiden Realisierungsansätze das Ziel der Arbeit darstellt und nicht der Vergleich von Abarbeitungszeiten nach dem Prinzip IBM DB2 vs. MS SQL“ für eine gewisse Workload im ” Vordergrund steht. Im DB2-System wurden die Werte für einige Speicherkennzahlen so angepasst, dass die vollständige Verarbeitung der in Abschnitt 3.2 beschriebenen Anfragen durch das DBMS gewährleistet werden konnte. Davon betroffen sind die Parameter LOGFILSIZ (4000), STMTHEAP (16384), APPLHEAPSZ (1024) und SORTHEAP (1024) mit einer Pagesize von jeweils 4KB. 3.2 Workload Anfragen in einem Anwendungssystem lassen sich klassifizieren in die Verarbeitung von Individualdaten durch manuelle Prozesse und von Massendaten mittels halbautomatisierter Prozesse. Für beide Gruppen sind in Tabelle 3.2 typische Anwendungsfälle bezüglich des Beispiels in Abbildung 1 mit natürlich-sprachlich formulierten Anfragen angegeben. Massendaten Individualdaten Art ID Operation Anwendungsfall und Beispielanfrage W1 SELECT W2 INSERT W3 UPDATE W4 DELETE W5 SELECT W6 INSERT W7 UPDATE W8 DELETE Darstellung von Modul-Eigenschaften: Ermittle für das ” Modul mit Schlüssel 55 alle internationalisierten Daten.“ Einpflegen neuer Modulübersetzungen: Füge für das ” Modul mit Schlüssel 55 zur spanischen Lokale (es-ES) den Namen Modul55-spanisch und den Preis 55.22 ein.“ Änderung existierender Modultexte: Ändere für das Mo” dul mit Schlüssel 55 den Namen zu Modul55-neu und versioniere den alten Text.“ Löschung von Modulübersetzungen: Lösche für das ” Modul mit Schlüssel 55 alle durch Workload W2 und W3 hinzugefügten aspektspezifischen Daten.“ Extraktion von Modul-Eigenschaften: Ermittle für alle ” Module die internationalisierten Daten zur weiterführenden Analyse (ModulID, Locale, Name, Preis).“ Datenübernahme von externen Systemen: Importiere für ” Modul-Daten die in strukturierter Form vorliegenden internationalisierten Daten für Polen (Lokale pl-PL).“ Datenbereinigung/Normierung: Ergänze die internatio” nalisierte Modulbezeichnung zur Lokale de-CH um den Präfix I18N.“ Archivierung/Datenbereinigung: Lösche alle internatio” nalisierten Datensätze von Module zur Lokale pl-PL.“ Tabelle 1: Klassifizierung der Workload 3.3 Vorgehen In einem ersten Schritt wurden synthetische Testdaten zur Befüllung sowohl der Aspektals auch Fach-Tabellen generiert. Die resultierenden Mengengerüste sind aufgeschlüsselt nach dem statischen und dynamischen Realisierungsansatz in Tabelle 2 dargestellt. AusTabelle M ODUL S TRUKTUR A SPECT M ODUL A SPECT S TRUKTUR A SPECTA SSIGN A SPECT C OLUMN A SPECT DATATYPE A SPECT D EFINITION A SPECT K EY VALUE A SPECT TABLE A SPECT VALUE Zeilenzahl stat. dyn. 3000 3000 2999 2999 15000 – 14995 – 30000 45000 – 5 4 4 2 2 7 7 2 2 – 45000 Tabelle 2: Datenmengen der generierten Testdaten gehend von der inhaltlichen Workload-Definition in Abschnitt 3.2 wurden anschließend alle Anfragen unter Beachtung des jeweiligen Ansatzes bzw. Datenmodells in die passende SQL-Syntax transformiert. In diesem Prozess standen Optimierungsfragen nicht zur Diskussion, da diese Aufgabe durch das DBMS gelöst werden sollte. Jedoch wurden Idents aus den Aspekt-Tabellen als bekannt vorausgesetzt, beispielsweise A SPECT D EFI NITION .A SP D EF ID = 1 für den Aspekt Internationalisierung. Dies ist üblicherweise durch das Speichern derartiger Metadaten in der Anwendung gewährleistet. Die kompletten im Performance-Test verwendeten SQL-Anfragen sind in Abbildung 5 (statischer Ansatz) sowie Abbildung 6 (dynamischer Ansatz) dargestellt. timeDuration = System.currentTimeMillis(); if (withResult) _rs = _stmt.executeQuery(query); else for (int i=0; i<queryList.length; i++) _stmt.execute(queryList[i]); timeDuration = System.currentTimeMillis() - timeDuration; Abbildung 4: Java-Code zur Messung von Ausführungszeiten Die Analyse der SQL-Anfragen erfolgte mit Hilfe eines Java-Programms, welches durch Aufrufe der Methode System.currentTimeMillis() die Zeit zur Ausführung einer Menge von SQL-Anweisungen ermittelt (siehe Code-Fragment in Abbildung 4). Um das Anfrageverhalten unter verschiedenen Bedingungen zu analysieren, wurden für die zwei Realisierungsansätze jeweils die acht verschiedenen Workload-Typen sowie die Nutzung von Indexstrukturen (IDX) und Statistik-Informationen (STAT) betrachtet. Das Erzeugen zusätzlicher Indizes beschränkte sich dabei auf alle Attribute der zentralen Tabellen A SPECT M ODUL und A SPECTA SSIGN im statischen beziehungsweise A SPECT VALUE und A SPECTA SSIGN im dynamischen Ansatz. -- [W1] -SELECT T1.Name, T1.Preis FROM AspectModul T1 INNER JOIN AspectAssign T2 ON T1.RowID = T2.RowID WHERE T1.ModulID = 55 AND T2.Table = 1 AND T2.Aspect = 1; -- [W2] -INSERT INTO AspectModul (RowID, ModulID, Name, Preis, Variant) VALUES (-20, 55, ’Modul55-spanisch’, 55.22, NULL); INSERT INTO AspectAssign (AspAssID, Aspect, KeyValue, Table, RowID) VALUES (-20, 1, 7, 1, -20); -- [W3] -INSERT INTO AspectModul (RowID, ModulID, Name, Preis) SELECT -30, ModulID, Name, Preis FROM Modul WHERE ModulID = 55; INSERT INTO AspectAssign (AspAssID, Aspect, KeyValue, Table, RowID) VALUES (-30, 2, 5, 1, -30); UPDATE Modul SET Name = ’Modul55-neu’ WHERE ModulID = 55; -- [W4] -DELETE FROM AspectAssign WHERE AspAssID IN (-20, -30); DELETE FROM AspectModul WHERE RowID IN (-20, -30); -- [W5] -SELECT T1.ModulID, T3.KeyValue, T1.Name, T1.Preis FROM AspectModul T1 INNER JOIN AspectAssign T2 ON T1.RowID = T2.RowID INNER JOIN AspectKeyValue T3 ON T2.KeyValue = T3.AspKeyID WHERE T2.Table = 1 AND T2.Aspect = 1 ORDER BY T3.KeyValue, T1.ModulID; -- [W6] -INSERT INTO AspectKeyValue (AspKeyID, Aspect, KeyValue, Comment) VALUES (8, 1, ’pl-PL’, ’Polnisch’); INSERT INTO AspectModul (RowID, ModulID, Name, Preis) VALUES (15001, 1, ’Modul1-polnisch’, 1.11), ..., (18000, 3000, ’Modul3000-polnisch’, 3000.11); INSERT INTO AspectAssign (AspAssID, Aspect, KeyValue, Table, RowID) VALUES (30001, 1, 8, 1, 15001), ..., (33000, 1, 8, 1, 18000); -- [W7] -UPDATE AspectModul SET Name = CONCAT(’I18N’,Name) WHERE RowID IN (SELECT RowID FROM AspectAssign WHERE Aspect = 1 AND KeyValue = 4 AND Table = 1); -- [W8] -DECLARE GLOBAL TEMPORARY TABLE DelRows (AspAssID int, RowID int) ON COMMIT PRESERVE ROWS NOT LOGGED; INSERT INTO SESSION.DelRows (AspAssID, RowID) SELECT AspAssID, RowID FROM AspectAssign WHERE Aspect = 1 AND KeyValue = 8 AND Table = 1; DELETE FROM AspectAssign WHERE AspAssID IN (SELECT AspAssID FROM SESSION.DelRows); DELETE FROM AspectModul WHERE RowID IN (SELECT RowID FROM SESSION.DelRows); DELETE FROM AspectKeyValue WHERE Aspect = 1 AND KeyValue = ’pl-PL’; Abbildung 5: SQL-Anfragen für den statischen Integrationsansatz -- [W1] -SELECT CAST(T1.Value AS VARCHAR(50)) AS Name, CAST(T2.Value AS NUMERIC(7,2)) AS Preis FROM AspectValue T1 INNER JOIN AspectValue T2 ON T1.RowID = T2.RowID INNER JOIN AspectAssign T3 ON T1.AspValID = T3.AspectValue INNER JOIN AspectAssign T4 ON T2.AspValID = T4.AspectValue WHERE T1.Table = 1 AND T1.Column = 1 AND T2.Table = 1 AND T2.Column = 2 AND T3.KeyValue = T4.KeyValue AND T3.Aspect = 1 AND T1.RowID = 55; -- [W2] -INSERT INTO AspectValue (AspValID, Table, Column, RowID, Value) VALUES (-20, 1, 1, 55, ’Modul55-spanisch’), (-21, 1, 2, 55, ’55.22’); INSERT INTO AspectAssign (AspAssID, Aspect, KeyValue, AspectValue) VALUES (-20, 1, 7, -20), (-21, 1, 7, -21); -- [W3] -INSERT INTO AspectValue (AspValID, Table, Column, RowID, Value) SELECT -30, 1, 1, ModulID, Name FROM Modul WHERE ModulID = 55; INSERT INTO AspectAssign (AspAssID, Aspect, KeyValue, AspectValue) VALUES (-30, 2, 5, -30); UPDATE Modul SET Name = ’Modul55-neu’ WHERE ModulID = 55; -- [W4] -DELETE FROM AspectAssign WHERE AspAssID IN (-20, -21, -30); DELETE FROM AspectValue WHERE AspValID IN (-20, -21, -30); -- [W5] -SELECT T1.RowID As ModulID, T5.KeyValue, CAST(T1.Value AS VARCHAR(50)) AS Name, CAST(T2.Value AS NUMERIC(7,2)) AS Preis FROM AspectValue T1 INNER JOIN AspectValue T2 ON T1.RowID = T2.RowID INNER JOIN AspectAssign T3 ON T1.AspValID = T3.AspectValue INNER JOIN AspectAssign T4 ON T2.AspValID = T4.AspectValue INNER JOIN AspectKeyValue T5 ON T4.KeyValue = T5.AspKeyID WHERE T1.Table = 1 AND T1.Column = 1 AND T2.Table = 1 AND T2.Column = 2 AND T3.KeyValue = T4.KeyValue AND T3.Aspect = 1 ORDER BY T5.KeyValue, T1.RowID; -- [W6] -INSERT INTO AspectKeyValue (AspKeyID, Aspect, KeyValue, Comment) VALUES (8, 1, ’pl-PL’, ’Polnisch’); INSERT INTO AspectValue (AspValID, Table, Column, RowID, Value) VALUES (45001, 1, 1, 1, ’Modul1-polnisch’), (48001, 1, 2, 1, ’1.11’), ..., (48000, 1, 1, 3000, ’Modul3000-polnisch’), (51000, 1, 2, 3000, ’3000.11’); INSERT INTO AspectAssign (AspAssID, Aspect, KeyValue, AspectValue) VALUES (45001, 1, 8, 45001), (48001, 1, 8, 48001), ..., (48000, 1, 8, 48000), (51000, 1, 8, 51000); -- [W7] -UPDATE AspectValue SET Value = CONCAT(’I18N’,Value) WHERE Table = 1 AND Column = 1 AND AspValID IN (SELECT AspectValue FROM AspectAssign WHERE Aspect = 1 AND KeyValue = 4); -- [W8] -DECLARE GLOBAL TEMPORARY TABLE DelRows (AspValID int) ON COMMIT PRESERVE ROWS NOT LOGGED; INSERT INTO SESSION.DelRows (AspValID) SELECT T1.AspValID FROM AspectValue T1 INNER JOIN AspectAssign T2 ON T1.AspValID = T2.AspectValue WHERE T2.Aspect = 1 AND T2.KeyValue = 8 AND T1.Table = 1; DELETE FROM AspectAssign WHERE Aspect = 1 AND KeyValue = 8 AND AspectValue IN (SELECT AspValID FROM SESSION.DelRows); DELETE FROM AspectValue WHERE AspValID IN (SELECT AspValID FROM SESSION.DelRows); DELETE FROM AspectKeyValue WHERE Aspect = 1 AND KeyValue = ’pl-PL’; Abbildung 6: SQL-Anfragen für den dynamischen Integrationsansatz 4 Ergebnisauswertung Was sich im Prozess der ansatzspezifischen Workload-Transformation bereits erahnen ließ, wurde von den Testergebnissen deutlich bestätigt. Die nach dreifacher Ausführung gemittelten Messzeiten aller in Abschnitt 3.3 beschriebenen Testfälle sind in Tabelle 3 dargestellt, wobei der jeweils schnellste Ansatz hervorgehoben ist. statisch Individualdaten-Workload W1 W2 W3 W4 +IDX +STATS +IDX+STATS dynamisch Szenario +IDX +STATS +IDX+STATS 802 677 617 548 4343 226 3815 995 126 95 96 134 251 126 249 146 108 50 114 59 147 180 92 73 21 14 14 17 1220 37 105 24 Massendaten-Workload W5 W6 W7 198 189 136 145 1053401 3413 4318 1792 5462 8283 5498 8435 17417 23121 12811 20219 453 2601 843 2500 2626 217280 2260 5078 W8 2284 4136 2385 8265 168385 19568 158186 16201 Tabelle 3: Gegenüberstellung der Ausführungszeiten (in ms) Daraus lassen sich die nachstehenden Schlussfolgerungen ableiten. 1. Der dynamische Realisierungsansatz schneidet in fast jedem Testfall signifikant schlechter ab. Begründet ist dieser Umstand durch den notwendigen Einsatz zusätzlicher JOIN-Operatoren zur Verarbeitung der EAV-Tabellen. Dies zeigt sich sehr drastisch für die Anfrage W5, in der zur Ergebnisfindung fünf Tabellen miteinander verknüpft werden müssen und dabei ein potentiell großes Mengengerüst erzeugt wird. Selbst unter Nutzung von Indexstrukturen benötigt deshalb die Anfrage W5 im dynamischen Ansatz mehr als die 13fache Ausführungszeit gegenüber der gleichartigen Anfrage im statischen Ansatz. 2. Durch die Index-Nutzung werden die lesenden Zugriffe teilweise drastisch schneller, beispielweise führt ein Index in Abfrage W5 im dynamischen Ansatz zu einer 300mal schnelleren Verarbeitung (von über 17 Minuten auf gut 3 Sekunden). Gleichzeitig steigen die Ausführungszeiten für ändernde Anweisungen im Bereich der Massendaten-Verarbeitung (W6-W8) aufgrund des zusätzlichen Aufwands zur Index-Aktualisierung. Nicht mit angegeben ist dabei allerdings der Overhead zur initialen Index-Erzeugung. Dieses Ergebnis steht wie erwartet im Einklang mit dem allgemein bekannten theoretischen Hintergrund bezüglich der Verwaltung von Zugriffsstrukturen [HR01]. 3. Die alleinige Verwendung von Statistiken hat in diesem Szenario keine einheitliche Auswirkung. Es gibt sowohl Laufzeitverbesserungen wie beispielsweise für Anfrage W5 als auch Laufzeitverschlechterungen wie z.B. für Anfrage W8 jeweils im statischen Ansatz. 4. Anfragen im Massendaten-Bereich haben aufgrund des (gewollt) größeren Wirkungsradius bezüglich des vorliegenden Mengengerüsts eine deutlich längere Laufzeit, Ausnahme bildet hier merkwürdigerweise die lesende Anfrage W5 im statischen Ansatz. 4.1 Bewertung des statischen Ansatzes Der in Abschnitt 2.2 beschriebene Ansatz zeigt sich als klarer Sieger bezüglich Performance bei der Anfrageauswertung gegenüber dem dynamischen Ansatz. Dies liegt hauptsächlich an den Schattentabellen, welche alle aspektspezifischen Informationen eines Modellierungsobjektes (Tabelle) in gewohnter relationaler Form bereitstellen. Dadurch entsteht kein weiterer Aufwand wie bei der Transformation von EAV-Strukturen im dynamischen Ansatz. Diese Schattentabellen können prinzipiell die gesamte Funktionalität eines RDBMS ausnutzen, beispielsweise beim Erzeugen von Integritätsbedingungen oder Indizes. Einzige Ausnahme bildet das Attribut A SPECT K EY VALUE .K EY VALUE, welches zur Persistierung beliebiger Aspekt-Schlüsselwerte einen möglichst flexiblen Datentyp wie beispielsweise VARCHAR benötigt. Schließlich bietet dieser Modellierungsansatz die Möglichkeit, funktionale Aspekte innerhalb einer Applikation schrittweise zu integrieren, da keine Veränderung der originalen Fachtabellen notwendig ist und somit das Datenmodell ohne Seiteneffekte um funktionale Aspekte ergänzt werden kann. Diesen Vorteilen stehen allerdings auch einige Nachteile gegenüber. So führt das Konzept der Schattentabellen zu einer potentiellen Verdopplung aller Tabellen im Datenmodell, weil zu jeder Fachtabelle <TABLE> mit aspektrelevanten Informationen eine neue Tabelle A SPECT<TABLE> angelegt werden muss. Dadurch wird die Forderung nach Modularität (siehe Abschnitt 1.1) verletzt, da aspektspezifische Informationen über eine Vielzahl von Tabellen verteilt sind. Zudem entstehen in den Schattentabellen redundante Daten für alle Attribute, die von einem spezifischen funktionalen Aspekt nicht abhängig sind, im einleitend dargestellten Anwendungsszenario betrifft dies beispielsweise das Attribut M ODUL .VARIANT. Um diesem Problem zu begegnen wäre es möglich, nur die aspektabhängigen Attribute und deren Werte in der Schattentabelle zu speichern und für alle anderen Attribute NULL-Werte zu hinterlegen. Damit verbunden ist jedoch mehr Aufwand in der Anfrageverarbeitung, da ein vollständiger aspektspezifischer Datensatz dann nur noch unter Einbeziehung der zugehörigen Fachtabelle ermittelt werden kann. 4.2 Bewertung des dynamischen Ansatzes Wie bereits in der Namensgebung angedeutet zeigt sich auch in der Bewertung der in Abschnitt 2.1 erläuterte dynamische Realisierungsansatz quasi als Gegenstück zum statischen Ansatz. Der größte Vorteil ergibt sich direkt aus dem verwendeten EAV-Konzept, wodurch nur explizit mit Informationen besetzte Schlüssel-Wert-Paare gespeichert werden. Damit entsteht ein vollständig normalisiertes und redundanzfreies Datenmodell. Beispielsweise wird für Anfrage W3 im Abschnitt 3.3 nur der zu änderende Modultext kopiert und versioniert, im statischen Ansatz dagegen muss der gesamte Datensatz inklusive nicht zu ändernder Attribute kopiert werden. Zudem ergibt sich eine platzoptimierte Speicherung, da in den EAV-basierten Tabellen A SPECTA SSIGN und A SPECT VALUE keine NULL-Werte auftauchen können wie in den Schattentabellen. Schließlich lassen sich im dynamischen Modellierungsansatz für alle Objekte bzw. Tabellen unabhängig vom Konzept der funktionalen Aspekten zusätzliche Attribute ohne Schema-Veränderung hinzufügen. Wie in anderen Anwendungsfällen auch so bringt die Verwendung des EAV-Konzeptes neben der gesteigerten Flexibilität ebenso einen stark erhöhten Aufwand bei der Anfrageauswertung. Will man die gekippte Speicherform einer EAV-Tabelle in die klassische Tabellenform bringen, wie in diesem Testszenario für Vergleichszwecke geschehen, ist pro Attribut ein JOIN-Operator notwendig. Dies führt logischerweise sehr schnell zu einem Performanceproblem wie bereits für das hier verwendete einfache Beispiel in Tabelle 3 zu sehen ist. Außerdem müssen zur Gewährleistung des zwingend notwendigen einattributigen Primärschlüssels bei der Integration funktionaler Aspekte gegebenenfalls Fachtabellen um diesen Schlüssel ergänzt werden. Dies kann je nach Einsatz von VIEW-Definitionen Auswirkungen auf die darauf zugreifende Anwendung haben. 5 Fazit Diese Arbeit präsentierte nach einer kurzen Einführung der Aspektorientierten Datenhaltung mit der statischen und dynamischen Aspektintegration zwei Ansätze zur Implementierung dieses Paradigmas in relationalen Datenbanken. Diese beiden Modellierungsvarianten wurden anschließend mit einer Menge unterschiedlicher Anfragen aus dem Bereich der Indiviualdaten- und Massendatenverarbeitung in einem Benchmark analysiert und bewertet. Dabei zeigte sich der statische Ansatz signifikant schneller, gerade im Bereich der Massendatenverarbeitung sogar um durchschnittlich Faktor 5. Wie in der Bewertung aufgezeigt wurde, liegen diese Performanceprobleme des dynamischen Ansatzes in der intensiven aber notwendigen Nutzung des JOIN-Operators im EAV-Konzeptes begründet, welches dafür jedoch wichtige Anforderungen der Aspektorientierten Datenhaltung wie Modularität, Orthogonalität und Lokalität unterstützt. Ein Ergebnis dieser Arbeit ist die Schlussfolgerung, dass mit steigender Normalisierung und Flexibilität eines Datenmodells die Performance sinkt. Ähnliche Ergebnisse zeigen sich auch bei [AGJ+ 08] im Rahmen von Analysen für die effiziente Abbildung von Mandanten bzw. Tenants in einem gemeinsam genutzten Datenbankschema. Um diese Abhängigkeit wenigstens zum Teil aufzulösen, lassen sich in nachfolgenden Arbeiten mehrere Alternativen zur Reduzierung des Aufwands untersuchen. Hierzu zählt beispielsweise die Vermeidung umfangreicher JOIN-Operatoren durch applikationsseitige Verarbeitung der Daten mittels Hash-Tabellen[DNB06]. Dabei würde allerdings auch die DBMSFunktionalität zur serverseitigen Filterung und Selektion von Daten umgangen und in die Anwendungsschicht verlagert. Hier muss sich der effektive Performance-Gewinn erst noch in Benchmarks zeigen. Literatur [AGJ+ 08] Stefan Aulbach, Torsten Grust, Dean Jacobs, Alfons Kemper und Jan Rittinger. Multitenant databases for software as a service: schema-mapping techniques. In SIGMOD Conference, Seiten 1195–1206, 2008. [Cod70] E. F. Codd. A relational model of data for large shared data banks. CACM, 13(6):377– 387, 1970. [CSR02] Ruzanna Chitchyan, Ian Sommerville und Awais Rashid. An Analysis of Design Approaches for Crosscutting Concerns. In Workshop on Aspect-Oriented Design (held in conjunction with the 1st Aspect Oriented Software Development Conference AOSD), 2002. [DNB06] Valentin Dinu, Prakash Nadkarni und Cynthia Brandt. Pivoting approaches for bulk extraction of Entity-Attribute-Value data. Computer Methods And Programs in Biomedicine, 82(1):38–43, 2006. [GHJV94] Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1994. [HR01] Theo Härder und Erhard Rahm. Datenbanksysteme: Konzepte und Techniken der Implementierung. Springer, 2001. [KLM+ 97] Gregor Kiczales, John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Videira Lopes, John Irwin und Jean-Marc Loingtier. Aspect-Oriented Programming. In ECOOP, Seiten 220–242, 1997. [Lie10a] Matthias Liebisch. Aspektorientierte Datenhaltung - ein Modellierungsparadigma. In Proceedings of the 22nd GI Workshop Grundlagen von Datenbanken 2010, Seiten 13– 17, Bad Helmstedt, Germany, Mai 2010. [Lie10b] Matthias Liebisch. Supporting functional aspects in relational databases. In Proceedings of the 2nd International Conference on Software Technology and Engineering 2010, San Juan, Puerto Rico, USA, Oktober 2010. [LM00] Stephen Lutz und Shyam Manohar. RS/6000 7025 Model F80: Technical Overview and Introduction. IBM, Austin, TX, Mai 2000. http://www.redbooks.ibm.com/ redpapers/pdfs/redp0033.pdf. [NMC+ 99] Prakash Nadkarni, Luis Marenco, Roland Chen, Emmanouil Skoufos, Gordon Shepherd und Perry Miller. Organization of Heterogeneous Scientific Data Using the EAV/CR Representation. In JAMIA, 6, Seiten 478–493, 1999. [Pli10] Matthias Plietz. Structured Development Process of Configuration Models. In Proceedings of the Workshop on Configuration, affiliated with the 19th European Conference on Artificial Intelligence 2010, Seiten 63–67, Lisbon, Portugal, August 2010.