do-while schleife stürzt bei vielen durchläufen ab

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Original geschrieben von damilchmann
    also ansich funzt max´s script doch, gibt dir nen riesen haufen zahlen aus, die es dann irgendwie zu organisieren gilt
    was heißt hier "ansich" und "doch"? - blasphemie!
    das ist die einzig logische konsequenz, dich bei deinem unsinnigem vorhaben zu unterstützen

    Kommentar


    • #17
      hehe, danke 3D

      werde es überleben, aber das mit dem in die datei schreiben scheint gut. und dann der import in die db.

      werde es mal über nacht laufen lassen und sehen, wie weit er kommt

      Kommentar


      • #18
        warum dann nicht direkt in die db? pro zeile hast du 6 byte, wenn du die ziffern als zeichen speicherst. mutipliziere das mal mit 13,9 mio. wie groß wird die text-datei werden?

        kontrollfrage: wie sehen die daten anschließend in der db aus?

        Kommentar


        • #19
          Original geschrieben von penizillin
          warum dann nicht direkt in die db? pro zeile hast du 6 byte, wenn du die ziffern als zeichen speicherst. mutipliziere das mal mit 13,9 mio. wie groß wird die text-datei werden?
          weitere kontrollfrage: wieviel zeit benötigt ein insert? mutipliziere das mal mit 13,9 mio., wieviel zeit benötigt das insgesamt?

          nächste kontrollfrage: wie groß ist die zeitdifferenz zwischen (schreiben in die txt-datei + einlesen in die datenbank - (13,9 mio. * delta t(insert))

          ich habe es übrigens nicht gebenchmarkt, aber das kann ja damilchmann oder du, penizillin, nachholen.
          rein intuitiv würde ich behaupten, dass erste variante schneller ist (first in txt-file, after in db).
          ich bin gespannt auf eure ergebnisse ...

          Kommentar


          • #20
            wieviel zeit benötigt ein insert?
            je nach server - 0.3 ms (bei dem einen, den ich zur hand habe).
            wieviel zeit benötigt das insgesamt?
            etwas über eine stunde, wenn man ein insert pro zeile macht. sinnvoller wäre es, einen buffer (größe im test ermitteln. ich tippe auf 750-1000 zeilen) einzurichten.
            wie groß ist die zeitdifferenz ...
            warum soll es schneller sein, eine text-datei zu importieren? eine db kann auch nicht zaubern und zerlegt die aufgabe in die selben inserts...

            Kommentar


            • #21
              Original geschrieben von penizillin
              warum soll es schneller sein, eine text-datei zu importieren? eine db kann auch nicht zaubern und zerlegt die aufgabe in die selben inserts...
              sagte ich doch - "intuitiv", auch als "bauchgefühl" bekannt.
              also komm' mir jetzt nicht mit logik, sondern beweise es mir knallhart mit benchmarks, ansonsten halte ich an meiner meinung fest

              Kommentar


              • #22
                wusste garnicht, dass sowas so polarisieren kann

                also, ich werde es mal testen, die db ist auf meinem rechner mit nem mamp-system.
                sollte also recht schnell gehen.

                kontrollfrage: wie sehen die daten anschließend in der db aus?

                7 felder mit id und 6 zahlen. mehr nicht

                Kommentar


                • #23
                  PHP-Code:
                  <?php  

                  set_time_limit
                  (0);
                  $s 999999;

                  mysql_connect("tut""nichts""zursache") or die(mysql_error());
                  mysql_select_db("test") or die(mysql_error());

                  $h fopen("dump""w");

                  $time time();

                  // methode 1
                  for($i=$s$i 2000000$i++) {
                      
                  mysql_query("INSERT INTO `muell` VALUES(".$i.")");
                  }



                  // methode 2
                  for($i=$s$i 2000000$i++) {
                      
                  fwrite($h$i."\n");
                  }

                  mysql_query("LOAD DATA LOCAL INFILE 'D:/dev/web/dump' 
                  INTO TABLE muell 
                  FIELDS TERMINATED BY ',' 
                  LINES TERMINATED BY '\n' 
                  (zahl); "
                  );

                  echo (
                  time()-$time);

                  fclose($h);

                  ?>
                  also nur eine million datensätze. methode 1 braucht 118 sekunden. methode 2 - gerade mal sieben (!). also hast du vollkommen recht gehabt und ich versuchs erst gar nicht mit irgendeinem buffer.

                  p.s. korrektur: ich schrieb
                  pro zeile hast du 6 byte
                  und vergaß, dass die lotto zahlen auch zweistellig sein können.

                  p.p.s. macht übrigens gerade mal 118 µs pro insert bzw. erstaunliche 7 µs pro csv-zeile...
                  Zuletzt geändert von penizillin; 01.05.2007, 00:18.

                  Kommentar


                  • #24
                    Original geschrieben von damilchmann
                    7 felder mit id und 6 zahlen. mehr nicht
                    und datentyp?

                    Kommentar


                    • #25
                      smallint

                      Kommentar


                      • #26
                        Wozu die ID?

                        Kommentar


                        • #27
                          Original geschrieben von penizillin
                          also nur eine million datensätze. methode 1 braucht 118 sekunden. methode 2 - gerade mal sieben (!). also hast du vollkommen recht gehabt und ich versuchs erst gar nicht mit irgendeinem buffer.
                          hey, cool, hast du ja wirklich getestet und mich bestätigt, man muss halt nur trotzig antworten

                          interessant finde ich, dass du bei 999999 anfängst zu zählen, hat das einen besonderen grund?

                          übrigens, mysql_error() ist obsolet, profis benutzen @

                          Kommentar


                          • #28
                            id: damit viellicht auch noch mal drauf zugriffen werden kann.

                            also mein schlaues php und mysql buch sagt mir, ich soll immer sowas wie id festlegen.


                            hab aber gerade mal versucht die daten in die dp zu speichern, er trägt aber nur einen einzigen datensatz ein mit den gelchen werten, alles 6 warum das

                            und csv gibt auch ne fehlermeldung. ist wohl falsch so
                            PHP-Code:
                            <?php 

                            require("connect2.inc.php");

                            for(
                            $n1=1$n1<10$n1++)
                             for(
                            $n2=$n1+1$n2<10$n2++)
                                 for(
                            $n3=$n2+1$n3<10$n3++)
                                    for(
                            $n4=$n3+1$n4<10$n4++)
                                        for(
                            $n5=$n4+1$n5<10$n5++)
                                            for(
                            $n6=$n5+1$n6<10$n6++)
                              echo 
                            $n1.' '.$n2.' '.$n3.' '.$n4.' '.$n5.' '.$n6.'<br />';
                              
                              
                            mysql_query("INSERT INTO lottozahlen VALUES('','$n1','$n2','$n3','$n4','$n5','$n6')");
                              
                              
                            //csv - fwrite($fp, $n1.','.$n2.','.$n2.','.$n2.','.$n2.','.$n2.'\n');


                            ?>
                            Zuletzt geändert von damilchmann; 01.05.2007, 01:10.

                            Kommentar


                            • #29
                              Original geschrieben von damilchmann
                              hab aber gerade mal versucht die daten in die dp zu speichern, er trägt aber nur einen einzigen datensatz ein mit den gelchen werten, alles 6 warum das
                              erinnere dich bitte an meinen kommentar zu meiner "dreckigen" programmierart:

                              ps: bei den schleifen habe ich die geschweiften klammern für die anweisungen weggelassen - mach ich immer, da ich faul bin daran solltest du dir kein vorbild nehmen und falls mehrere anweisungen erforderlich sind, sind sie auch zwingend nötig.

                              Kommentar


                              • #30
                                damilchmann, weil die query nur ein mal ausgeführt wird.
                                also mein schlaues php und mysql buch sagt mir, ich soll immer sowas wie id festlegen.
                                mit den schlauen ratschlägen hörts schnell auf, wenn man einfach mal so einen haufen datenmüll produzieren will.
                                interessant finde ich, dass du bei 999999 anfängst zu zählen, hat das einen besonderen grund?
                                damit die werte an sich groß sind und dadurch ähnlichkeit zu dem echten experiment gewährleistet wird.

                                Kommentar

                                Lädt...
                                X