In meinem Symfony2-Befehl führe ich ein Skript aus, das Hunderttausende URLs (als String) in ein Dokument einfügt.
Hier sind die Grundstrukturen von 2 Dokumente, die ich verwende. Bevor das Programm ausgeführt wird, befinden sich bereits Tausende von ParentDocuments in der Mongodb, aber keine ChildDocuments:
$dm = $this->getContainer()->get('doctrine_mongodb.odm.document_manager');
$parentDocuments = $dm->repository('My:Bundle:ParentDocument')->findAll();
while ($parentDocument = $parentDocuments->getNext()) {
//Returns an array of hundreds of thousands urls
$urls = $this->somehowFetchUrlsRelatedToTheParentDocument($parentDocument);
foreach ($urls as $url) {
$subDocument = new SubDocument();
$subDocument->setUrl($url);
$subDocument->setParentDocument($parentDocument);
$dm->persist($subDocument);
}
$dm->flush();
}
Wenn ich diesen einfachen Befehl ausführe, ist die Schreibgeschwindigkeit zunächst unglaublich hoch. Beim Einfügen von Millionen von Zeilen werden die Schreibgeschwindigkeiten jedoch deutlich langsamer. Nur 1 Schreibvorgang pro Sekunde, nachdem der Befehl 10 Minuten lang ausgeführt wurde, was den Code äußerst ineffektiv macht.
Mein erster Versuch, dieses Problem zu beheben, bestand darin, das Dokument zu löschen Manager direkt nach dem Leeren mit $dm->clear();
Dies bedeutete jedoch, dass der Dokumentmanager den Überblick über das aktuelle ParentDocument verlor. Meine Lösung war also diese:
Das hat das Problem gelöst. Die Schreibgeschwindigkeiten waren während der gesamten Ausführung des Programms konstant hoch und Millionen von Zeilen konnten ohne allmähliche Verzögerung eingefügt werden.
Dies fühlt sich jedoch wie eine schlechte Praxis an und ein schneller Lösungs-Hack. Was ist die beste Vorgehensweise zum Einfügen von Millionen Zeilen in Symfony2 mithilfe des Dokumentmanagers, ohne dass die Lese-/Schreibgeschwindigkeit langsamer wird?
In meinem Symfony2-Befehl führe ich ein Skript aus, das Hunderttausende URLs (als String) in ein Dokument einfügt.
Hier sind die Grundstrukturen von 2 Dokumente, die ich verwende. Bevor das Programm ausgeführt wird, befinden sich bereits Tausende von ParentDocuments in der Mongodb, aber keine ChildDocuments:
$dm = $this->getContainer()->get('doctrine_mongodb.odm.document_manager'); $parentDocuments = $dm->repository('My:Bundle:ParentDocument')->findAll(); while ($parentDocument = $parentDocuments->getNext()) { //Returns an array of hundreds of thousands urls $urls = $this->somehowFetchUrlsRelatedToTheParentDocument($parentDocument); foreach ($urls as $url) { $subDocument = new SubDocument(); $subDocument->setUrl($url); $subDocument->setParentDocument($parentDocument); $dm->persist($subDocument); } $dm->flush(); }
Wenn ich diesen einfachen Befehl ausführe, ist die Schreibgeschwindigkeit zunächst unglaublich hoch. Beim Einfügen von Millionen von Zeilen werden die Schreibgeschwindigkeiten jedoch deutlich langsamer. Nur 1 Schreibvorgang pro Sekunde, nachdem der Befehl 10 Minuten lang ausgeführt wurde, was den Code äußerst ineffektiv macht.
Mein erster Versuch, dieses Problem zu beheben, bestand darin, das Dokument zu löschen Manager direkt nach dem Leeren mit $dm->clear(); Dies bedeutete jedoch, dass der Dokumentmanager den Überblick über das aktuelle ParentDocument verlor. Meine Lösung war also diese:
Das hat das Problem gelöst. Die Schreibgeschwindigkeiten waren während der gesamten Ausführung des Programms konstant hoch und Millionen von Zeilen konnten ohne allmähliche Verzögerung eingefügt werden.
Dies fühlt sich jedoch wie eine schlechte Praxis an und ein schneller Lösungs-Hack. Was ist die beste Vorgehensweise zum Einfügen von Millionen Zeilen in Symfony2 mithilfe des Dokumentmanagers, ohne dass die Lese-/Schreibgeschwindigkeit langsamer wird?
In meiner Kotlin Swing-Anwendung habe ich eine MutableList, zu der und aus der der Benutzer Einträge hinzufügen und daraus entfernen soll. Ich habe mich entschieden, JList mit zwei JButtons zu...
Ich verwende derzeit die folgende Methode und den Unit -Test für die Methode. Ich denke usw. ... Alle Hilfe wird geschätzt. public static ArrayList executeSelect(
Connection conn, Statement stmt,...
Ich arbeite mit iOS -Push -Benachrichtigungen (APNs) und muss meinen Server mit dem Push -Benachrichtigungs -Token des Geräts aktualisieren, wenn es ursprünglich registriert ist oder sich ändert....