Re: @CB: Grundsätzliches zur Datenbank NACHTRAG - 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 Claus S. (1671 Beiträge) am Montag, 3.Februar.2003, 17:37.
    Re: @CB: Grundsätzliches zur Datenbank NACHTRAG

      hallo,

      habe das o.a. updateprogramm mal mit get gemacht

      ----- codeschnipsel -----
      <perl>
      get "d_okey==75417", "bgdata", "upd";
      while (get_next("upd"))
          {
           mod "Id==$_id", [ "d_kreis", "PF" ], "bgdata";
          }
      </perl>
      
      ----- codeschnipsel -----

      in diesem beispiel waren es 666 von 7644 sätzen,
      dafür hat er bei netdirekt über 2 min benötigt, auf einem anderen bp-server sogar 3 min. bei grösseren datenmengen bricht er aber auch hier ab (seite nicht gefunden etc.) das kann wohl nicht im interesse des erfinders sein, zumal es sich hier um eine durchaus praktische und nicht theoretische aufgabenstellung handelt.

      wie ist das eigentlich, wenn man in diesen code nocht einen sort einbaut? ist das überflüssig oder sortiert er vor der selektion?

      gruss

      claus


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Claus S. (1671 Beiträge) am Montag, 3.Februar.2003, 14:26.
    @CB: Grundsätzliches zur Datenbank

      hallo christoph,

      aus aktuellem anlass möchte ich dich bitten, noch einmal die datenbankstruktur bzw. -funktionalität zu erläutern.

      du sagtest einmal, mit bp könne man datenbank mit mehreren hunderttausend sätzen verarbeiten.

      nun ich habe eine adressdatei mit derzeit 7644 sätzen, um mir einen überblick zu verschaffen, wieviele adressesätze zur jeder stadt gehören, schrieb ich mir folgende statistik, von der du seinerzeit in etwa sagtest, diese programmierung sei für diese datenbank ungünstig, was ich allerdings nicht so richtig verstanden habe.

      -----codeschnipsel------
      $work_count = 0; 
                       foreach $d_okey(sort {$a<=>$b}keys %Anzahl)
                        {
                         get "o_okey==$d_okey & o_okey2==1", "../bgd/bgorte";
      
                         if (($o_okey eq $d_okey) && ($o_okey2 eq "1"))                       {                        $work_ort = $o_ortgesamt; # Ortsname                       }                    else                       {                        $work_ort = "kein Ort! "; # Ortsname not found                       }
      -----codeschnipsel------

      beim aufruf dieses programms auf baseportal brach es nach paar sekunden immer ab mit 'seite nicht gefunden', jetzt, da ich bei netdirekt bin, bricht es auch ab, wenn ich den vorgang einige male wiederhole, dann kommt es vor dass es klappt (runtime 6 - 7 sec)

      nun aber ein anderer fall aus der praxis, und das sollte eigentlich möglich sein: um noch flexibler zu sein, fügte ich ein zusätzliches feld in die datenbank (d_kreis = kennzeichen landkreis), um das feld zu initalisieren habe ich folgenden minicode geschrieben

      -----codeschnipsel------
      <loop db=bgdata code=perl>
      

      if ($d_okey eq "75417"))
          {
           mod "Id==$_id", [ "d_kreis", "PF" ];
          }
      </loop>
      
      -----codeschnipsel------

      obwohl ich hier nur stückweise vorgehe (einzelne plz-bereiche) bricht auch dieses programm ab, selbst wenn ich hartnäckig wiederhole, so kann ich von glück sagen, wenn ein paar sätze modifiziert werden.

      kannst du bitte hierzu mal ein verständliches und eindeutiges statement abgeben?

      danke und gruss

      claus

     Antworten

    Beitrag von Claus S. (1671 Beiträge) am Montag, 3.Februar.2003, 14:42.
    Re: @CB: Grundsätzliches zur Datenbank

      uups,
      beim kopieren ist mir ne klammer reingerutscht, muss so heissen-----codeschnipsel------


      <loop db=bgdata code=perl>
      

      if ($d_okey eq "75417")
       
      {
           mod "Id==$_id", [ "d_kreis", "PF" ];
          }
      </loop>
       
      
      -----codeschnipsel------

     Antworten

    Beitrag von Claus S. (1671 Beiträge) am Montag, 3.Februar.2003, 17:37.
    Re: @CB: Grundsätzliches zur Datenbank NACHTRAG

      hallo,

      habe das o.a. updateprogramm mal mit get gemacht

      ----- codeschnipsel -----
      <perl>
      get "d_okey==75417", "bgdata", "upd";
      while (get_next("upd"))
          {
           mod "Id==$_id", [ "d_kreis", "PF" ], "bgdata";
          }
      </perl>
      
      ----- codeschnipsel -----

      in diesem beispiel waren es 666 von 7644 sätzen,
      dafür hat er bei netdirekt über 2 min benötigt, auf einem anderen bp-server sogar 3 min. bei grösseren datenmengen bricht er aber auch hier ab (seite nicht gefunden etc.) das kann wohl nicht im interesse des erfinders sein, zumal es sich hier um eine durchaus praktische und nicht theoretische aufgabenstellung handelt.

      wie ist das eigentlich, wenn man in diesen code nocht einen sort einbaut? ist das überflüssig oder sortiert er vor der selektion?

      gruss

      claus

     Antworten

    Beitrag von Claus S. (1671 Beiträge) am Dienstag, 4.Februar.2003, 21:00.
    Re: @CB: Grundsätzliches zur Datenbank NACHTRAG

      danke christoph,
      für deine ausführliche erklärung, wenn du auch nicht auf jede frage eingegangen bist (vermutlich versehentlich) ;-)
      die von dir gezeigte get-abfrage hatte ich so ja schon vorangegangen gepostet, daher verstand ich ich dieses beispiel nicht so recht.

      anschliessende test haben dann aber gezeigt, dass das loop-beispiel schneller ist, bzw. seltener abbricht, die variante _mit_ einer range-angabe ist demnach auch erfolgreicher. was mir dabei auch auffiel, ist die tatsache, dass die range-angabe sich auf die anzahl der modifizierten sätze bezieht und nicht auf die anzahl der sätze in der datei, beispiel: 10000 sätze in der datei, 1000 mit dem passenden selektionsbegriff und range=0,1000. somit wäre ein update mit einem aufruf möglich. damit wäre meine unbeantwortete frage, ob eine zusätzlich sort-angabe vorteile brächte, obsolet.
      nun möchte ich von dir wissen, ob diese beobachtung technisch prinzipiell oder nur ein zufall war.

      gruss

      claus

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 3.Februar.2003, 21:57.
    Re: @CB: Grundsätzliches zur Datenbank

      Ich versuchs ;-)

      Also "100.000 Datensätze verarbeiten" kann man pauschal nicht sagen, denn das hängt davon ab, wie lange ein Verarbeitungsschritt dauert.

      baseportal kann auf jeden Fall viele viele Datensätze speichern; theoretisch 4 Mio., wobei ich keine DB kenne, die soviel hat, ich kann als Beispiel immer nur das Deutsch/Englisch Dictionary anbieten:

      http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/dict_de_en

      in dem rund 124.000 Datensätze gespeichert sind. Eine Abfrage nach beliebigen Datensätzen geht recht flott, wie Du Dich selbst unter dem Link vergewissern kannst...

      Das ist meine Aussage: baseportal kann Hundertausende Datensätze speichern und darin sortierte Felder schnell finden & auslesen...

      Bei Dir geht es eigentlich um etwas anderes: Die Laufzeit Deines Skriptes. Und die hängt vom Code ab und hat mit baseportal nicht direkt was zu tun...

      Konkret bei Deinem 2. Beispiel: Du holst 7644 Datensätze Schritt für Schritt und machst 7644 Vergleiche und 666 Änderungen - das kann schon ne Weile dauern.

      Ich vergleich das jetzt mal so: baseportal ist eine grosse Lagerhalle in der Du viele viele Kisten sortiert ablegen kannst und wenn Du bestimmte Kisten wieder raus haben willst, dann geht das sehr schnell... Wenn Du aber jede Kiste einzeln öffnest, den Inhalt rausholst, irgendwas damit anstellst und teils anderen Inhalt wieder reintust - dann dauert das ab ner gewissen Anzahl Kisten zwangsläufig recht lang...

      Der Ansatz bei Deinem Beispiel ist zu optimieren: Wenn "d_okey" sortiert vorliegt, dann wäre

      <loop d_okey==75417 db=bgdata code=perl>
      mod "Id==$_id", [ "d_kreis", "PF" ];
      </loop>
      <perl>out "Laufzeit: ".runtime;</perl>
      

      schonmal viel schneller, weil Du das Durchlaufen der kompletten DB sparst. Noch schneller müsste sein:

      <perl>
      get "d_okey==75417", "bgdata";
      while(get_next "bgdata")
      {
        mod "Id==$_id", [ "d_kreis", "PF" ];
      }
      out "Laufzeit: ".runtime;
      </perl>
      

      Reicht das nicht, musst Du stückeln, also mit "range=0,1000" etc. arbeiten...

      Hoffe, es war ein bisschen verständlich ;-)

     Antworten

    Beitrag von Marzenka (1 Beitrag) am Freitag, 14.Februar.2003, 15:42.
    Re: @CB: Grundsätzliches zur Datenbank

      Ball

     Antworten


     
 Liste der Einträge von 40650 bis 40800: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.23s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!