Re: Effizienz gefragt! - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 14.Dezember.2001, 18:48.
    Re: Effizienz gefragt!

      Wünschenswert wäre es sicherlich, wenn Du einen Code mitgeben könntest, der dann bei jedem Eintrag ausgeführt wird. Das ist zwar schon drin (so funktioniert das "reorg"), aber noch nich freigegeben, weil noch nich glatt geschliffen (ach sovieles, was noch des letzten Feinschliffes harrt ;-) ).

      Mit den jetzigen Mitteln wäre es am Besten, nich die Einträge zu ändern, sondern eine neue DB aufzubauen, also mit "put" zu arbeiten. Dabei solltest Du auch nich die Einträge einzeln reinschreiben, sondern erstmal in einem grossen Hash sammeln und den dann in einem Rutsch wegschreiben...

      Müsste ungefähr so aussehen:

      ...Schleife durch alle Einträge, $i zählt mit...
      $put{Feld}[$i]=...;
      ...Schleifenende
      put \%put;
      

      So ungefähr, musst mal in der Doku schauen, wie man mehrere Einträge auf einmal macht...


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    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!

      hi Juri!

      du hast gesehen das du bei dem mod auch eine bedingung vorgeben kannst?

      beispiel:

      $suchfarbe="Gelb";
      mod "farbe==$suchfarbe","[farbe","Rot"],"autos";
      

      macht aus allen Gelben Autos Rote Autos.

      vielleicht brauchst du deinen get und get_next dann ja nicht wenn du deine datensätze entsprechend über index lesen kannst.

      gruss sascha fitzner

     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
      mod "Id==$Id"....
      

      Juri

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 14.Dezember.2001, 18:48.
    Re: Effizienz gefragt!

      Wünschenswert wäre es sicherlich, wenn Du einen Code mitgeben könntest, der dann bei jedem Eintrag ausgeführt wird. Das ist zwar schon drin (so funktioniert das "reorg"), aber noch nich freigegeben, weil noch nich glatt geschliffen (ach sovieles, was noch des letzten Feinschliffes harrt ;-) ).

      Mit den jetzigen Mitteln wäre es am Besten, nich die Einträge zu ändern, sondern eine neue DB aufzubauen, also mit "put" zu arbeiten. Dabei solltest Du auch nich die Einträge einzeln reinschreiben, sondern erstmal in einem grossen Hash sammeln und den dann in einem Rutsch wegschreiben...

      Müsste ungefähr so aussehen:

      ...Schleife durch alle Einträge, $i zählt mit...
      $put{Feld}[$i]=...;
      ...Schleifenende
      put \%put;
      

      So ungefähr, musst mal in der Doku schauen, wie man mehrere Einträge auf einmal macht...

     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!

      Also nicht "out runtime" sondern $rtm=runtime dann kann ich nämlich eine Laufzeitdifferenz ausgeben;)

      Ansonsten hab ich rund 82 Datensätze und mach folgendes:

      runtime
       get
       while(get_next)
        { mod (N==$in and S==$is) }
       get
       while(get_next)
        { mod (N==$in and S==$is) }
      runtime
       get  while(get_next)   { mod (Id=$Id) }  get  while(get_next)   { mod (Id=$Id) }
      runtime

      Der erste Teil braucht manchmal 3.01 und der zweite Teil ca. 2.30

      Angesichts der Antwortzeiten sind das sicher Minuten!

      Den Code rausgenommen (nur den unteren!) und in das Projekt gestellt:

      Zack, und die Ausgabe ist sofort da!

      Find ich zwar seltsam, aber wenns im Projekt so geht, ist mirs auch recht!

      Juri

     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


     
 Liste der Einträge von 52950 bis 53100:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.06s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!