Hallo,
ich habe folgende Problemstellung:
Ich benötige Daten aus einer Datenbank und dies sogar mehrfach schnell hintereinander,
da es keinen Sinn macht alles vorher im Speicher zu laden habe ich mir ein kleinen Cache geschrieben.
Dieser speichert in einer
einmal abgefragte Werte (wir gehen davon aus, dass der Speicher dafür ausreicht, bzw von Zeit zu Zeit die HashMap aufgeräumt wird(*) und die Werte in der Datenbank sich nicht ändern, bzw den Cache benachrichtigen).
DValue und DKey sind eigene Klassen. DValue repräsentiert die Daten aus der Datenbank.
DKey beinhaltet den Schlüssel die den Datensatz eindeutig identifizieren.
Es funktioniert auch alles wunderbar,
ich sehe nur ein Problem, was mich ein wenig stört.
Jedes mal, wenn ich die "get" Methode meines Cache aufrufe, muss ich ein neues DKey Objekt erzeugen,
sei es nur
oder
.
Diese Schlüssel wieder in einem Pool zu speichern (um die Erzeugen zu umgehen) führt zu dem ursprünglichen Problem, dass man für einen zusammengesetzten Schlüssel wieder einen neuen String (wieder ein neues Objekt) erzeugen muss und er Aufwand Teilinformationen aus dem Schlüssel zu erhalten ziemlich groß ist (split auf einem String ist ja nicht gerade zeitsparend).
Gibt es ein schönes Pattern dafür, oder eine Datenstruktur die ich nicht kenne?
###
*zum aufräumen: Auf Wunsch kann man den Schlüssel einen timestamp mitgeben, der bei
und
nicht berücksichtigt wird, über dem man anschließend "alte" Werte entfernen kann (da muss ich auch noch mal schauen welcher lock Mechanismus der schnellste ist, da HashMap ja nicht synchronized ist)
ich habe folgende Problemstellung:
Ich benötige Daten aus einer Datenbank und dies sogar mehrfach schnell hintereinander,
da es keinen Sinn macht alles vorher im Speicher zu laden habe ich mir ein kleinen Cache geschrieben.
Dieser speichert in einer
Code:
HashMap<DKey, DValue>
DValue und DKey sind eigene Klassen. DValue repräsentiert die Daten aus der Datenbank.
DKey beinhaltet den Schlüssel die den Datensatz eindeutig identifizieren.
Es funktioniert auch alles wunderbar,
ich sehe nur ein Problem, was mich ein wenig stört.
Jedes mal, wenn ich die "get" Methode meines Cache aufrufe, muss ich ein neues DKey Objekt erzeugen,
sei es nur
Code:
new DIntKey(1)
Code:
new DSpecialKey(1, "ich mag Stings nicht", 1.0f)
Diese Schlüssel wieder in einem Pool zu speichern (um die Erzeugen zu umgehen) führt zu dem ursprünglichen Problem, dass man für einen zusammengesetzten Schlüssel wieder einen neuen String (wieder ein neues Objekt) erzeugen muss und er Aufwand Teilinformationen aus dem Schlüssel zu erhalten ziemlich groß ist (split auf einem String ist ja nicht gerade zeitsparend).
Gibt es ein schönes Pattern dafür, oder eine Datenstruktur die ich nicht kenne?
###
*zum aufräumen: Auf Wunsch kann man den Schlüssel einen timestamp mitgeben, der bei
Code:
equals(Object o)
Code:
hashcode()