Userdaten in Hashmap speichern - Servlet

biker

Mitglied
Hallo Zusammen,

ich sitze an folgendem Problem: ich möchte mehr Performance aus meiner Web Anwendung herausholen und möchte daher Daten Cachen.

Ein wichtiger Bereich wären die Userdaten. Die Datenbank ist so aufgebaut, dass für jeden User verschiedene Daten geladen werden. Wenn die Daten aus der Datenbank kommen, kann zu einem User entweder keine, eine oder mehrere Zeilen vorhanden sein. Meine Idee ist es, dass ich die Daten in einer HashMap speicher um die Datenbankzugriffe zu minimieren.

Meine Fragen:

1. Ist das eine gute herangehensweise?
2. Wie kann ich die Keys so erstellen, dass jeder Key eindeutig ist? Wenn für einen User mehrere Zeilen vorhanden sind, muss das erkennbar sein.

Kann man den Key als String in der Form ("USER" + "_" + userId + "_" + column + "_" + row) erstelle

Dann wäre ein Key z.B. USER_123_Spalte0_1

Was denkt ihr?

Das wichtigste ist die Performance. RAM ist genug vorhanden.

Vielen Dank

biker
 
das kann viel bewirken, kann keinen Unterschied machen, kann Probleme bereiten wenn du Userdaten auch änderst,
viele Richtungen sind möglich, pauschal nicht zu sagen,

und eine Hashmap ist allgemein eine dafür geeignete Struktur, ja,

was column + row in deinem Key zu bedeuten haben ist für Außenstehende nicht zu erkennen, falls auch das deine Frage ist,
man kann die Meinung vertreten dass sich eher anbietet, nur zur UserId einen großen Eintrag zu speichern,
darin dann geordnete Listen/ Arrays für Rows/ Columns/ was auch immer,
wenn die normalen User-Daten gemeint sind, vielleicht ein normales User-Objekt?!

nicht erfreulich klingt der Gedanke, die Datenbank mit Tabellenstruktur irgendwie nachzubauen
 
1. Ist das eine gute herangehensweise?
Kann man machen, wenn es einen nicht stört, dass man in einer laufenden Session mit Daten im Cache arbeitet, die möglicherweise veraltet sind, weil man Änderungen in der Datenbank nicht mitbekommt.

2. Wie kann ich die Keys so erstellen, dass jeder Key eindeutig ist? Wenn für einen User mehrere Zeilen vorhanden sind, muss das erkennbar sein.
Mehrere Zeilen zu einer einzigen Entität in einer Tabelle zu haben ist jedenfalls äußerst unüblich. Hier scheint mir was am Datenmodell faul zu sein. Möglicherweise müsstest Du hier normalisieren. Sprich, zu jedem User genau einen Datensatz in einer User-Tabelle halten, die Daten, die je User mehrfach vorkommen in eine andere Tabelle und dann Fremdschlüssel auf die User-Tabelle.
 
1. Ist das eine gute herangehensweise?
Kann man machen, wenn es einen nicht stört, dass man in einer laufenden Session mit Daten im Cache arbeitet, die möglicherweise veraltet sind, weil man Änderungen in der Datenbank nicht mitbekommt.

2. Wie kann ich die Keys so erstellen, dass jeder Key eindeutig ist? Wenn für einen User mehrere Zeilen vorhanden sind, muss das erkennbar sein.
Mehrere Zeilen zu einer einzigen Entität in einer Tabelle zu haben ist jedenfalls äußerst unüblich. Hier scheint mir was am Datenmodell faul zu sein. Möglicherweise müsstest Du hier normalisieren. Sprich, zu jedem User genau einen Datensatz in einer User-Tabelle halten, die Daten, die je User mehrfach vorkommen in eine andere Tabelle und dann Fremdschlüssel auf die User-Tabelle.

Es sind nicht die Userdaten, die in mehreren Zeilen in der Datenbank stehen, sondern Daten, die mit dem User verknüpft sind. Z.B. so wie onlineshops das mit Ihren Empfehlungen "Zu diesem Artikel passen auch noch die Artikel X, Y und Z" machen.
 
der Vorteil von Java gegenüber Datenbanken ist doch gerade die Objektorientierung gegenüber simplen Columns + Rows,
erstelle eine Klasse User, falls noch nicht vorhanden, darin eine Liste der empfohlenen Artikel um bei dem Beispiel zu bleiben, usw.

hängt natürlich von deinen Daten und deiner Verarbeitung ab,
aber mit dem Cache hast du nicht nur die Möglichkeit, DB-Datenzugriffe zu vermeiden,
du kannst auch gleich allgemeine Schritte wie das Sammeln der Informationen in Listen, "Aufbereitung der Daten", durchführen und später sparen
 
man kann die Meinung vertreten dass sich eher anbietet, nur zur UserId einen großen Eintrag zu speichern,
darin dann geordnete Listen/ Arrays für Rows/ Columns/ was auch immer,
wenn die normalen User-Daten gemeint sind, vielleicht ein normales User-Objekt?!

nicht erfreulich klingt der Gedanke, die Datenbank mit Tabellenstruktur irgendwie nachzubauen

Angenommen ich nehme für jeden Eintrag in der Map die UserId als Key. Wie speicher ich dann am besten die Objekte, wenn aus der Datenbank mehrere Zeilen pro User enthalten sind?
 
am besten auf geeignete Weise

ohne Infos gibts auch keine neuen Infos,
ohne fachliche Strukturierung kannst du nur Listen oder noch mehr Maps verwenden,
muss dann nicht viel besser sein als deine Lösung
 

Zurück
Oben