Zend_Db_Table erzeugt 25% Overhead sagt Andrei
Andrei Nikolov hat in seinem Blog einen Artikel über ein paar Performance-Messungen mit Zend_Db_Table veröffentlicht und kommt zu dem Schluss, dass Zend_Db_Table einen Overhead von bummelig 25% erzeugt. Insgesamt hat er vier Varianten getestet:
- Zend_Db_Table wird ohne Metadata Cache verwendet
- Zend_Db_Table wird mit APC als Metadata Cache verwendet
- die SQL Abfragen werden direkt in den Controller geschrieben, dabei wird Zend_Db_Adapter_Mysqli direkt verwendet
- die SQL Abfragen werden in Modelklassen geschrieben, dabei wird Zend_Db_Adapter_Mysqli direkt verwendet
Es ist keine große Überraschung, dass die Variante 3 die schnellste ist. Schließlich erzeugen viele ORM-Layer oder Table-Data-Gateway Implementierungen (genau, Zend_Db_Table ist nämlich zweiteres) immer einen gewissen Overhead. Liegt ja auch in der Natur der Sache.
Derzeit löse ich es momentan so, dass ich in meinen Klassen, die von Zend_Db_Table abgeleitet sind, für komplexe Abfragen immer eigene Methoden ala fetchArticlesByDestination() oder fetchUsersWithSunglasses() implementiere, welche die Abfragen dann mit Zend_Db_Select aufbauen und mit Zend_Db_Adapter_Mysqli direkt abfeuern. Die Ergebnisse werden dann mit Zend_Cache zwischen gespeichert und fertig ist die Laube.
Wie löst Ihr das Problem?


Donnerstag, 28.08.2008, um 22:53
In der Firma benutzen wir (AFAIK, bin im Hauptberuf kein coder) kein Zend_Db_Table, nur Zend_Db uns queries selbstgestrickt. Dazu massig memcache und das ganze rockt.
Ohne memcache wären wir verloren ;-)
Privat ist es eine low traffic seite, da machen die 25% nix aus…
Chris
Freitag, 29.08.2008, um 09:40
Ich mache es exakt wie du Ralf. Komplexere Abfragen werden mit zusätzlichem Methoden über Zend_Db_Select umgesetzt, alles andere läuft über Zend_Db_Table. Hat sich für mich absolut bewährt.