Mailinglisten-Archive |
Hallo René, René Thiel schrieb: > > Michael Hansen schrieb: > > Ich habe die von dir angeregte Diskussion zum Auswerten von Logfiles > > mitverfolgt und bin ganz ehrlich davon nicht sehr begeistert. Bitte > verstehe > > mich nicht falsch und nimm es nicht zu sehr persönlich, aber vielleicht > > solltest du erst einmal kleinere Brötchen backen, wenn sich dein Wissen > doch > > so arg beschränkt... > > Wenn Du das mitverfolgt hast, hast Du sicher auch gelesen, dass die > Brötchen anfangs viel kleiner waren (1/20) und dafür reichte ja mein > beschränktes Wissen - der Auftraggeber war damals sehr zufrieden... Nun gut aber auch 50.000 Datensätze wollen gerne schon effizient verwaltet werden und normalerweise denkt man ja auch für die Zukunft voraus. Warum habe ich überhaupt solch eine Bemerkung gemacht? Ich studiere Informatik, spezialisiere mich auf Datenbanksysteme und erfahre immer wieder direkt oder indirekt (über Erzählungen meines Professors) wie ein Projekt oder sogar ein ganzes Unternehmen letztendlich scheiterte, da sich das Wissen über Datenbanksysteme stark beschränkte... Nun ja, das mag in deinem Fall zugegebenermaßen noch etwas weit hergeholt sein. Ich will jetzt auch gar nicht weiter darauf rum reiten. Sei froh wenn du einen Kunden hast, der dir jetzt die Zeit lässt dein Wissensstand aufzubessern. > > Bei dem jetzigen Problem verstehe ich noch nicht warum du 3 verschiedene > > Querys brauchst bzw. was du damit konkret bezwecken willst!? > > Genau das war meine Frage: wie finde ich die passenden Datensätze > am schnellsten? Dass diese 3 Querys zu lange dauern, schrieb ich ja. Ich kann auch sehr gut von einer magischen Blackbox ausgehen und sehe nur diese 3 Anfragen und alles andere kommt und geht in meine magische Blackbox. Dann kann ich dir Tipps zum Optimieren deiner 3 Anfragen geben aber ob es im gesamten Kontext gesehen die optimale Lösung für dein Problem ist, sei dahingestellt. Ich wollte nur einen Blick über den Tellerrand wagen um vielleicht eine bessere Lösung vorschlagen zu können. > Was das mit Transaktionsfähigkeit oder Update- und Delete-Operationen > tu tun hat, ist mir jetzt nicht klar. Inzwischen denke ich auch nicht mehr dass es um Transaktionsfähigkeit geht. Ich dachte zunächst du versuchst eigenständig eine Art Transaktionsfähigkeit bereitzustellen. > > So wie ich es aber jetzt verstanden habe, fügst du einmal deine Logdaten > > in die Datenbank ein und arbeitest dann nur noch auf diesen. > > Richtig, die Log-Daten kommen erstmal (alle) aufbereitet in die DB: > > 1 Datum/Zeit CALL_0 Alloc > 2 Datum/Zeit CALL_2 Alloc > 3 Datum/Zeit CALL_0 Rel 602->220 > 4 Datum/Zeit CALL_0 Free > 5 Datum/Zeit CALL_2 Rel 325->431 > 6 Datum/Zeit CALL_0 Alloc > 7 Datum/Zeit CALL_2 Free > 8 Datum/Zeit CALL_0 Rel 542->250 > 9 Datum/Zeit CALL_0 Free > ..... > > Das ca. 1.000.000 Zeilen lang mit bis zu 20 verschiedenen CALL_X > (Kanälen) durcheinander. > Also suche ich bei der Auswertung (Schritt 2 nach dem Einlesen) > zur Zeile 7 die zugehörigen Zeilen (hier: 5 und 2), um die Dauer der > Verbindung von 325 nach 431 (und aller anderen) zu erhalten. > > Später (Schritt 3: Anzeige) werden alle Verbindungen von 325 nach > 431 pro Tag/Woche/Monat addiert und sämtliche Verbindungen > statistisch ausgewertet (inkl. Tortengrafik). > > Um der Frage vorzubeugen: nach Calls zu sortieren, wäre ohne Sinn, > da 542->250 beispielsweise wenig später über CALL_8 laufen könnte. > Und nach Verbindungen kann auch nicht sortiert werden, da Alloc > und Free keine Verbindungsdaten enthalten, aber die wichtigen Zeiten > für Beginn und Ende der Verbindung. > > Jetzt ein wenig klarer? > Jein, ich schätze es geht um die Nachverfolgung von Zugriffen? In deiner ersten Tabelle schreibst du die "Rohdaten" so wie sie im Log existieren und in der zweiten Tabelle ordnest du die Zugriffe vermutlich gleicher Personen einander zu? Auch wenn ich es immer noch nicht ganz verstanden habe, schmeiße ich nun mal den Begriff "Rekursion" in den Raum. Rekursion ist aber unter MySQL nur mit bestimmten Storage Engines anwendbar und ich weiß nicht welche Storage Engine du verwendest und ob ggf. ein Wechsel in Betracht käme. > > Struktur der Tabelle (Schlüssel, Indizes). > > Alle Daten aus Log-Datei: > > CREATE TABLE IF NOT EXISTS `Jahr_Standort` > `ID` int(10) NOT NULL auto_increment, > `DateTime` datetime NOT NULL default '0000-00-00 00:00:00', > `IP` varchar(15) NOT NULL default '', > `Call` varchar(20) NOT NULL default '', > `Typ` varchar(20) NOT NULL default '', > `Verbindungen` varchar(40) NOT NULL default '', > `Kommentar` text NOT NULL, > PRIMARY KEY (`ID`), > KEY `DateTime` (`DateTime`), > KEY `Call` (`Call`), > KEY `Typ` (`Typ`), > FULLTEXT KEY `Kommentar` (`Kommentar`) > > Ausgewertete Daten aus `Jahr_Standort`: > > CREATE TABLE IF NOT EXISTS `Jahr_f_Standort` > `f_id` int(10) NOT NULL auto_increment, > `Start_ID` int(10) NOT NULL default '0', > `End_ID` int(10) NOT NULL default '0', > `Start_Zeit` datetime NOT NULL default '0000-00-00 00:00:00', > `End_Zeit` datetime NOT NULL default '0000-00-00 00:00:00', > `Call` varchar(20) NOT NULL default '', > `Von` varchar(40) NOT NULL default '', > `Nach` varchar(40) NOT NULL default '', > PRIMARY KEY (`f_id`), > KEY `Start_ID` (`Start_ID`), > KEY `End_ID` (`End_ID`), > KEY `Start_Zeit` (`Start_Zeit`), > KEY `End_Zeit` (`End_Zeit`), > KEY `Call` (`Call`), > KEY `Von` (`Von`), > KEY `Nach` (`Nach`) > > Meine Frage betrifft die Übernahme aus der oberen in die untere Tabelle. Das ist vielleicht der Stichpunkt. Ich schätze ja wegen der ganzen Indizes weniger, dass das Auslesen von Daten das Problem ist. Ich tippe viel eher auf die Insert-Anweisungen um die Daten in die zweite Tabelle einzufügen. Du solltest dennoch mal ebenso die SELECT-Statements mit einem vorangestellten EXPLAIN analysieren und kontrollieren welche Indizes verwendet werden. Ich kann dir jetzt hier nicht die Funktionalität und Struktur von Indizes erklären, zum Einstieg würde ich dir das Buch "High Performance MySQL" empfehlen von J. Zawodny und D. J. Balling. Leih es dir aus oder kauf es dir - es ist nicht so teuer und es ist gut! Das Buch würde dir sicherlich helfen. Ich vermute mal ganz stark, dass du die Indizes, so wie du sie oben angelegt hast, auch gar nicht alle brauchst - aber das ist so ohne Hintergrundwissen nur meine Vermutung. Beachte jedenfalls den Hinweis von Andreas zum Deaktivieren und Aktivieren der Indizes, wenn du viele Daten auf einmal einfügst. Viel Erfolg! Gruß, Michael
php::bar PHP Wiki - Listenarchive