Komplexpraktikum DIPBench Computer Science Faculty, System Architecture, Database Technology Group Dresden,
TU Dresden, Komplexpraktikum DIPBenchFolie 2 von 58 Gliederung 01 Einführung 02 Vorstellung des Komplexpraktikums 03 Aufgaben und Ergebnisse Teil 1Katrin Braunschweig Teil 2 Dirk Alsfaßer Teil 3Romain Treboux 04 Zusammenfassung
TU Dresden, Komplexpraktikum DIPBenchFolie 3 von 58 Zeitraum: – (Blockpraktikum) Teilnehmer: Katrin Braunschweig Dirk Alsfaßer Romain Treboux Aufgabe: Erweiterung des DIPBench-Initializers 02 Komplexpraktikum DIPBench
TU Dresden, Komplexpraktikum DIPBenchFolie 4 von Komplexpraktikum DIPBench DIPBench Macro Architecture
TU Dresden, Komplexpraktikum DIPBenchFolie 5 von Komplexpraktikum DIPBench
TU Dresden, Komplexpraktikum DIPBenchFolie 6 von Komplexpraktikum DIPBench Initializer (alter Zustand)
TU Dresden, Komplexpraktikum DIPBenchFolie 7 von 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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 KonstruktorsetDistributionParameters(…) keine AngabesetDefaultDistribution() Default-Werte: in Initializer.properties Verwaltungsfunktionalitäten
TU Dresden, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 13 von 58 Normalverteilung (Gauß-Verteilung) Symmetrie Parameter Verteilungsfunktion
TU Dresden, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 24 von 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, Komplexpraktikum DIPBenchFolie 25 von 58 Erweiterung der Metadaten um Constraints
TU Dresden, Komplexpraktikum DIPBenchFolie 26 von 58 Erweiterung der Metadaten um Constraints
TU Dresden, Komplexpraktikum DIPBenchFolie 27 von 58 Definition XML Schema für Tabellendefinition
TU Dresden, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 30 von 58 Realisierung der Verteilungsfunktion Logarithmische Normalverteilung Verteilungsdichtefuntion: Dichtefunktion der Lognormalverteilung (mit μ = 0)
TU Dresden, Komplexpraktikum DIPBenchFolie 31 von 58 Verteilungsfunktion Verteilungsfunktion der Lognormalverteilung (mit μ = 0)
TU Dresden, Komplexpraktikum DIPBenchFolie 32 von 58 Erste Idee: Umkehrung der Verteilungsfunktion
TU Dresden, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 35 von 58 Beispiel Datentyp: Integer Wertebereich (Range): 0-10
TU Dresden, Komplexpraktikum DIPBenchFolie 36 von 58 Beispiel
TU Dresden, Komplexpraktikum DIPBenchFolie 37 von 58 Beispiel
TU Dresden, Komplexpraktikum DIPBenchFolie 38 von 58 Beispiel
TU Dresden, Komplexpraktikum DIPBenchFolie 39 von 58 Beispiel
TU Dresden, Komplexpraktikum DIPBenchFolie 40 von 58 Beispiel
TU Dresden, Komplexpraktikum DIPBenchFolie 41 von 58 Beispiel
TU Dresden, Komplexpraktikum DIPBenchFolie 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, Komplexpraktikum DIPBenchFolie 43 von 58 Probleme - Rundungsfehler - teilweise zu wenig unterschiedliche Werte (selectivity wird nicht erreicht)
TU Dresden, Komplexpraktikum DIPBenchFolie 44 von Teil 3 Aufgabenstellung Woche 1: Implementierung einer CSV Connection Verbindung zu einer CSV Datei Einbindung von Log4j Anpassung des Quellkode vom Initializer Woche 2: Implementierung der Zipfsche Verteilung und der Verteilung von Pareto
TU Dresden, Komplexpraktikum DIPBenchFolie 45 von 58 CSV Datei Verwendung der API OpenCSV ( 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, Komplexpraktikum DIPBenchFolie 46 von 58 CSV Datei: Schnittstelle
TU Dresden, Komplexpraktikum DIPBench Erhebung von IST-Werten Keine Anfragemöglichkeit Durchschnitt, Varianz, Schiefe werden on the fly ermittelt: ausgehend von (X 1,..., X i,... X n ) – X X i X n = 1 – X X i X n 2 = – X X i X n 3 = –Durchschnitt:m = 1 / n –Varianz:v = ( 2 / n) / n –Schiefe:s = ( 3 / n / n / n 3 ) / sqrt(v)
TU Dresden, Komplexpraktikum DIPBench CSV Datei: E/A Leistung Generierung von gleichverteilten Tupeln (f = 1)
TU Dresden, Komplexpraktikum DIPBench Log4j - Framework für eine leicht einstellbare Protokollierung Begriffe: Hierarchie von Loggers: 1 Logger für jeden Knoten der Klassenhierarchie Appender Konfiguration: –hartkodiert –mit einer XML-Datei –mit einer Properties-Datei Aufruf: getLogger() gibt eine Referenz über ein Logger zurück debug, info, warn, log Methoden
TU Dresden, Komplexpraktikum DIPBench Log4j – Konfigurationsdatei: Beispiel log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=(%-10r)[%-15t]%-5p %-20c{1} - %m%n log4j.appender.fileAppender=org.apache.log4j.FileAppender log4j.appender.fileAppender.File=log/demo.log log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout log4j.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, console log4j.logger.org.tud.dipbench.initializer.conn=INFO, console...
TU Dresden, Komplexpraktikum DIPBench Log4j – Konfigurationsdatei: Gliederung (1) log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=(%-10r)[%-15t]%-5p %-20c{1} - %m%n log4j.appender.fileAppender=org.apache.log4j.FileAppender log4j.appender.fileAppender.File=log/demo.log log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout log4j.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, console log4j.logger.org.tud.dipbench.initializer.conn=INFO, console
TU Dresden, Komplexpraktikum DIPBench Log4j – Konfigurationsdatei: Gliederung (2) log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=(%-10r)[%-15t]%-5p %-20c{1} - %m%n log4j.appender.fileAppender=org.apache.log4j.FileAppender log4j.appender.fileAppender.File=log/demo.log log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout log4j.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, console log4j.logger.org.tud.dipbench.initializer.conn=INFO, console
TU Dresden, Komplexpraktikum DIPBench Die Zipfsche Verteilung Diskrete Verteilung, Support: {1,..., N} f(n;k,N)= a(k,N) / k s Problem: –Kein einfacher Zusammenhang zwischen (k,N) und dem Durchschnitt / der Varianz –Es werden keine Werte sondern Indizes generiert m = H N,k-1 / H N,k wobei:
TU Dresden, Komplexpraktikum DIPBench Die Pareto Verteilung Kontinuerliche Verteilungsfunktion Dichtefunktion : Definitionsbereich: [x m, infinity [ Nützliche Gleichung (kumulative Dichtefunktion):
TU Dresden, Komplexpraktikum DIPBench Die Pareto Verteilung: Bestimmung von k und x m Grundlagen: m = k.x m / (k – 1) - (wenn k > 1) V = m 2. 1 / [(k – 2).k] – (wenn k > 2) Einschränkungen: Intervall [x m, x Max ] x Max / P(x > x Max ) ist klein (z.B < ) Vorgegebene Varianz V und Durchschnitt m Selektivität: Anzahl von generierten Werten
TU Dresden, Komplexpraktikum DIPBench Pareto: Prinzip der Generierung Anpassung der Schrittweite während der Generierung
TU Dresden, 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, Komplexpraktikum DIPBenchFolie 58 von 58 Zusammenfassung Initializer (aktueller Zustand)