Yii Framework Forum: Importeren Van Csv File - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Importeren Van Csv File Rate Topic: -----

#1 User is offline   Erik V 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 17-March 13

Posted 26 August 2013 - 01:03 PM

Hallo,

Ik ben ongeveer een 3/4 jaar Yii developer en al ruim 10 jaar PHP.
Het volgende is het probleem:
Ik wil een csv bestand importeren. Het bestand bevat 1400 regels en dit moet verdeeld worden over diverse tabellen (models).
De import neemt nu ongeveer 8 minuten in beslag, wat natuurlijk veel te lang is. Mijn ervaring met php is ook dat dit veel sneller moet kunnen.

De omgeving is een Linux Ubuntu (recentste versie), 4GB intern, PHP 5.3, Apache icm FastCGI module

Na het goed bekijken van de log file (CWebLogRoute) zag ik dat een sql command ongeveer 0,06 seconden duurt. Aangezien voor 1 regel ongeveer 6 sql commands nodig zijn, komt dit uit op 0,36 seconden per regel x 1400 = 504 seconden --> 8 min

Opzich allemaal logisch de berekening. Ik heb al gebruik gemaakt van het createCommand->execute (DAO) ipv de gebruikelijke "save" van het model.

Ik hoor graag of mensen nog goede tips en tricks voor mij hebben
0

#2 User is offline   EdoFre 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 46
  • Joined: 24-February 11
  • Location:Groningen, The Netherlands

Posted 27 August 2013 - 06:39 AM

Misschien is het beter om de queries intern bij te houden en aan het einde van het script in 1 of 2 grote queries uit te voeren. Als ik grote bestanden moet importeren en verwerken is dat meestal mijn uitweg.
Moi,
0

#3 User is offline   Sergiy_Voitovuch 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 16-April 13
  • Location:Ukraine

Posted 08 April 2014 - 01:22 PM

Hi. You must create console command and do it for crone.
My code example see here.
class UpdateGoodsCommand extends CConsoleCommand {

    public function run($args)
    {
        $task=Yii::app()->db
            ->createCommand()
            ->select('*')
            ->from('{{cron_buh}}')
            ->where('status = 1')
            ->queryAll();
        if(!empty($task)){
            Yii::app()->db
                ->createCommand()
                ->update("{{cron_buh}}",array('status'=>0),'id = :id',array(':id'=>$task[0]['id']));
            //work with file
            $dir = Yii::app()->basePath.'/../files';
            $files = CFileHelper::findFiles($dir, array('level'=>0,'fileTypes'=>array('csv')));
            ini_set('max_execution_time', 0);
            $arrayItems = array();
            $array_article = array();
            foreach ($files as $file) {
                if($file == $dir.'/exporttov.csv'){
                    $csvData = file_get_contents($file);
                    $lines = explode("\n", $csvData);
                    foreach ($lines as $line) {
                        $arrayItems[] = str_getcsv($line,';');
                    }
                    foreach($arrayItems as $item){
                        $array_article[]=$item[0];
                        Yii::app()->db
                            ->createCommand()
                            ->update('{{good}}',
                                array('price_opt'=>$item[9],'price'=>$item[8]),
                                'article = :article',
                                array(':article'=>$item[0])
                            );
                    }
                    ShopGood::model()->updateAll(array('status'=>ShopGood::STATUS_DRAFT));
                    $criteria = new CDbCriteria;
                    $criteria->addInCondition( "id" , $array_article) ; // $array_id = array ( 1, 2, 3, 4 );
                    ShopGood::model()->updateAll(array('status'=>ShopGood::STATUS_PUBLISHED), $criteria);
                    $read_file = fopen($file,'r');
                    fclose($read_file);
                    unlink($file);
                }
            }
        }
    }

} 

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users