2012-04-10 6 views
0

Ich arbeite an einem Projekt, wo ich Dateien analysieren muss (wahrscheinlich wirklich große Dateien) und jede Zeichenfolge in einer anderen Entität speichern. Das Paket wird sich mit vielen Dateitypen (CSV, XML, JSON, usw.) befassen. Ich werde einen Parser für jeden dieser Typen erstellen, dieDer beste Weg, um viele Daten in einem Objekt persistent zu machen

$em2 = $this->getDoctrine() 
     ->getEntityManager(); 

    foreach ($Parser as $key => $value) { 

     $str_or[] = new StringOrigin(); 
     $str_or[$key]->setSTORString($value); 
     /.. 
     $em2->persist($str_or[$key]); 
    } 

$em2->flush(); 

$ Paser hier ein Array von Strings zurückgibt, ist das Array von Zeichenfolgen aus der Datei analysiert. StringOrigin ist die Entität. Wie viele Daten könnten mit dem Entity Manager umgehen? Mache ich das richtig? Wenn nicht, würde bach processing damit besser umgehen? Kann ich auch nur einen INSERT machen, ohne DQL zu benutzen?

Antwort

0

Der Entity Manager von Doctrine ist nicht wirklich auf eine große Anzahl von Objekten ausgelegt. Nach meiner Erfahrung sind Tausende von Datensätzen in Ordnung, aber Sie beginnen, Grenzen zu überschreiten, wenn Sie sich in Zehntausende bewegen. Natürlich hängt das von der Komplexität Ihrer Entitäten ab.

Werfen Sie einen Blick auf Doctrine's Datenbankzugriffsschicht (DBAL). Grundsätzlich:

$connection = $entityManager->getConnection(); 

Gibt Ihnen ein dünn verpacktes PDO-Objekt, das direkt mit der Datenbank kommuniziert. Bereiten Sie eine INSERT-Anweisung vor und rufen Sie sie dann mit anderen Parametern auf. Lassen Sie mich so zehntausende Datensätze in einer Anfrage bearbeiten. Ich musste nicht weiter gehen.

Und prüfen Sie, ob Sie Ihre Parser testen, ohne Datenbankinteraktionen durchzuführen. Es ist leicht, die Speichergrenzen von PHP zu treffen, wenn Sie nicht vorsichtig sind.

+0

Vielen Dank für Ihre Antwort. Ich muss mehr Tests mit meinem Parser machen. Wäre es nicht schlecht Prepared SQL-Anweisungen zu verwenden? – Wissem

Verwandte Themen