Die objektorientierte Programmierung ist in der heutigen Softwareentwicklung nicht mehr wegzudenken. Auf Sprachelemente wie Kapselung, Polymorphie und Vererbung kann in modernem Softwaredesign nur schwer verzichtet werden. Ebenso sind relationale Datenbanken noch immer die erste Wahl für die persistente Speicherung von Daten. Sie skalieren für große Datenmengen, sind sicher, verwalten Transaktionen zwischen Benutzern und besitzen den größten Marktanteil von allen Datenbanken.
Die Sammlung der Probleme die auftreten, wenn man objektorientierte Datenstrukturen in einer relationalen Datenbank speichern möchte, werden als Object-relational Impedance Mismatch bezeichnet.
In dieser Arbeit werden die entstehenden Probleme, die durch den Unterschied zwischen den beiden Paradigmen entstehen, erläutert und bisher gefundene Lösungen für den Impedance Mismatch vorgestellt. Es wird gezeigt, warum es keine einzige perfekte Lösung für den IM geben kann, weshalb die bisher in der Industrie entwickelten Persistenzmechanismen in vielen individuellen Bereichen Anwendung finden.
Die Strategien werden kritisch betrachtet und eigene Verbesserungen und Konzepte ausgearbeitet, die eine Basis für ein weiteres Framework für Webapplikationen legen. Die Effizienz dieser verbesserten Konzepte wird durch einen Vergleich mit ähnlichen Produkten untersucht.
Die Theorie des Object-relational Impedance Mismatch, Die Kernprobleme, Lösungen: Ersetzen der Datenbank, Object-relational Mapper
Object-relational Mapping: Speichern des Zustandes eines Objektes, Speichern von Klassenhierarchien, Horizontales Mapping, Vertikales Mapping, Filter-Mapping, Generelles Mapping, Speichern von Beziehungen zwischen Objekten, Laden und Marshalling von Objekten, Vertiefung: Object Loading
Frameworks: Hibernate und Vererbung, Abfragesprachen, Beziehungen zwischen Objekten, Object Loading, Abbildung von Klassen und Attributen
Lösungsansätze am Beispiel-Framework PSCORM: Konzepte und Implementierung: Dynamischer Code, Metainformationen, Cache, Datenbankabstraktion, Abbildung von Klassen und Attributen, Abbildung von Vererbung, Beziehungen zwischen Objekten, Abfragesprache, Object Loading
Inhaltsverzeichnis
1. Einfuhrung
1.1 Der Aufbau dieser Arbeit
2. Die Kernprobleme
3. Lösungen
3.1 Ersetzen der Datenbank
3.2 Object-relational Mapper
4. Object-relational Mapping
4.1 Speichern des Zustandes eines Objektes
4.2 Speichern von Klassenhierarchien
4.2.1 Horizontales Mapping
4.2.2 Vertikales Mapping
4.2.3 Filter-Mapping
4.2.4 Generelles Mapping
4.3 Speichern von Beziehungen zwischen Objekten
4.4 Laden und Marshalling von Objekten
4.5 Vertiefung: Object Loading
5. Frameworks
5.1 Übersicht
5.2 Hibernate und Vererbung
5.3 Abfragesprachen
5.4 Beziehungen zwischen Objekten
5.5 Object Loading
5.6 Abbildung von Klassen und Attributen
5.7 Zusammenfassung
6. Fazit
6.1 Gibt es eine perfekte Lösung?
7. Einfuhrung
7.1 Aufbau dieses Teils
7.2 Besonderheiten von PHP
8. Konzepte und Implementierung
8.1 Dynamischer Code
8.2 Metainformationen
8.3 Cache
8.4 Datenbankabstraktion
8.5 Abbildung von Klassen und Attributen
8.6 Abbildung von Vererbung
8.7 Beziehungen zwischen Objekten
8.8 Abfragesprache
8.9 Object Loading
9. Evaluation
9.1 Konfiguration
9.2 Test 1
9.3 Test 2
9.4 Ergebnisse
10. Zusammenfassung
Zielsetzung & Themen
Die Arbeit analysiert die Problematik des Object-relational Impedance Mismatch, bei dem objektorientierte Programmierparadigmen auf relationale Datenmodelle treffen. Ziel ist es, die entstehenden Probleme zu erläutern, bestehende Lösungsansätze zu bewerten und ein eigenes Framework in PHP zur effizienten Überbrückung dieser Diskrepanz zu entwickeln und zu evaluieren.
- Analyse der Kernprobleme der objekt-relationalen Abbildung
- Vergleich gängiger Framework-Lösungen und Persistenzmechanismen
- Entwicklung eines hybriden PHP-Frameworks (PSCORM)
- Untersuchung von Optimierungsmöglichkeiten beim Object Loading
- Performanzvergleich verschiedener Implementierungen
Auszug aus dem Buch
4.5 Vertiefung: Object Loading
Bevor ich im nächsten Kapitel auf verschiedene konkrete Implementierungen eingehen werde, möchte ich zunächst ein Thema noch weiter vertiefen: Das Laden von Objekten scheint nicht oft Inhalt von wissenschaftlichen Arbeiten zu sein, obwohl dort meiner Meinung nach die besten Optimierungen bezüglich Performanz möglich sind. Beginnt man eine ORM-Lösung naiv zu implementieren könnte man schnell zu folgender Struktur kommen:
Jede Klasse, die persistent gemacht werden soll leitet eine Basisklasse ab, in der die Persistenzmechanismen als Methoden zur Verfügung stehen (save(), get(), delete()). Es gibt eine Methode get() mit dem Parameter OID, welche den verknüpften Datensatz aus der Datenbank lädt (Verbindung herstellen, SQL absetzen, Daten auslesen, init() aufrufen). Es gibt eine weitere Methode init(), die die Werte aus dem Ergebnis der Abfrage von get() in die Attribute des Objektes überführt. Die Methode init() ordnet also den Attributen eine Zeile des Abfrageergebnisses zu.
Diese Lösung scheint erst einmal sehr simpel und funktional zu sein. Die Klassen, die persistent gemacht werden sollen (Entity-Klassen), müssen die Basisklasse nur ableiten und init() so überschreiben, dass die speziellen Attribute der Klasse mit Daten gefüllt werden, sobald get() aufgerufen wird.
Zusammenfassung der Kapitel
Einfuhrung: Definiert den Object-relational Impedance Mismatch und erläutert die Notwendigkeit, objektorientierte Modelle mit relationalen Datenbanken zu verbinden.
Die Kernprobleme: Identifiziert die Herausforderungen beim Speichern von Klassenstrukturen, Objektzuständen, Beziehungen, Vererbungshierarchien und der effizienten Abfrage.
Lösungen: Untersucht das Ersetzen relationaler Datenbanken durch ODBMS sowie das Konzept des Object-relational Mappings als klassische Softwarelösung.
Object-relational Mapping: Detaillierte Darstellung von Strategien zur Abbildung von Objekten, Hierarchien, Beziehungen sowie Techniken zum Laden und Marshalling.
Frameworks: Gibt einen Überblick über bestehende Standards und Frameworks wie Hibernate, TopLink, Doctrine und Kohana und bewertet deren Flexibilität.
Fazit: Reflektiert über die Abwägung zwischen Abstraktion und Performanz bei der Lösungsfindung für den Impedance Mismatch.
Einfuhrung: Stellt das selbstentwickelte Framework PSCORM vor und beleuchtet spezifische Anforderungen an die Webentwicklung mit PHP.
Konzepte und Implementierung: Erläutert die Architektur von PSCORM, insbesondere den Einsatz von dynamischer Code-Generierung, Caching und Datenbankabstraktion.
Evaluation: Vergleicht die Performanz von PSCORM mit bestehenden Frameworks in Benchmarks zum Laden von Objekten.
Zusammenfassung: Fasst die Erkenntnisse über die Komplexität und die Tradeoffs beim Entwurf von ORM-Lösungen abschließend zusammen.
Schlüsselwörter
Object-relational Impedance Mismatch, Object-relational Mapping, ORM, Persistenz, Objektorientierte Programmierung, Relationals Datenbankmodell, Performance-Optimierung, Lazy Loading, Prefetching, Object-Cache, PHP-Framework, PSCORM, Hibernate, Doctrine, Softwarearchitektur
Häufig gestellte Fragen
Worum geht es in dieser Arbeit grundsätzlich?
Die Diplomarbeit befasst sich mit dem sogenannten Object-relational Impedance Mismatch, also der Unverträglichkeit zwischen objektorientierten Programmierparadigmen und relationalen Datenbankschemas in der modernen Softwareentwicklung.
Was sind die zentralen Themenfelder?
Zentrale Themen sind die Analyse der auftretenden Diskrepanzen bei der Datenhaltung, der Vergleich verschiedener Mapping-Strategien sowie die Entwicklung und Evaluation performanter Persistenzlösungen für PHP-Applikationen.
Was ist das primäre Ziel oder die Forschungsfrage?
Das Ziel ist es, die Probleme beim Mapping zwischen Objekten und Tabellen zu verstehen und Strategien zu entwickeln, die eine hohe Performanz trotz der notwendigen Abstraktionsebenen ermöglichen.
Welche wissenschaftliche Methode wird verwendet?
Die Arbeit kombiniert eine fundierte theoretische Analyse des Impedance Mismatch mit der praktischen Konzeption und Implementierung eines Frameworks (PSCORM), dessen Effizienz abschließend in einer Benchmarking-Studie geprüft wird.
Was wird im Hauptteil behandelt?
Der Hauptteil umfasst die detaillierte Vorstellung von Mapping-Techniken für Klassenhierarchien und Beziehungen sowie eine Evaluierung von Frameworks wie Hibernate, TopLink und Doctrine, gefolgt von der Implementierung von PSCORM.
Welche Schlüsselwörter charakterisieren die Arbeit?
Die wichtigsten Begriffe sind Object-relational Impedance Mismatch, Mapping, Performanz, Lazy Loading, Prefetching und persistente Datenspeicherung.
Warum spielt PHP in der Arbeit eine besondere Rolle?
Da PHP als Skriptsprache bei jedem Request initialisiert wird, sind klassische, speicherintensive ORM-Ansätze weniger performant; die Arbeit zeigt, wie durch dynamische Code-Generierung in PSCORM ein effizienterer Weg beschritten werden kann.
Was ist der PSCORM-Ansatz zur Performance-Optimierung?
PSCORM nutzt eine zweistufige Ebenen-Architektur, bei der zur "Entwicklungszeit" Code generiert wird, der zur "Laufzeit" die unnötigen Overhead-Kosten für Interpretation und Abstraktion minimiert.
Warum ist das "Object Loading" für die Performanz kritisch?
Das Laden von Objekten über viele kleine Einzelabfragen (Roundtrips) ist oft der Flaschenhals; die Arbeit demonstriert, wie Prefetching und intelligentes Caching die Anzahl der Datenbankzugriffe drastisch reduzieren können.
- Arbeit zitieren
- Philipp Scheit (Autor:in), 2010, Analyse und Lösungen für den Object-relational Impedance-Mismatch, München, GRIN Verlag, https://www.hausarbeiten.de/document/230958