Ist diese Script irgendwie Optimierbar?

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

  • Ist diese Script irgendwie Optimierbar?

    Diese Hallo Leute,

    hab eine funktion die einen verzeichnisbaum durchgeht und alle files mit denen aus einer datenbank vergleicht...

    die mysql datenbank hat einen index auf das 'path' feld um das ganze zu beschleunigen.. (mit index: ~20 sekunden ausführungszeit bei 7000 files, ohne index ~ 4 minuten)

    nun ists aber so, dass 20 sekunden irgendwie saulangsam sind

    hätte einer von euch ne idee wie das hier zu optimieren wäre:
    PHP-Code:
    function rekursiv_mediafiles($root)
        {
        global 
    $inc_db_prefetch;
        global 
    $return;
        global 
    $inc_basedir;


        
    chdir($root);
        
    $folder opendir($root);

        while (
    $verz readdir($folder))
            {
            if (
    is_dir($verz) && $verz != ".." && $verz != ".")
                {
                
    $path$root;
                
    rekursiv_mediafiles("$root/$verz");
                  
    chdir($root);
                 }

              elseif(!
    is_dir($verz))
                  {
                  if (
    substr($verz02)!="t_")
                    {
                    
    $element str_replace("$inc_basedir","",$root);
                    
    $query_exsist "SELECT path FROM ".$inc_db_prefetch."_media WHERE path = '$element/$verz'";

                    
    $query_exsist mysql_query($query_exsist);

                    if (
    mysql_num_rows($query_exsist)=='0')
                        {


                        
    #$path= $root;
                        
    $path str_replace("$inc_basedir","",$root);
                        
    $query"SELECT id FROM ".$inc_db_prefetch_categories." WHERE path LIKE '$path'";
                        
    $query_parent_id mysql_query($query);

                        if (
    $query_parent_id)
                            {
                            
    $parent_id mysql_result($query_parent_id,0,id);
                            }
                            else
                            {
                            
    $parent_id="0";
                            }


                        
    $element str_replace("$inc_basedir","",$path);
                        
    $query_insert "INSERT INTO ".$inc_db_prefetch."_media (id,cat_id,path,caption) VALUES ('','$parent_id','$element/$verz','')";

                        
    $query_insert=mysql_query($query_insert);
                        
    $return .= "<b>$element/$verz</b> - added<br>";
                        }
                    else
                        {
                        
    $path$root;
                        
    $query"SELECT id FROM ".$inc_db_prefetch."_categories WHERE path = '$path'";
                        
    $query_parent_id mysql_query($query);

                        if (
    mysql_num_rows($query_parent_id)>0)
                            {
                            
    $parent_id mysql_result($query_parent_id,0,id);
                            }
                        else {
                            
    $parent_id="0";
                            }


                        
    $element str_replace("$inc_basedir","",$path);
                        
    $query_update mysql_query("UPDATE $inc_db_prefetch_media SET cat_id = '$parent_id' WHERE path = '$element/$verz'");
                        
    $return .= "<b>$element/$verz</b> - updated<br>";
                        }



                    }
                }
            }

        
    closedir($folder);
        return 
    $return;

        } 
    Vielen Dank für Eure Hilfe

    grüße,
    daniel
    -------------------------
    padauz es ist kaputt

  • #2
    hi

    vielleicht ein kleiner tipp kann aber nicht sagen ob geht.

    du selectierst ja in der while - schleife. ich glaube es kostet viel zeit sooft die datenbank anzufragen.

    versuche doch alles vor der whileschleife zu selectieren dann in ein arry zu schreiben und dann jeweils ueber das array abzufragen.
    z.B. (Pseudocode

    $query = mysql_query("SELECT path FROM ".$inc_db_prefetch."_media");
    while ($row=mysql_fetch_object($query))
    {
    path_array.add($row->path);
    }

    ...

    und dann mit über die arrays abtesten

    wenn das alles auch nicht sehr genau ist - vielleicht ist es eine idee

    gruesse von

    pau

    Kommentar

    Lädt...
    X