Generischer O/R-Mapper - Performance-Hacks

1. Einleitung

Der O/R-Mapper ist grundsätzlich auf maximale Performance ausgelegt, jedoch kann dieser durch ungünstige Implementierung der darüberliegenden Schichten oder durch nicht optimale Definition der Tabellen negativ beeinflusst werden. Das vorliegende Kapitel zeigt Themen auf, bei denen ein manueller Eingriff in die Mapperschicht oder die Verwendung der Mapper-Schicht positive Performance-Effekte hat.


2. Performance-Hacks

2.1. Häufige Abfrage über Attribute

Werden Abfragen häufig über Attribute eines Objekts definiert bzw. eingeschränkt, so ist es ratsam, einen Index auf die verwendete Spalte oder die verwendeten Spalten zu legen.


2.2. Erzeugen der Mapperschicht

Stellt es für die Applikation kein Problem dar, sollte der O/R-Mapper im SESSIONSINGLETON-Modus erstellt werden. Das bietet den Vorteil, dass die Mapping- und Relation-Table innerhalb des Mappers nur einmal innerhalb einer Session erstellt werden. Diese Maßnahme spart ~10% Performance bei jedem weiteren Aufruf der Applikation. Die folgenden Code-Zeilen zeigen, wie der Mapper SESSIONSINGLETON erzeugt werden kann:
PHP-Code
// Factory im relevanten Service-Mode erstellen $ormFact = &$this->getServiceObject( 'modules::genericormapper::data', 'GenericORMapperFactory', APFService::SERVICE_TYPE_SESSION_SINGLETON // <-- Indiziert Erstellung im Modus SESSIONSINGLETON ); // Mapper von der Factory beziehen $orm = &$ormFact->getGenericORMapper( {CONFIG_NAMESPACE}, {CONFIG_NAME_AFFIX}, {CONNECTION_NAME}[, $logStatements = false] );

2.3. JOIN-Optimierung

Um bei Abfragen über mehrere Objektbeziehungen hinweg mehr Performance zu erreichen, wird dazu geraten, die JOIN-Anweisungen selbst zu formulieren, da dort die Reihenfolge der JOINs und deren Einschränkungseigenschaften die Ausführungszeiten erheblich beeinflussen kann. Hierbei ist es jedoch wichtig, dass die am stärksten einschränkenden JOINs zuerst platziert werden.


Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.