View
104
Download
0
Category
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