Prodej projektů Duchod.cz, Duchodova-Reforma.cz a doména MojeFinance.cz
Zobrazují se odpovědi 1 až 11 z 11

Prochazeni CSV files

  1. Zdravim,
    momentalne resim vlastni naseptavac vsech adres v CR, zdrojove data mam ale protoze je jich hodne (6258 csv souboru - rozdelene podle obci), musim kazdy soubor projit a nacpat do databaze, ovsem mam problem s rychlosti a potreboval bych script zrychlit. Bohuzel nejsem expert na rychlost :) proto bych rad dohledal pomoc zde.

    kod:
    PHP kód:
    $dir = new DirectoryIterator("data/CSV/");
    foreach (
    $dir as $fileinfo) {
        if (!
    $fileinfo->isDot()) {
            
    $file++;
            
    ini_set('auto_detect_line_endings',TRUE);
            
    $handle fopen('data/CSV/'.$fileinfo->getFilename(),'r');
            
    $i 0;

            echo 
    "<br>Processing file: ".$fileinfo->getFilename()."<br> Rows: ";

            while ( (
    $data fgetcsv($handle) ) !== FALSE ) {
                
    $i++;
                
    $records++;
                if(
    $i == 1) continue;

                
    $tmp iconv('Windows-1250''UTF-8'current($data));
                
    $tmp explode(";",$tmp);

                echo 
    $i." ";

                
    $insertData = array(
                    
    'id' => (string)$tmp[$transformattionArray['id']],
                    
    'nazevObce' => (string)$tmp[$transformattionArray['nazevObce']],
                    
    'nazevCasti' => (string)$tmp[$transformattionArray['nazevCasti']],
                    
    'ulice' => (string)$tmp[$transformattionArray['ulice']],
                    
    'domovniCislo' => (string)$tmp[$transformattionArray['domovniCislo']],
                    
    'orientacniCislo' => (string)$tmp[$transformattionArray['orientacniCislo']],
                    
    'psc' => (string)$tmp[$transformattionArray['psc']]
                );
                \
    dibi::query("INSERT INTO adresy %v"$insertData,"ON DUPLICATE KEY UPDATE %a"$insertData);
                
    // if($i == 30) die();
            
    }
            
    unlink('data/CSV/'.$fileinfo->getFilename());
        }


    Díky

  2. Co se právě děje na Webtrhu?
    RomanKudrnaFreelancer poptává: Hledám Joomla specialistu
    Patrik Neumeister poptává: Obsahový redesign Wordpress webu
    Vladimir Hynek poptává: Webove stránky pro apartmán
  3. Kód:
    mysqlimport --ignore-lines=1 \
                --fields-terminated-by=, \
                --local -u root \
                -p Database \
                 TableName.csv
    Jinak shodit indexy pri importu

  4. Citace Původně odeslal vdusek Zobrazit příspěvek
    Kód:
    mysqlimport --ignore-lines=1 \
                --fields-terminated-by=, \
                --local -u root \
                -p Database \
                 TableName.csv
    Jinak shodit indexy pri importu
    100% nechapu ale bude se jednat o shell prikazy, ja bych to potreboval pres PHP a automatizovat aktualizaci pomoci CRONu. Mozna jsem to spatne pochopil tak me prosim opravte zda to je reference k nejakym funkcim ktere lze provest pres PHP, díky.

  5. Tak pred importem shodit indexy na DB a nahodit je az po importu. Indexovani po kazdem insertu zdrzuje

  6. Předpokládám, že načtení adres do DB je jednorázový úkon, takže bych to resil raději v externím databázovém programu a pak náhrat databázi na server. Budete to mít jednodušší a rychlejší.
    Čerpám z vlastni zkusenosti:-)

  7. Citace Původně odeslal Ribinus Zobrazit příspěvek
    Předpokládám, že načtení adres do DB je jednorázový úkon, takže bych to resil raději v externím databázovém programu a pak náhrat databázi na server. Budete to mít jednodušší a rychlejší.
    Čerpám z vlastni zkusenosti:-)
    Chtěl bych to mít řešené takto z důvodu aktualizace adres přes cron jednou mesicne. momentalne jsem ve fazi kdy 6258 souboru dam do jednoho velkeho souboru a ten dam do databaze pres prikaz LOAD DATA LOCAL INFILE, s tou funkci zatim trochu bojuju jeste.

  8. Vypinat kvuli tomu indexy je zbytecny, dibi umi jednoduse multiple insert, tak si to nejdriv nasyp do pole a potom to vloz vsechno najednou.

  9. Citace Původně odeslal Petyk Zobrazit příspěvek
    Vypinat kvuli tomu indexy je zbytecny, dibi umi jednoduse multiple insert, tak si to nejdriv nasyp do pole a potom to vloz vsechno najednou.
    To je pravda, osobne nevim co je lepsi, prochazet a sypat to po souborech nebo si to nacist vse a nasypat zaroven? Celkove se jedna o necelych 3mil zaznamu.

  10. jo, tak na 3M zaznamu to asi bude fakt spis na to nacteni ze souboru, ktere podle dokumentace mysql je asi 20x rychlejsi ;)

    ---------- Příspěvek doplněn 24.04.2018 v 21:10 ----------

    MySQL :: MySQL 5.6 Reference Manual :: 8.2.4.1 Optimizing INSERT Statements

  11. Citace Původně odeslal Petyk Zobrazit příspěvek
    jo, tak na 3M zaznamu to asi bude fakt spis na to nacteni ze souboru, ktere podle dokumentace mysql je asi 20x rychlejsi ;)

    ---------- Příspěvek doplněn 24.04.2018 v 21:10 ----------

    MySQL :: MySQL 5.6 Reference Manual :: 8.2.4.1 Optimizing INSERT Statements
    To vim, bohuzel na hostingu je ta funkce v mysql zakazana, takze potrebuji jeste nejake rozumne alternativni reseni

  12. Plaťe si VPS. Nevím, co máte za hosting, ale pokud budete dělat takové věci, tak Vám hosting nebude brzo stačit.

Hostujeme u Server powered by TELE3