Komplexpraktikum DIPBench Computer Science Faculty, System Architecture, Database Technology Group...

Preview:

Citation preview

Komplexpraktikum DIPBench

Computer Science Faculty, System Architecture, Database Technology Group

Dresden, 14.11.2007

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 2 von 58

Gliederung

01 Einführung02 Vorstellung des Komplexpraktikums03 Aufgaben und Ergebnisse

Teil 1 Katrin BraunschweigTeil 2 Dirk AlsfaßerTeil 3 Romain Treboux

04 Zusammenfassung

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 3 von 58

Zeitraum: 10.09. – 21.09. 2007 (Blockpraktikum)

Teilnehmer: Katrin Braunschweig

Dirk Alsfaßer

Romain Treboux

Aufgabe: Erweiterung des DIPBench-Initializers

02 Komplexpraktikum DIPBench

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 4 von 58

02 Komplexpraktikum DIPBench

DIPBench Macro Architecture

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 5 von 58

02 Komplexpraktikum DIPBench

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 6 von 58

02 Komplexpraktikum DIPBench

Initializer (alter Zustand)

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 7 von 58

02 Komplexpraktikum DIPBench

Aufgabenstellung

Woche 1: Realisierung von verschiedenen Erweiterungen

• neue Konfigfurationsmöglichkeiten• Ist/Soll Vergleich: Erhebung von Ist-Werten• Platformunabhängigkeit: Anpassung von TORQUE• Modelierung von Einschränkungen (Constraints)

und Speicherung der Schemata als XML-Dateien• Implementierung einer Verbindung zur CSV Dateien• Einbindung einer Log-Funktionalität mithilfe des Frameworks Log4j

Woche 2: Realisierung von Verteilungsfunktionen

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 8 von 58

Aufgabenstellung

Woche 1: Realisierung von Verwaltungsfunktionalitäten

Angabe von Dateneigenschaften mit SOLL/IST-Vergleich

Erweiterung der Konfigurationsmöglichkeiten

Woche 2: Realisierung von Verteilungsfunktionen

Normalverteilung

Poissonverteilung

03 Aufgaben und Ergebnisse

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 9 von 58

Angabe von Dateneigenschaften mit SOLL/IST-Vergleich

Dateneigenschaften

Anzahl unterschiedlicher Werte (selectivity)

Prozentsatz an Nullwerten (zero_percentage)

Parameter der Verteilungsfunktionen (mean, variance, skewness)

Angabe in Metadaten (TableMetadata)

Eingabe über Konstruktor setDistributionParameters(…)

keine Angabe setDefaultDistribution()

Default-Werte: in Initializer.properties

Verwaltungsfunktionalitäten

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 10 von 58

Angabe von Dateneigenschaften mit SOLL/IST-Vergleich

Ausgabe des Ist-Zustandes in Log-Datei

für verschiedene Connections (CSV, JDBC, XML)

CSV: Ist-Zustand von Funktionsparametern wird dokumentiert

JDBC: bisher nur selectivity

XML: bisher noch nicht implementiert

Verwaltungsfunktionalitäten

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 11 von 58

Erweiterung der Konfigurationsmöglichkeiten

Konfigurationsmöglichkeiten

batch processing + batch-size

multiple concurrent connections

number of concurrent tuplestreams

tuplestream buffer size

Verwaltungsfunktionalitäten

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 12 von 58

Normalverteilung und Poissonverteilung

Funktionsverlauf sehr ähnlich

nicht gemeinsam implementiert

Verteilungsfunktion

Normalverteilung

kontinuierlich

Schiefe ist immer 0

Poissonverteilung

diskret (+ nur für pos. Werte definiert)

Schiefe ist variabel

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 13 von 58

Normalverteilung (Gauß-Verteilung)

Symmetrie

Parameter

Verteilungsfunktion

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 14 von 58

Normalverteilung (Gauß-Verteilung)

Allgemeine Umsetzung

Verteilungsfunktion

selectivity bestimmt das Intervall und die Standardabweichung bzw. Varianz

cardinality gibt Gesamtanzahl an zu generierenden Werten an

getProbability(position, index) liefert Wahr-scheinlichkeitswert nach Verteilungs-funktion

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 15 von 58

Verteilungsfunktion

selectivity bestimmt das Intervall und die Standardabweichung bzw. Varianz

cardinality gibt Gesamtanzahl an zu generierenden Werten an

getProbability(position, index) liefert Wahr-scheinlichkeitswert nach Verteilungs-funktion

Normalverteilung (Gauß-Verteilung)

Allgemeine Umsetzung

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 16 von 58

Verteilungsfunktion

selectivity bestimmt das Intervall und die Standardabweichung bzw. Varianz

cardinality gibt Gesamtanzahl an zu generierenden Werten an

getProbability(position, index) liefert Wahr-scheinlichkeitswert nach Verteilungs-funktion

Normalverteilung (Gauß-Verteilung)

Allgemeine Umsetzung

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 17 von 58

Verteilungsfunktion

selectivity bestimmt das Intervall und die Standardabweichung bzw. Varianz

cardinality gibt Gesamtanzahl an zu generierenden Werten an

getProbability(position, index) liefert Wahr-scheinlichkeitswert nach Verteilungs-funktion

Normalverteilung (Gauß-Verteilung)

Allgemeine Umsetzung

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 18 von 58

Verteilungsfunktion

selectivity bestimmt das Intervall und die Standardabweichung bzw. Varianz

cardinality gibt Gesamtanzahl an zu generierenden Werten an

getProbability(position, index) liefert Wahr-scheinlichkeitswert nach Verteilungs-funktion

Normalverteilung (Gauß-Verteilung)

Allgemeine Umsetzung

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 19 von 58

Verteilungsfunktion

selectivity bestimmt das Intervall und die Standardabweichung bzw. Varianz

cardinality gibt Gesamtanzahl an zu generierenden Werten an

getProbability(position, index) liefert Wahr-scheinlichkeitswert nach Verteilungs-funktion

Normalverteilung (Gauß-Verteilung)

Allgemeine Umsetzung

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 20 von 58

Verteilungsfunktion

selectivity bestimmt das Intervall und die Standardabweichung bzw. Varianz

cardinality gibt Gesamtanzahl an zu generierenden Werten an

getProbability(position, index) liefert Wahr-scheinlichkeitswert nach Verteilungs-funktion

Normalverteilung (Gauß-Verteilung)

Allgemeine Umsetzung

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 21 von 58

Verteilungsfunktion

selectivity bestimmt das Intervall und die Standardabweichung bzw. Varianz

cardinality gibt Gesamtanzahl an zu generierenden Werten an

getProbability(position, index) liefert Wahr-scheinlichkeitswert nach Verteilungs-funktion

Normalverteilung (Gauß-Verteilung)

Allgemeine Umsetzung

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 22 von 58

Normalverteilung (Gauß-Verteilung)

Datentypen-spezifische Umsetzung:

- INTEGER / BIGINT siehe Vorgehensweise

- DOUBLE / FLOAT Schrittweite 0,01, wie INTEGER, skaliert

- CHAR / VARCHAR Spaltenname + INTEGER

- BOOLEAN 50/50 (da Symmetrie)

- DATE Referenzdatum = Mittelwert (mean), Berechnen der Tage nach Verteilungsfunktion

range, value list

- value list: Verteilung der Indizes nach Verteilungsfunktion.

- range: Überprüfung, ob Werte innerhalb von Range liegen

Verteilungsfunktion

TU Dresden, 14.11.07 Komplexpraktikum DIPBench Folie 23 von 58

Normalverteilung (Gauß-Verteilung)

Probleme und Einschränkungen

Rundungsfehler

zu wenig unterschiedliche Werte – selectivity wird nicht erreicht

selectivity bestimmt variance – Benutzereingabe wird ignoriert

Open tasks

Poissonverteilung anpassen

Verbesserungsvorschläge

evtl. Prioritäten der Parameter ändern (variance)

Verteilungsfunktion

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 24 von 58

03. Teil 2

Aufgabenstellung

Woche 1: Realisierung von Verwaltungsfunktionen

-Erweiterung der Metadaten um Constraints

-Definition XML Schema für Tabellendefinition

-Adaption der PlatformModels von Torque

Woche 2: Realisierung der Verteilungsfunktion “Logarithmische Normalverteilung”

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 25 von 58

Erweiterung der Metadaten um Constraints

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 26 von 58

Erweiterung der Metadaten um Constraints

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 27 von 58

Definition XML Schema für Tabellendefinition

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 28 von 58

Adaption des PlatformModels von Torque

Ziel : DBMS-Unabhängigkeit

Verschiedene DBMS verwenden unterschiedliche Datentypen

--> dies muß bei der Erzeugung der Tabellen berücksichtigt werden (wenn man DBMS-unabhängig sein will)

--> mit Hilfe des PlatformModels von Torque werden beim Erstellen der “Create Table”-Statements die im Programm verwendeten Datentypen auf die entsprechenden Datentypen des Ziel-DBMS gemapped

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 29 von 58

Unterstützte DBMS

- Axion

- Cloudscape

- DB2-AS400

- DB2

- Derby

- HSQLDB (Hypersonic)

- Interbase

- MS Acces

- MS SQL

- MySQL

- Oracle

- PostgreSQL

- SAP DB

- Sybase

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 30 von 58

Realisierung der Verteilungsfunktion “Logarithmische Normalverteilung”

Verteilungsdichtefuntion:

Dichtefunktion der Lognormalverteilung (mit μ = 0)

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 31 von 58

Verteilungsfunktion

Verteilungsfunktion der

Lognormalverteilung (mit μ = 0)

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 32 von 58

Erste Idee: Umkehrung der Verteilungsfunktion

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 33 von 58

Nachteile / Gründe für das Verwerfen der ersten Idee

-insbesondere bei kleineren Datenmengen können die erzeugten Daten (zum Teil stark) von der gewünschten Verteilung abweichen

-(Pseudo-)Zufall überflüssig oder sogar hinderlich beim Erzeugen eines gewünschten Testdatensatzes

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 34 von 58

Umgesetzte Lösung

-Berechnung der Anzahl der verschiedenen Werte aus Selektivität und Kardinalität

-Einteilung des Wertebereichs in Intervalle

-Schrittweise Abarbeitung von links nach rechts: an jeder Intervallgrenze wird berechnet, wieviele Exemplare des aktuellen Wertes (Intervallgrenze) gemäß der Warscheinlichkeit des Wertes erzeugt werden müssen

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 35 von 58

Beispiel

Datentyp: IntegerWertebereich (Range): 0-10

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 36 von 58

Beispiel

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 37 von 58

Beispiel

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 38 von 58

Beispiel

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 39 von 58

Beispiel

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 40 von 58

Beispiel

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 41 von 58

Beispiel

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 42 von 58

Behandlung der verschiedenen Datentypen

Integer + Bigint: s. Beispiel

Float + Double: wie Integer, nur Intervallberechnung für reelle Zahlen angepasst

Char + Varchar: Spaltenname + Integer

Boolean: 50/50 (keine sinnvolle Anwendung der Verteilungsfunktion möglich)

Date: Referenzdatum + x tage (x --> Bigint)

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 43 von 58

Probleme

- Rundungsfehler

- teilweise zu wenig unterschiedliche Werte (selectivity wird nicht erreicht)

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 44 von 58

03. Teil 3

Aufgabenstellung

Woche 1:

• Implementierung einer „CSV Connection“Verbindung zu einer CSV Datei

• Einbindung von Log4jAnpassung des Quellkode vom Initializer

Woche 2:

Implementierung der Zipfsche Verteilungund der Verteilung von Pareto

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 45 von 58

CSV Datei

Verwendung der API OpenCSV (http://opencsv.sourceforge.net/):

au.com.bytecode.opencsv:„A very simple CSV parser for Java released under a commercial-friendly license.“

im Projekt schon eingebunden wegen der Konfigurationsdateien

einfache und gut dokumentierte Schnittstelle

Ziel: Umsetzung einer ähnliche Funktionalität vie JDBCConnection

(transparente Nützung von JDBC oder CSV)

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 46 von 58

CSV Datei: Schnittstelle

TU Dresden, 01.11.07 Komplexpraktikum DIPBench

Erhebung von IST-Werten

• Keine Anfragemöglichkeit

• Durchschnitt, Varianz, Schiefe werden „on the fly“ ermittelt:ausgehend von (X1, ..., Xi,... Xn)

– X1 + ... + Xi

+... + Xn = 1

– X12 + ... + Xi

2 + ... + Xn2 =

– X13 + ... + Xi

3 + ... + Xn3 =

– Durchschnitt: m = 1 / n

– Varianz: v = ( 2 / n) / n

– Schiefe: s = (3 / n 3.1. / n2 + 4.1

3 / n3) / sqrt(v)

TU Dresden, 01.11.07 Komplexpraktikum DIPBench

CSV Datei: E/A Leistung

Skalierungsfaktor Größe der Datei (MB) Zeit (s)

0,1 7,6 2,64

1 77,4 25,45

10 786 258,78

Generierung von 350.000 gleichverteilten Tupeln (f = 1)

TU Dresden, 01.11.07 Komplexpraktikum DIPBench

Log4j - http://logging.apache.org/log4j

Framework für eine leicht einstellbare Protokollierung

• Begriffe:Hierarchie von „Loggers“: 1 Logger für jeden Knoten der KlassenhierarchieAppender

• Konfiguration:– hartkodiert– mit einer XML-Datei– mit einer Properties-Datei

• Aufruf:getLogger() gibt eine Referenz über ein Logger zurückdebug, info, warn, log Methoden

TU Dresden, 01.11.07 Komplexpraktikum DIPBench

Log4j – Konfigurationsdatei: Beispiellog4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=(%-10r)[%-15t]%-5p %-20c{1} - %m%n

log4j.appender.fileAppender=org.apache.log4j.FileAppenderlog4j.appender.fileAppender.File=log/demo.loglog4j.appender.fileAppender.layout=org.apache.log4j.PatternLayoutlog4j.appender.fileAppender.layout.ConversionPattern=%d [%-10t] %-5p %c{2} %x - %m%n

log4j.appender.null=org.apache.log4j.varia.NullAppender

log4j.logger.org=DEBUG, null

#log4j.logger.org.tud.dipbench.initializer.gen=INFO, console#log4j.logger.org.tud.dipbench.initializer.conn=INFO, console

log4j.logger.org.tud.dipbench.initializer.gen.UniformDataGenerator=DEBUG, consolelog4j.logger.org.tud.dipbench.initializer.conn=INFO, console

...

TU Dresden, 01.11.07 Komplexpraktikum DIPBench

Log4j – Konfigurationsdatei: Gliederung (1)

log4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=(%-10r)[%-15t]%-5p %-20c{1} - %m%n

log4j.appender.fileAppender=org.apache.log4j.FileAppenderlog4j.appender.fileAppender.File=log/demo.loglog4j.appender.fileAppender.layout=org.apache.log4j.PatternLayoutlog4j.appender.fileAppender.layout.ConversionPattern=%d [%-10t] %-5p %c{2} %x - %m%n

log4j.appender.null=org.apache.log4j.varia.NullAppender

log4j.logger.org=DEBUG, null

#log4j.logger.org.tud.dipbench.initializer.gen=INFO, console#log4j.logger.org.tud.dipbench.initializer.conn=INFO, console

log4j.logger.org.tud.dipbench.initializer.gen.UniformDataGenerator=DEBUG, consolelog4j.logger.org.tud.dipbench.initializer.conn=INFO, console

TU Dresden, 01.11.07 Komplexpraktikum DIPBench

Log4j – Konfigurationsdatei: Gliederung (2)

log4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=(%-10r)[%-15t]%-5p %-20c{1} - %m%n

log4j.appender.fileAppender=org.apache.log4j.FileAppenderlog4j.appender.fileAppender.File=log/demo.loglog4j.appender.fileAppender.layout=org.apache.log4j.PatternLayoutlog4j.appender.fileAppender.layout.ConversionPattern=%d [%-10t] %-5p %c{2} %x - %m%n

log4j.appender.null=org.apache.log4j.varia.NullAppender

log4j.logger.org=DEBUG, null

#log4j.logger.org.tud.dipbench.initializer.gen=INFO, console#log4j.logger.org.tud.dipbench.initializer.conn=INFO, console

log4j.logger.org.tud.dipbench.initializer.gen.UniformDataGenerator=DEBUG, consolelog4j.logger.org.tud.dipbench.initializer.conn=INFO, console

TU Dresden, 01.11.07 Komplexpraktikum DIPBench

Die Zipfsche Verteilung

• Diskrete Verteilung, Support: {1 , ... , N}

• f(n;k,N)= a(k,N) / ks

• Problem:– Kein einfacher Zusammenhang

zwischen (k,N) und dem Durchschnitt / der Varianz

– Es werden keine Werte sondern Indizes generiert

m = HN,k-1 / HN,k wobei:

TU Dresden, 01.11.07 Komplexpraktikum DIPBench

Die Pareto Verteilung

• Kontinuerliche Verteilungsfunktion

• Dichtefunktion :Definitionsbereich: [xm, infinity [

• Nützliche Gleichung (kumulative Dichtefunktion):

TU Dresden, 01.11.07 Komplexpraktikum DIPBench

Die Pareto Verteilung:Bestimmung von k und xm

Grundlagen:

• m = k.xm / (k – 1) - (wenn k > 1)

• V = m 2 . 1 / [(k – 2).k] – (wenn k > 2)

Einschränkungen:

• Intervall [xm , xMax]

• xMax / P(x > xMax) ist klein (z.B < 10-3)

• Vorgegebene Varianz V und Durchschnitt m• Selektivität: Anzahl von generierten Werten

TU Dresden, 01.11.07 Komplexpraktikum DIPBench

Pareto: Prinzip der Generierung

Anpassung der Schrittweite während der Generierung

TU Dresden, 01.11.07 Komplexpraktikum DIPBench

Pareto: Typkonvertierung

Unterstütze Typen:• double, float: wird „natürlich“ von der Verteilung erzeugt

• integer, bigint: Rundung zur nächsten Ganzzahl

• enumeration: eine Ganzzahl wird generiert und den entsprechenden Wert wird ausgewählt

• boolean: zweiwertiges Set

• Date: Referenzdatum + Zeitspanne(Varianz und Durchschnitt in Tagen angegeben)

TU Dresden, 01.11.07 Komplexpraktikum DIPBench Folie 58 von 58

Zusammenfassung

Initializer (aktueller Zustand)

Recommended