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:

  1. Zend_Db_Table wird ohne Metadata Cache verwendet
  2. Zend_Db_Table wird mit APC als Metadata Cache verwendet
  3. die SQL Abfragen werden direkt in den Controller geschrieben, dabei wird Zend_Db_Adapter_Mysqli direkt verwendet
  4. 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?

2 Antworten für “Zend_Db_Table erzeugt 25% Overhead sagt Andrei”

  1. Chris sagt:

    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

  2. Mike Rötgers sagt:

    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.

Hinterlasse eine Antwort