Vorrausschauendes Laden
Optimiert wird dabei die Anzahl der Datenbankabfragen und die Idee ist, dass eine große Abfrage schneller / besser / effizienter ist als viele kleine. Im Beispiel eine Weblogs könnte eine kleine Abfrage lauten: "Gib mit den neuesten Artikel". Sollen nun die fünf neuesten Artikel dargestellt werden sind vier weitere kleine Abfragen notwendig: "Gib mit den zweit-neuesten Artikel", ... Eine größere Abfrage würde diese Aufgabe auf einmal erledigen: "Gib mir die fünf neuesten Artikel" und ist - obwohl netto die selbe Datenmenge transportiert wird - performanter und somit den kleinen Abfragen vorzuziehen. Das ist einfach.
Komplizierter wird es, wenn die Artikel-Tabelle Fremdschlüssel - wie z.B. die Benutzer-Id des Autors - enthält. Die naheliegende Lösung wäre, die große Abfrage mit einem Join auf die Benutzertabelle zu erweitern. Eine einfache und performante Lösung. Nachteil der Lösung der genau abgestimmten Datenbankabfragen ist allerdings, dass die Datenbank-Schicht etwas alles über die Ausprägung der Präsentations-Schicht wissen muss! Es ergeben sich also andere (optimierte) Datenbankabfragen, je nachdem ob der Vorname, die E-Mail-Adresse, das Avatar-Bild oder gar keine Informationen über den Autors mit dem Artikel angezeigt werden. Da diese Herangehensweise zwar zu optimale Datenbankabfragen, gleichzeitig aber auch zu super schwer wartbarem Code führt, möchte ich eine objektorientierte Lösung dieses Dilemas vorstellen: vorrausschauendes Laden,
Beim vorrausschauenden Laden gibt es keine Joins. Stattdessen merkt sich das System alle Fremdschlüssel, die von der Datenbank geladen werden. Im Beispiele enthält die Arkikeltabelle die Benutzer-Ids als Fremdschlüssel. Werden nun an anderer Stelle die Daten des Benutzers mit Id X geladen, kann das System gleich alle Benutzerdatensätze laden, die es sich vorher gemerkt hat. Das System sieht also voraus, dass alle (germerkten) Benutzerdaten gebraucht werden. Mit dieser Methode wird ein optimierter Join durch zwei einfache Abfragen ersetzt. Das ist zwar aus Sicht der Datenbank nicht optimal, kommt dem aber sehr nahe.
Der Hauptvorteil dieser Methode ist, dass dadurch ein modulare Aufbau mit großer Performance möglich wird. So entscheidet im obigen Beispiel erst die Präsentations-Schicht (die HTML-Templates) ob zu diesem Artikel der Vorname des Autors angezeigt wird und lädt diesen bei Bedarf (von der Datenbank) nach.
Dieses System hat sich in der Praxis bereits in vielen Fällen bewährt. Jetzt habe ich das vorrausschauenden Laden selbst als Komponente implementiert, so dass dieser Mechanismus noch in vielen anderen Stellen eingesetzt werden kann.
Suche
Aktuelle Artikel
- Kinder an die Macht 8. Apr. 2025 (07:51)
- Wir müssen über Geld reden... 27. Mär. 2025 (19:16)
- Ich habe zwei Stimmen 11. Feb. 2025 (19:10)
- Dumm wählt gut! 24. Jan. 2025 (09:33)
- E-Rechnungen ab diesem Jahr 14. Jan. 2025 (14:05)
- E-Mail an den Stadtrat 3. Dez. 2024 (22:43)
- Sozialarbeit lohnt sich! 21. Nov. 2024 (08:29)
- Europäisches Recht 5. Jun. 2024 (10:15)
- Unter Wert verkaufen? 18. Apr. 2024 (09:47)
- Angriff in der Nacht 25. Mär. 2024 (13:52)
- Suche Menschfreund:in 2. Nov. 2023 (08:06)
- Medienbruch ist böse 15. Mai. 2023 (08:22)
- Wir brauchen Verstärkung 27. Mär. 2023 (11:23)
- Noch eine Preissenkung 9. Feb. 2023 (08:08)
- Dresden 2023 trifft Zen 3. Jan. 2023 (15:11)