Ergebnis 1 bis 5 von 5

Thema: Datenbank zu txt =Problem=

  1. #1
    BlackBox
    Gast

    Standard Datenbank zu txt =Problem=

    Hallo Allerseits
    sitze schon seit einiger zeit an einem Script fest welcher den Inhalt von mehreren Datenbanken(über Joins) ausliest und diese in eine txt speichert, das auslesen und speichert klappt aber das Problem liegt in der Performance,
    es dauert viel zu Lange bis die txt datei gefüllt, besipw am anfang ist die 1kb groß bleibt 20bis30sec. so und dann ist se 66Kb wächst also sehr laaangsam t und ist auserdem noch ziemlich Ressourcenfressend denn wen der Scrript läuft wird der Pc aufeinmal ganz lahm. Also hab schon recht alles versucht, mich auf Variablen begrenzt die ich auch wirklich brauche doppelte " gegen einfache ' ersetzt, Variablen am Ende auf null setzen. Ich muss dazu hinzufügen es ist eine ganz schöne menge an Daten die bewegt wird. ich glaub so um die 19k DB-Einträgen

    Anfangs wollte ich ja Stumpf die ganze DB runterziehen aber das war noch schlimmer als jetzt hat aber noch weniger sinn gemacht war viel zu Langsam und Ressourcenfressender als jetzt.
    Den jetzt versuche ich die Daten häppchenweise rauszuziehen. Klappr bischen besser aber auch nur n bissle:

    Vieleicht fällt euch was ein was ich besser machen könnte, also ich bin da echt Überfragt.
    PHP-Code:
    <?php
    $minLimit 
    0;
    $file 'test.txt';
    if(
    file_exists($file)){
        
    unlink($file);
    }

    $fp fopen('test.txt''a+');

    $csv_head = array('aid''brand','mpnr''ean','name''desc''shop_cat''price''ppu''link''image''dlv_time''dlv_cost''pzn');
    $csv_file[0]   = implode('|'$csv_head);
    fputs($fp$csv_file[0]);
    fwrite($fp"\n");
    $i=0;
    $select2 'SELECT SQL_CALC_FOUND_ROWS
               d.html_osc,
               d.artikel_id,
               b.xxx,
               b.aufschlag,
               b.sonderlieferzeit,
               b.lieferzeit,
               a.rec_id as id,
               a.shop_artikel_id,
               a.matchcode,
               a.artnum,
               a.kurzname,
               a.menge_akt,
               a.shop_image,
               a.vk5
               FROM testcao.artikel a
               LEFT JOIN fuchsweb.lieferzeiten b ON b.cao_id = a.rec_id
               LEFT JOIN testcao.artikel_to_kat c ON c.artikel_id = a.rec_id
               LEFT JOIN fuchsweb.z_artikel_grund d ON d.artikel_id = a.rec_id
               WHERE d.html_osc IS NOT NULL
               GROUP BY a.rec_id'
    ;

    $queryLc mysql_query($select2) or die (mysql_error().__LINE__);
    $limit mysql_num_rows($queryLc);

    $select3 mysql_query('SELECT FOUND_ROWS() AS ende');
    $que     mysql_fetch_array($select3);
    $ende    $que['ende'];
    $repeat  ceil($que[0]/100); // Durch 100 weil 100 Datensätze pro lauf geschrieben werden.

    for($c=0$c<=$repeat;$c++){
        
    #$minLimit = $minLimit+100;
        
    if($minLimit>$ende) continue;
        
    $select 'SELECT
               d.html_osc,
               d.artikel_id,
               b.xxx,
               b.aufschlag,
               b.sonderlieferzeit,
               b.lieferzeit,
               a.rec_id as id,
               a.shop_artikel_id,
               a.matchcode,
               a.artnum,
               a.kurzname,
               a.menge_akt,
               a.shop_image,
               a.vk5
               FROM testcao.artikel a
               LEFT JOIN fuchsweb.lieferzeiten b ON b.cao_id = a.rec_id
               LEFT JOIN testcao.artikel_to_kat c ON c.artikel_id = a.rec_id
               LEFT JOIN fuchsweb.z_artikel_grund d ON d.artikel_id = a.rec_id
               WHERE d.html_osc IS NOT NULL
               GROUP BY a.rec_id LIMIT '
    .$minLimit.',100';       
        
    $query mysql_query($select) or die (mysql_error());

        while (
    $row mysql_fetch_object($query)){
            
    $artid      $row->id;
            
    $desc         $row->html_osc;
            
    $xxx          $row->xxx;
            
    $aufschlag  $row->aufschlag;
            
    $lief       $row->sonderlieferzeit;
            
    $liefzeit   $row->lieferzeit;
            
    $shop_id    $row->shop_artikel_id;
            
    $kurzname   $row->kurzname;
            
    $name       $row->matchcode;
            
    $artikelNr  $row->artnum;
            
    $mengeAkt   $row->menge_akt;
            
    $image      $row->shop_image;
            
    $preis      $row->vk5;
            
    $i++;

            if(
    $mengeAkt )
            {
                
    $liefer 1;
                
    $day ' Tag';
            }
            if(
    $mengeAkt 1)
            {
                
    $liefer $liefzeit+1;
                if (
    $lief 1) {
                    
    $lief $lief+1;
                }
                
    $day ' Tage';
            }
            if(
    $xxx == 'Y')
            {
                
    $liefer $lief+1;
                if(
    $lief 1)
                {
                    
    $liefer $liefzeit+1;
                    
    $day ' Tage';
                }
            }

            
    $selectKat 'SELECT artk.kat_id, ak.name AS kat1, ak2.name AS kat2, ak3.name AS kat3, ak4.name AS kat4 FROM testcao.artikel_to_kat artk
                    LEFT  JOIN testcao.artikel_kat ak  ON ak.id  = artk.kat_id
                    LEFT  JOIN testcao.artikel_kat ak2 ON ak2.id = ak.top_id
                    LEFT  JOIN testcao.artikel_kat ak3 ON ak3.id = ak2.top_id
                    LEFT  JOIN testcao.artikel_kat ak4 ON ak4.id = ak3.top_id
                    WHERE artk.artikel_id = ' 
    $artid;
            
    $queryKat mysql_query($selectKat) or die (mysql_error());
            
    $rowKat   mysql_fetch_object($queryKat);
            
    $katId    $rowKat->artikel_id;
            
    $name1    $rowKat->kat1;
            
    $name2    $rowKat->kat2;
            
    $name3    $rowKat->kat3;
            
    $name4    $rowKat->kat4;
            
    $kat      '';

            if(
    $name4)
            
    $kat .= 'Start >'$name4 ;
            else
            
    $kat .= 'Start ';
            if(
    $name3)
            
    $kat .= '> '.$name3 ;
            if (
    $name2)
            
    $kat .= '> '.$name2;
            if(
    $name1)
            
    $kat .= '> '.$name1;

            
    $deeplink       '...'.$shop_id;
            
    $imaglink       '...'.$image;
            
    $lieferkosten '...';

            
    $entry = array($artikelNr' '' '' ',$kurzname$sql->cleanDesc($desc), $kat$preis' ' $deeplink$imaglink$liefer.$day$lieferkosten' ');
            
    $csv_body[$i] = implode('|'$entry);
            
    fwrite($fp$csv_body[$i]);
            
    fwrite($fp"\n");

            
    $artid        '';
            
    $desc           '';
            
    $xxx            '';
            
    $aufschlag    '';
            
    $lief         '';
            
    $liefzeit     '';
            
    $shop_id      '';
            
    $kurzname     '';
            
    $name         '';
            
    $artikelNr    '';
            
    $mengeAkt     '';
            
    $image        '';
            
    $preis        '';
            
    $kat          '';
            
    $entry        '';
            
    $name1        '';
            
    $name2        '';
            
    $name3        '';
            
    $name4        '';
            
    $deeplink       '';
            
    $imaglink       '';
            
    $lieferkosten '';
            
    $entry        '';
            
    $csv_body     = array();
        }
            
    $minLimit $minLimit+100;
        
    mysql_free_result($query);
        
    mysql_free_result($queryKat);
    }
    fclose($fp);
    ?>
    bin für jeden tipp dankbar
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Pion
    Gast

    Standard AW: Datenbank zu txt =Problem=

    Ich würde sagen es ist schneller wenn man nur einmal fwrite ausführt, dafür dabei mehr reinschreibt also ein paar mal fwrite auszuführen

    Sollte aber mal getestet werden, vllt auch mal besser debuggen damit du genau siehst was am längster braucht ?

    Profiler einschalten etc... (xdebug)

    mfg

  3. #3
    BlackBox
    Gast

    Standard AW: Datenbank zu txt =Problem=

    Danke schon mal,
    meinst du damit ich könnte die Datensätze die ich benötige in einer Array speichern(was die Array ziemlich groß machen wird ._.) und am Ende des Durchgangs(Schleife) die Array in die .txt schreiben?Hört sich gefährlich an ^^

    Oder hab ich grad in Knick...

  4. #4
    Pion
    Gast

    Standard AW: Datenbank zu txt =Problem=

    Ich kann dir nur sagen das es oft, egal in welcher Sprache der Fall ist, dass Funktionsaufrufe bremsen und es so oft schneller ist wenn man große Mengen mit einem Aufruf abarbeitet als mit sehr viele kleine Aufrufe


    Der einzige wirklich gute Rat den ich dir geben kann ist das du dein Dokument durchprofilierst
    http://zierfischkaefig.de/netz-und-w...-und-webgrind/

  5. #5
    BlackBox
    Gast

    Standard AW: Datenbank zu txt =Problem=

    Hallo nochmal,
    habe das Porblem weitgehends behoben läuft aufjedenfall viel schneller und sauberer und auch um einiges Ressourcenschohnender^^
    Was mein Fehler war, ich habe total falsch gejoint >_> und einige Joints waren auch unnötig
    Fazit: Bei Joins bloß aufpassen wir rum man joint xP

    thx nochmal ^^

Ähnliche Themen

  1. Problem mit Datenbank
    Von scabinho im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 04.12.2009, 01:17
  2. Problem mit dem auslesen aus der Datenbank
    Von lippl im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 8
    Letzter Beitrag: 25.12.2008, 12:52
  3. komisches problem mit datenbank
    Von kabum im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 4
    Letzter Beitrag: 17.05.2007, 19:04
  4. Datenbank Problem
    Von Martin279 im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 10
    Letzter Beitrag: 07.05.2007, 16:10
  5. Problem mit der Datenbank
    Von Shila im Forum Webanwendungen - Webapplikationen
    Antworten: 7
    Letzter Beitrag: 19.12.2005, 22:12

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •