Sto tentando di inserire (in un database mySQL) dati da un file CSV "grande" (3Mo/37000 righe/7 colonne) utilizzando gli strumenti dati doctrine.Symfony: dispositivo dati doctrine: come gestire un file csv di grandi dimensioni?
Il processo è molto lento e in questo momento non potevo riuscire (potrebbe essere che ho dovuto aspettare un po 'di più).
Suppongo che gli infissi di dati di dottrina non siano destinati a gestire una tale quantità di dati? Forse la soluzione dovrebbe essere quella di importare direttamente il mio csv nel database?
Qualche idea su come procedere?
Ecco il codice:
<?php
namespace FBN\GuideBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use FBN\GuideBundle\Entity\CoordinatesFRCity as CoordFRCity;
class CoordinatesFRCity extends AbstractFixture implements OrderedFixtureInterface
{
public function load(ObjectManager $manager)
{
$csv = fopen(dirname(__FILE__).'/Resources/Coordinates/CoordinatesFRCity.csv', 'r');
$i = 0;
while (!feof($csv)) {
$line = fgetcsv($csv);
$coordinatesfrcity[$i] = new CoordFRCity();
$coordinatesfrcity[$i]->setAreaPre2016($line[0]);
$coordinatesfrcity[$i]->setAreaPost2016($line[1]);
$coordinatesfrcity[$i]->setDeptNum($line[2]);
$coordinatesfrcity[$i]->setDeptName($line[3]);
$coordinatesfrcity[$i]->setdistrict($line[4]);
$coordinatesfrcity[$i]->setpostCode($line[5]);
$coordinatesfrcity[$i]->setCity($line[6]);
$manager->persist($coordinatesfrcity[$i]);
$this->addReference('coordinatesfrcity-'.$i, $coordinatesfrcity[$i]);
$i = $i + 1;
}
fclose($csv);
$manager->flush();
}
public function getOrder()
{
return 1;
}
}
Grazie. Avevo provato a lavare ogni inserto ma era una frequenza troppo importante, suppongo. Proverò la tua proposta. Scusa ma cos'è il log SQL? – Cruz
Doctrine viene fornito con un sistema di registrazione che conserva le tracce delle query SQL eseguite. In questo contesto, non ne avrai bisogno e sarà un costo inutile della memoria. – Terenoth
Ok capisco cos'è la registrazione SQL. E hai ragione, questo tavolo proviene da un altro pezzo di codice e non è necessario qui. – Cruz