Nabend, oder sagen wir besser "guten Morgen",
ich habe mal wieder etwas Arbeit vor mir. Die Aufgabe lautet für ein bestimmtes DBMS ein Benchmark-Tool zu schreiben (Und verdammt, ich muss es in Java machen, wovon ich mal so gar kein Plan habe ~.~).
Naja, was das DBMS angeht, so habe ich mich für MySQL entschieden. Die Aufgabe besteht nun konkret darin, vier Relationen mit Daten zu füllen und anschließend Operationen auf diese auszuführen. Gemessen wird die Zeit pro Operation. Natürlich muss ich das Programm und auch den Datenbankserver soweit optimieren, dass mein gewähltes DBMS am besten abschneidet (Andere Gruppen haben halt DB2, Oracle, M$ SQL o.a. gewählt). Die Optimierung des MySQL Servers spielt auch jetzt mal eher weniger eine Rolle.
Zunächst also muss ich Daten in die Relationen eintragen. An sich ist nur eine der Relationen relevant. Hier müssen nämlich 100.000*n Tupel (n = 5; 15; 25) eingetragen werden. Gesagt, getan .. alles funktioniert, es dauert mir nur zu lang. Auf meinem relatiev veralteten Notebook habe ich zunächst für 1000 Executions mit PreparedStatements 38 Sekunden gebraucht. Anschließend habe ich es geschafft mit einfacheren Statements auf 1000 Executions / 36 Sekunden zu kommen.
Mein momentanes Vorgehen ist mit einer Schleife 100.000*n mal die Funktion "query" aufzurufen, welche die Tupel einträgt (Die Tupel unterscheiden sich lediglich von der ID, sowie eines anderen zufällig gewählten Wertes, der zwischen 1 und n liegt).
Hier mal die query-Funktion:
Vorher mit PreparedStatements:
Nachher mit einfachen Statements:
Nun ist halt zunächst mal meine Frage ob ich die PreparedStatements richtig nutze. Immerhin habe ich mehrere hundertausend Statements, die sich lediglich um zwei Attribute unterscheiden (Und das sind Integerwerte) und ich führe für jeden INSERT INTO Befehl ein prepareStatement sowie clearParameters() aus.
Dann ist meine Frage wie ich in Java in einem solchen Falle am besten vorgehen kann bzw. ob ich mit den einfachen Statements schon ganz gut voran komme.
ich habe mal wieder etwas Arbeit vor mir. Die Aufgabe lautet für ein bestimmtes DBMS ein Benchmark-Tool zu schreiben (Und verdammt, ich muss es in Java machen, wovon ich mal so gar kein Plan habe ~.~).
Naja, was das DBMS angeht, so habe ich mich für MySQL entschieden. Die Aufgabe besteht nun konkret darin, vier Relationen mit Daten zu füllen und anschließend Operationen auf diese auszuführen. Gemessen wird die Zeit pro Operation. Natürlich muss ich das Programm und auch den Datenbankserver soweit optimieren, dass mein gewähltes DBMS am besten abschneidet (Andere Gruppen haben halt DB2, Oracle, M$ SQL o.a. gewählt). Die Optimierung des MySQL Servers spielt auch jetzt mal eher weniger eine Rolle.
Zunächst also muss ich Daten in die Relationen eintragen. An sich ist nur eine der Relationen relevant. Hier müssen nämlich 100.000*n Tupel (n = 5; 15; 25) eingetragen werden. Gesagt, getan .. alles funktioniert, es dauert mir nur zu lang. Auf meinem relatiev veralteten Notebook habe ich zunächst für 1000 Executions mit PreparedStatements 38 Sekunden gebraucht. Anschließend habe ich es geschafft mit einfacheren Statements auf 1000 Executions / 36 Sekunden zu kommen.
Mein momentanes Vorgehen ist mit einer Schleife 100.000*n mal die Funktion "query" aufzurufen, welche die Tupel einträgt (Die Tupel unterscheiden sich lediglich von der ID, sowie eines anderen zufällig gewählten Wertes, der zwischen 1 und n liegt).
Hier mal die query-Funktion:
Vorher mit PreparedStatements:
Nachher mit einfachen Statements:
Nun ist halt zunächst mal meine Frage ob ich die PreparedStatements richtig nutze. Immerhin habe ich mehrere hundertausend Statements, die sich lediglich um zwei Attribute unterscheiden (Und das sind Integerwerte) und ich führe für jeden INSERT INTO Befehl ein prepareStatement sowie clearParameters() aus.
Dann ist meine Frage wie ich in Java in einem solchen Falle am besten vorgehen kann bzw. ob ich mit den einfachen Statements schon ganz gut voran komme.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Blue ()