Ich habe ein Problem mit dem Importieren von Daten aus CSV in die Datenbank.So importieren BigData mit Symfony
Vorerst sieht mein Code wie folgt aus:
public function run()
{
$this->startProgressBar();
foreach ($this->elements as $element) {
$this->insertCity($element);
$this->advanceProgressBar();
}
$this->finishProgressBar();
}
/**
* @param array $item
*/
private function insertCity(array $item = [])
{
$repository = $this->getDoctrine()->getRepository(Commune::class);
$commune = $repository->findOneByTerc($this->getTerc($item));
$district = $item['uid'] == $item['district_uid'] ? null : $item['district_uid'];
$city = new City();
$city->setName($item['name']);
$city->setCommuneId($commune->getId());
$city->setDistrictUid($district);
$city->setType($item['city_type']);
$city->setUid($item['uid']);
$this->getDoctrine()->getManager()->persist($city);
$this->getDoctrine()->getManager()->flush();
}
Jede Zeile Ich mache auswählen und einfügen. Meine CSV-Datei hat 100k Zeilen. In 1 Stunde, dieser Code importiert nur 10k Zeilen :(
Alle Ideen, wie kann ich es optimieren
Filip
Machen Sie so wenig wie möglich innerhalb einer Schleife, holen Sie das Repository und den Entity Manager nicht innerhalb der Schleife und spülen Sie nicht jedes Mal. – JimL
Ich würde nur eine einfache dql-Abfrage verwenden und ausführen. Sie sollten die Abfrage außerhalb der Schleife vorbereiten und innerhalb der Schleife ausführen. Und spülen Sie die Änderungen nicht zu oft – JimL
@JimL was meinst du mit der Vorbereitung der Abfrage außerhalb der Schleife? Können Sie ein Beispiel geben? –