Re: Effizient ueber große Mengen von Objekten iterieren

Michael Hierweck <[email protected]>
Newsgroups gmane.comp.web.zope.german
Message-ID <[email protected]>
Hallo Andreas,

Andreas Jung wrote:
> Am 20.11.09 10:22, schrieb Michael Hierweck:
>> Hallo allerseits,
>>
>> kann man in Plone 3.3.x effizienter über viele Objekte iterieren, als so:
>>
>>
>> brains = catalog.searchResults([...])
>> for brain in brains:
>> 	object = brain.getObject()
>> 	[...]
>>   
> 
> Vielleicht hilft ein abschliessendes
> 
> object._p_deactivate()

Eigentlich sollte das nicht nötig sein, oder?

Mal kurz das Fazit des heutigen Tages:

Ich wundere mich gerade ein wenig, es scheint aber so, aus würden meine
geladenen Objekt in der Tat nicht (vollständig) von der Garbage
Collection entfernt. Ich kann nämlich den Cache für die ZODB Connections
(ich habe zwei eine für / und eine für den Catalog) minimieren. Dann
wird es langsamer (klar), aber der RAM-Bedarf ändert sich kaum.
Vollaufende Caches möchte daher eigentlich ausschließen.

Bemerkenswert finde ich aber:

Wenn ich alle 1.000 Objekte transaction.abort() aufrufe, liegt der
RAM-Bedarf nur noch bei ca. 40%. Ich interpretiere das so, dass meine
Leseoperationen offenbar irgendwie im Bereich Transaktionsmanagement RAM
kosten, und zwar etwa 1 GB bei 100.000 iterierten Content-Objekten. (Die
relatedItems sind ca. 0-2 pro Objekt aus 5.000 möglichen Zielobjekten.)
Rechnerisch sind das also rund 10KB "geleakter Memory" pro
angesprochenem Content-Objekt.

Die Leseoperationen sind aber wirklich nur Aufrufe simpler "Getter" von
ATFields bzw. das Verfolgen von relatedItems und das Aufrufen von
"Getter" der Zielobjekte. Der Output wird dann direkt rausgeschrieben
(stdout, CSV-File oder SQL-DB macht keinen Unterschied).

Beste Grüße

Michael



_______________________________________________
zope mailing list
[email protected]
https://mail.dzug.org/mailman/listinfo/zope
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.