[linux-l] Was mich an WebApplikationen immer und?immerwiderAnkotzt...
Rocco Rutte
pdmef at gmx.net
Mo Aug 18 11:08:46 CEST 2008
Hi,
* Olaf Radicke wrote:
>Ich habe es schon versucht mit dem Pseudo-Code an zu deuten: Das ich mehr
>Daten im Arbeitsspeicher habe, als ich tatsächlich nutze und das ich nicht
>mehr Schleifendurchläufe habe, als unbedingt nötig....
Was wirklich im Speicher ist sollte man den Query Logs entnehmen. Die
ORM Tools, die ich kenne, sind lazy, d.h. sie holen nur, was man
wirklich braucht und nur dann, wenn sich der DB Zugriff nicht mehr
vermeiden lässt. Zum Beispiel:
List foo = orm.get(foo=bar or ...)
Dann ist foo nicht eine Liste mit Objekten sondern ein Objekt, dass
weiss wie es SQL ausführen muss. Wenn man:
int x = foo.size()
macht, wird nicht die Länge der Liste der Objekte im Speicher ermittelt
sondern eine query ala 'SELECT COUNT(*) FROM (...) T' ausgeführt. Wenn
man:
Object a = foo.get(3)
macht wird:
'SELECT ... FROM foo LIMIT 1 OFFSET 3'
ausgeführt, etc. Wenn man darauf einen Pager implementiert:
pager = Pager(foo, page_number=3, items_per_page=50)
kann man:
'SELECT ... FROM foo LIMIT 50 OFFSET 150'
ausführen und erhält alle Objekte, so dass man loopen kann.
Als einzige Kritik an ORM bleibt also nur, dass möglicherweise mehr
Queries ausgeführt werden als wenn man die Queries per Hand schreibt.
Ich kann mir momentan nur falsche Benutzung von ORM als Grund
vorstellen, dass man mehr im Speicher hat als man möchte bzw. mehr
Loops.
MfG, Rocco
Mehr Informationen über die Mailingliste linux-l