Beitrag von Juri (43 Beiträge) am Donnerstag, 13.Dezember.2001, 19:01.
Effizienz gefragt!
Ich muß in einer Datenbank in jedem Datensatz eine Änderung durchführen. Dis mache ich mit get und get_next und dann mit mod. Dabei muß mod den Datensatz von neuem suchen, obwohl dieser nach dem get_next ja der aktuelle ist!
Geht das effizienter?
Beispiel:
get "sort=Nr,Sort", "Leute", "MakeDanach3";
while(get_next("MakeDanach3"))
{
...
mod "Id==$Id", ["Danach", $iDanach], "Leute";
...
}
Juri
Antworten
Beitrag von sascha fitzner (1 Beitrag) am Donnerstag, 13.Dezember.2001, 22:10. WWW: planet-gaga.de
Re: Effizienz gefragt!
Antworten
Beitrag von Juri (43 Beiträge) am Donnerstag, 13.Dezember.2001, 22:25.
Re: Effizienz gefragt!
Danke, aber das hilft nicht:
Ich muß eine Art Reorganisation durchführen, wo ich in jeden Datensatz was anderes reinschreiben muß. Die reinzuschreibende Information ergibt sich durch mein get und get_next. Zu modifizieren habe ich den gerade mit get_next erhaltenen Datensatz.
Ursprünglich hatte ich so etwas ähnliches mit einer Suchfunktion, aber die ist noch schlechter als mein
Juri
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 14.Dezember.2001, 18:48.
Re: Effizienz gefragt!
Antworten
Beitrag von Juri (43 Beiträge) am Freitag, 14.Dezember.2001, 19:13.
Re: Effizienz gefragt!
An so etwas schönes hab ich ja gar nicht gehofft: Wie bei objektorientierter Programmierung mit foreach(Progrämmchen) und alle Änderungen sind drinnen. Wau!
Meine derzeitigen Geschichten sind folgende:
Bei einem muß ich bei einem Teil der Datensätze einen Wert um 1 erhöhen oder verrringern.
Beim Anderen muß ich Information von Datensatz i in den Datensatz i+1 schreiben (deshalb das get mit get_next). Aber kein Umsortieren!
Ich hab ja diese Woche mein regexp-Wissen recht kräftig aufgebessert. Da fehlt mir jetzt nur noch die Erfahrung, wie man was effizient löst.
Aber bei PERL fehlt mir noch so viel!
Auf die Geschichte mit den hashes hab ich überhaupt nicht gedacht. Das ist ja ziemlich elegant! Nur: Wenn ich jetzt die ganze DB herumschreibe, ist das nicht auch etwas uneffizient? Ich meine, wenn ich die GANZE DB in den Speicher hole, darin verändere und dann komplett neu schreibe? Oder macht das mod auch nichts anderes?
Übrigens: Ich hab Laufzeitmessungen mit runtime gemacht????? Es funktioniert zwar, aber die Antwortzeiten sind ja gewaltig. Ich hab jetzt den laufzeitgetesteten Code in mein Projekt übernommen und da machts Zack und das Ergebnis ist da.
Also:
Mit runtime dauert es ewig!
Ohne runtime ists sofort fertig?
Juri
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 14.Dezember.2001, 20:49.
Re: Effizienz gefragt!
Perl lernt man ein Leben lang ;-) Und dann kommt ja auch bald Perl 6 ;-)
Hashes/Speicher: Ja, wenn die DB zu gross für den Speicher is, gehts so nich, würde mal sagen 5 MB is so die Grenze. Dann sollte man das "Blockweise" machen, also immer z.b. 1000 Einträge und dann die nächsten... klar?
runtime: Äh, hab ich das richtig verstanden: Du baust ein "out runtime" in Dein Prg. ein und es dauert ewig (ewig ist etwas ungenau ;-) wie lang denn ca.?) und wenn du es ohne runtime machst gehts sofort??? Das kann eigentlich nich so recht sein, runtime macht ja nix als ne Zeit zu messen und zurückzugeben... (wunder)
Antworten
Beitrag von Juri (43 Beiträge) am Freitag, 14.Dezember.2001, 20:57.
Re: Effizienz gefragt!
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Sonntag, 16.Dezember.2001, 00:48.
Re: Effizienz gefragt!
Also Dein Beispiel da oben sieht n bisschen merkwürdig aus, aber das sollte wohl nur zur Anschauung dienen ;-)
Gib mal die URL von dem Skript, interessiert mich...
Antworten
Beitrag von Juri (43 Beiträge) am Sonntag, 16.Dezember.2001, 22:24.
Re: Effizienz gefragt!
Antworten