Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Problema con Database

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    40

    Problema con Database

    Ciao a tutti,

    Sperando di non aver postato nella sezione errata scrivo perchè non riesco a risolvere un problema che mi stà facendo impazzire.

    Ho la necessità di caricare in un database Mysql svariati milioni di record: questi record sono suddivisi fra circa 100 file ognuno dei quali ne contiene in un hnumero variabile fra poche migliaia a qualche milione.

    Per effettuare tale operazione ho deciso di ricorrere a un piccolo programmino scritto in PHP.

    I record all'interno di questi file sono in formato CSV, per cui le operazioni che devo svolgere sono semplici: leggere i record uno ad uno, bonificarne alcuni campi e costruire un'istruzione tipo "insert into..." da passare alla funzione mysql_query() per l'inserimento all'interno del database.

    Lo script sembra funzionare, infatti per ogni file riesce a caricare circa 17.000 record dopodichè l'elaborazione del file si interrompe con un errore del tipo "MySQL server has gone away".

    Il risultato quindi è che mi perdo ni fase di caricamento circa 2 milioni di record.

    Avete idea del perchè esce un errore del genere? Per completezza vi riporto il codice del programma:
    codice:
    <pre>
    <?php
    set_time_limit(14400);
    
    $aree = array ("AA","AC","AB","AD","AE","AH","AJ","AK","AL","AM","AN","EQ","AP","AO","FA","AQ",
                   "ER","AR","AV","AW","AS","AT","AZ","BA","BB","BC","BG","BE","BD","BJ","BF","BH",
                   "BK","BN","BL","BM","EP","BV","BZ","BP","BR","BS","AF","BQ","BT","BW","AG","CA",
                   "BO","CC","CB","CD","ES","CZ","CG","CE","CF","ET","CJ","CL","CM","CK","CH","CN",
                   "CO","CP","DB","CV","CQ","CW","CS","CR","CT","DA","DE","DF","FB","EZ","EW","DG",
                   "DJ","DK","DM","DH","DN","DO","DC","EV","DD","DS","DT","DV","EF","EG","DZ","EH",
                   "EA","EJ","DR","DQ","DP","DW","ED","EB","EC","EE","EK","EL","EO","EM","DL","EN");
            
    for( $i=0 ; $i<count($aree) ; $i++)
    {
        if( file_exists( "D:/FILE_BCE_$aree[$i]_2010.TXT" ) )
        {
            $con = mysql_connect( "localhost" , "root" , "");
            $db = mysql_select_db( "test" , $con );            
            $file = fopen("D:/FILE_BCE_$aree[$i]_2010.TXT","r");
            while(!feof($file))
            {
                $rec = fgetcsv( $file , 100000 , ";" );
                $sql= "insert into bce values('','$aree[$i]',";
                for( $ii=0 ; $ii<19 ; $ii++ )
                {
                    $rec[$ii] = str_ireplace( "'" , "" , $rec[$ii] );
                    $rec[$ii] = str_ireplace( '"' , '' , $rec[$ii] );
                    $sql = $sql . "'" . $rec[$ii] . "',";
                }
                $sql = $sql . "'" . $rec[19] . "');";
                if( !mysql_query($sql) )
                    die( mysql_error() );
            }
            fclose($file);
            mysql_close( $con );
        }
    }
    ?>
    </pre>

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    40
    risolto....

  3. #3
    puoi dirmi come?
    ci voleva troppo tempo a caricare tutto e il db sclerava o era il timeout del php?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    40
    Originariamente inviato da sir daniel
    puoi dirmi come?
    ci voleva troppo tempo a caricare tutto e il db sclerava o era il timeout del php?
    Ho sostituito la funzione fgetcsv() con explode() e questo non sò perchè mi ha permesso di caricare l'intero DB senza errori di sorta (probabilmente la funzione explode è molto più rapida della fgetcsv..)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.