Am 19.02.15 um 18:27 schrieb JCL - Johannes C. Laxander:
Hallo Bernd,
danke für deine Hinweise...
Was genau besagt diese Fehlermeldung? Ich vermute, es hängt
mit einer Exbase-Extension zusammen. Was könnte hier die
Ursache sein?
zu viele daten.
wenn die Konfiguration und das Datenvolumen unglücklich ist
werden riesige Datenmengen geladen, die in keinen Speicher
mehr passen.
Was sind zu viele Daten? Es sind weniger als 500 Datensätze!?
kommt sicher auf die Datensatzgröße an. ich würde aber vermuten:
eigentlich nicht.
Vorsicht bei:
+ sehr vielen Datensätzen, wenn bei extbase mal eben alle Datensätze
geladen werden nur um zb. die Anzahl festzustellen.
ansatz: andere als die std funktionen benutzen, queries
manuell aufbauen
Die Anzahl der Datensätze (count!?) wird m.E. nicht festgestellt, aber ich
überprüfe dies noch mal.
was gemacht wird ist eigentlich egal, es geht darum dass evtl. wirklich
alle Daten in den Speicher geladen werden ohen dass diese tatsächlich
benötigt werden.
+ wenn Datensätze viele Relationen haben, die evtl. auch noch alle
nachgeladen werden sollen. insbesondere bei rekursiven
Relationen könnte es zu eienr "Explosion" kommen. hier könnte
man mit LazyLoad das ganze eindämmen.
Es gibt schon ein paar Relationen, ca. 10. Was sind "viele Relationen"?
Ich versuche mal, das ganze mit LazyLoad einzudämmen...
auchhier wieder: es kommt darauf an. 10 Relationen pro Datensatz auf
andere Datensätze mit vielen Daten und ggfls weiteren Relationen und
schon sprengt es den Speicher
da das ganz im for-VH auftritt könnte es an folgender
Konstruktion liegen:
<f:for each="{records}" as="record" iteraton="iterator">
<f:if condition="{iterator.isFirst}">
:
<div>erster von {records->f:count()} Datensätzen</div>
:
</f:if>
</f:for>
bei vielen Datensätzen ist das extrem ineffizient.
for-VH wird merfach eingesetzt, auch mit iterator.isFirst, aber nicht mit
records->f:count
dies hier sollte nur ein beispiel sein. es werden alle Datensätze in den
Speicher geladen, dmait das f:for darüber iterieren kann - und dann wird
nur etwas mit dem ersten Datensatz gemacht. count() sollte hier nur ein
Beispiel sein, wo 'alle' Datensätze benötigt werden. (eigentlich wird
nur die Anzahl benötigt und ganz bestimmt nicht alle Felder aller
Datensätze - und ganz bestimmt nicht irgendwelche relationalen
Informationen, die evtl. auch noch vollständig in den Speicher geladen
werden.
beispiel:
filialen (tt_address mit erweiterung: 1:n relation zu mitarbeiter)
mitarbeiter (fe_user incl. einem Bild von ~1 MB ;-) )
jetzt wollen wir die Info der Hauptzentrale ausgeben:
<f:for filalen as="filale" iteration="iterator">
<f:if condition="{filiale.isZentrale}">
{filiale.address}
</f:if>
</f:for>
wenn jetzt alle Filialen (500?) mit allen Mitarbeitern (jeweils 100?)
und deren Bilder[1] in den Speicher geladen werden ist das schon mächtig
groß für eine einzelne Adresse
[1] mit FAL werden die Bilder nicht wirklich in den Speicher geladen
sondern nur ein FAL-record, der erheblich kleiner als das Bild ist.
bernd
--
http://www.pi-phi.de/cheatsheet.html
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german