| 

.NET C# Java Javascript Exception

1
Ein großer Vorteil von JSF ist es ja, Daten sessionübergreifend vorhalten zu können.

Ich frage mich gerade, ob es grundsätzlich Sinn macht, Daten einmalig aus der DB zu ziehen und in Listen abzulegen, anstatt sie Abfrage für Abfrage aus der DB zu ziehen. Bei Änderungen würde die DB geupdated.

Dafür spricht der ersparte DB-Zugriff --> Zeitgewinn, dagegen der Speicherbedarf. Gibt es noch mehr Gründe dafür oder dagegen? Wie macht ihr das? Ich würde mich freuen, ein paar Erfahrungen mitgeteilt zu bekommen.

Grüße
Sai
07.01.2012
Sai 73 1 5
Sai 73 1 5
1 Antwort
2
Hm, kommt drauf an, aber im allgemeinen halte ich das für keine gute Idee.

Was Du vorschlägst, läuft auf einen Datenbankcache hinaus. So einen zu programmieren, ist keine leichte Aufgabe. Es lohnt sich nur für Objekte, die relativ oft gelesen und selten geschrieben werden. Die Aufgabe gehört auch nicht in den UI-Layer, dem JSF zuzurechnen ist. Es gibt außerdem genug Datenbanken, die sowas schon implementiert haben (bzw.: gibt es überhaupt noch eine gängige SQL-Datenbank, die nicht wenigstens optional cachen kann?). Und schließlich dürfte es der Skalierbarkeit Deiner Anwendung nicht gut tun, wenn Du da eine Datenstruktur einführst, die session-übergreifend aktuell und synchron gehalten werden muss.

Ausnahmen mögen gelten für kleine, überschaubare Szenarien mit einfachen Anforderungen. Aber dort dürfte es sich wiederum kaum lohnen.
07.01.2012
Matthias Hlawatsch 13,2k 4 9
Danke für die Antwort. Ich bin dennoch nicht ganz sicher - bei der Anwendung, die ich schreibe, steht Geschwindigkeit an erster Stelle. Mit dem DB-Caching werde ich mich in jedem Fall beschäftigen. Hab bei MySQL noch nichts dazu gehört bisher.
Sai 07.01.2012
Ganz kurz gegoogelt: http://dev.mysql.com/doc/refman/5.5/en/query-cache.html
Du müßtest dann darauf achten, dass Du die zu cachenden Daten immer mit der gleichen Query liest. Aber möglicherweise geht das auch noch flexibler, da kenne ich mich zu wenig aus.
Matthias Hlawatsch 07.01.2012
MySQL hat in der Tat die Möglichkeit select Statement zu cachen. Das kannst du temporär per query einschalten oder direkt in der config.

Es
XJenso 07.01.2012
Es werden aber keine Funktionen gecacht die bei jeder Anfrage neue Werte liefern. Z.B. Datums Funktionen oder random Funktion.
Das cachen funktionier Super, wir setzen das auch ein.

(Sorry sollte ein Kommentar werden bin aber auf die falsche stelle vom Display gekommen.)
XJenso 07.01.2012
Danke für eure Antworten!
Sai 08.01.2012

Stelle deine Java-Frage jetzt!