Kommentare zu: Große Datenmengen mit Extbase verarbeiten https://sgaul.de/2011/11/17/grose-datenmengen-mit-extbase-verarbeiten/ Neues aus den Softwareminen Thu, 13 Mar 2014 20:34:53 +0000 hourly 1 https://wordpress.org/?v=6.1.1 Von: noel https://sgaul.de/2011/11/17/grose-datenmengen-mit-extbase-verarbeiten/#comment-499 Tue, 14 Aug 2012 14:03:09 +0000 https://sgaul.de/?p=728#comment-499 Hey Alex, tönt spannend, hast Du mal eine Extension in der Du das umgesetzt hast bei der ich mir das mal im Kontext selber zu Gemüte führen kann? Vielen Dank!

]]>
Von: Sebastian Gaul https://sgaul.de/2011/11/17/grose-datenmengen-mit-extbase-verarbeiten/#comment-152 Wed, 30 Nov 2011 11:39:34 +0000 https://sgaul.de/?p=728#comment-152 Als Antwort auf Alex.

Danke dir, wieder was gelernt. Das wusste ich in der Tat noch nicht.

Okay, JS und Barrierefreiheit ist natürlich immer so eine Sache.

]]>
Von: Alex https://sgaul.de/2011/11/17/grose-datenmengen-mit-extbase-verarbeiten/#comment-151 Sun, 27 Nov 2011 16:34:47 +0000 https://sgaul.de/?p=728#comment-151 Hi Sebastian,

nachdem ich mir die Sache mit dem Iterator-Interface beim weihnachtlichen dekorieren unserer Hauses noch mal überdacht habe, ist mir noch viel besseres eingefallen.

Da Extbase wie gesagt langsam wird, wenn man viele Objekte mappt könnte man es eigentlich genauso machen wie du es gemacht hast.
Man müsste halt nur die richtigen Repository Methoden nutzen und bei jedem next() eine neue Repository abfrage starten die den jeweiligen nächsten Datensatz zurück liefert.
Da Extbase nun immer nur ein Objekt mappen muss, sollte es deutlich schneller gehen, zumindest wenn man durch wenige Objekte iteriert.

Das normale Verfahren ist ja:
1. Erst alle Objekte abfragem (Was bei vielen Objekten lange dauert)
2. Alle Objekte an View übergeben und mit Paginierungs-Widget durchlaufen.

Beim verwenden des Iterator-Interfaces würden nur soviele Objekte gemappt werden müssen, wie wirklich im View dargfestellt werden müssten.

Danke für den Ansatz, werde ich morgen gleich mal ausprobieren.

Grüße
Alex

]]>
Von: Alex https://sgaul.de/2011/11/17/grose-datenmengen-mit-extbase-verarbeiten/#comment-150 Sun, 27 Nov 2011 15:04:41 +0000 https://sgaul.de/?p=728#comment-150 Hi Sebastian,

du kannst SQL so direkt im Repository ausführen:

$query = $this->createQuery();
$sql = "SELECT * FROM .....";
$ergebnis = $query->statement($sql)->execute();

Die Statement Methode ist offziell allerdings absichtlich schlecht dokumentiert. Ist ja auch mehr eine Notlösung…

Das mit der Barrierefreiheit bezog sich auf:

Da Sortierung und Seiteneinteilung von Javascript übernommen werden …

Grüße
Alex

]]>
Von: Sebastian Gaul https://sgaul.de/2011/11/17/grose-datenmengen-mit-extbase-verarbeiten/#comment-149 Sun, 27 Nov 2011 14:01:59 +0000 https://sgaul.de/?p=728#comment-149 Als Antwort auf Alex.

Hallo Alex,

danke für deine Hinweise und für deinen Ansatz.

Ist schon richtig, mein Ansatz ist nicht sonderlich flexibel. Wie schon gesagt, es geht ja hauptsächlich um große Datensätze die einfach irgendwie ausgegeben werden sollen. Und hier wollte ich nach Möglichkeit nur ein einziges mal über alle Zeilen iterieren.

Aber inwiefern schränkt das die Barrierefreiheit ein?

Danke für den Hinweis mit dem Template bzw. Controller. Das werde ich da bei Gelegenheit noch mal ergänzen.

Mit den Datenbankfunktionen kenne ich mich bei Extbase ehrlich gesagt gar nicht aus. Wäre mir auch noch nicht aufgefallen, dass es andere Möglichkeiten gibt. Außer natürlich die in den Repositorys integrierte. Muss ich mir mal angucken, wie die das da machen.

Vielen Dank für diese Anregungen.

]]>
Von: Alex https://sgaul.de/2011/11/17/grose-datenmengen-mit-extbase-verarbeiten/#comment-148 Sun, 27 Nov 2011 13:37:15 +0000 https://sgaul.de/?p=728#comment-148 Hi Sebastian,

du hast da einen sehr interesanten Ansatz.
Ich stand letztens auch vor dem selben Problem, habe es aber etwas anders gelöst.
Der Flaschenhals bei Extbase ist zur Zeit noch der Object-Mapper. Ich hoffe das es spätestens mit dem Einsatz von Doctrine besser wird.
In meinem Fall habe ich einfach die Datenabfrage im Repository per setStatement() durchgeführt und das Ergebnis als Array zurückgegeben. Das Array kannst du dann an den View übergeben und damit machen was du willst.
Wenn man jetzt das Ergebnis paginieren will ist das auch kein Problem. Normalerweise sollte der MySQL Server ja alle Queries cachen.
In meinem Fall frage ich so ca. 8.000 Datensätze ab welche wiederrum ca. 16.000 Verknüpungen haben. Die Abfrage dauert meistens so um die 300 – 500 ms.

Deine Methode ist sicherlich besser wenn sich die Datensätze schnell ändern – wie z.b. bei Logs. In meinem Fall sind die Daten eher statisch.

Der Nachteil deiner Methode ist, dass sie nicht barrierefrei ist – und darauf muss ich achten. Außerdem würde ich nicht mehr die alten Typo3 DB Funktionen nutzen. Die musst Du später sonst eh wieder ändern.

So und zum Schluss noch etwas klugscheißen: Das Fluid Template liefert nicht die Ausgabe zurück. Das macht der Controller via return $this->view->render();

Aber ansonsten eine schöne Idee das Iterator Interface mit dem Repository zu verwenden. Vielen Dank für den Artikel.

Grüße
Alex

]]>