2012-12-07 2 views
5

Ich bin Teil eines Teams, das eine Java-Webanwendung erstellt, in der Benutzer nach Ergebnissen in einer relationalen Datenbank suchen und diese anschließend tabellarisch in einem Browser anzeigen. Benutzer haben dann auch die Möglichkeit, die gleiche Ergebnismenge (oder eine Teilmenge dieser Ergebnisse) in einem separaten Browserfenster anzuzeigen, beispielsweise mit Hilfe eines Charting-Tools. Mit anderen Worten, wir müssen dem Benutzer die Möglichkeit geben, zu einem späteren Zeitpunkt (bis zu einer Grenze von 24 Stunden) die gleichen Ergebnissätze zu visualisieren.Benötigen gutes Entwurfsmuster für das Zwischenspeichern von Datenbankabfrageergebnissätzen

Da Suchvorgänge auf dem System ressourcenintensiv und nur aus gutem gesunden Menschenverstand sind, möchten wir jeden Ergebnissatz sauber speichern, damit er später aus dem Arbeitsspeicher (RAM oder Datenträger) abgerufen werden kann. Wir suchen nach einem guten Ansatz für dieses Caching, wir glauben, dass andere dies bereits getan haben, und wir ziehen es vor, ein Best-Practice oder Framework zu verwenden, anstatt so etwas von Grund auf neu zu erstellen. Der Server wird viel RAM haben, aber da es Hunderte von Leuten geben kann, die das System benutzen, brauchen wir vielleicht einen Ansatz, der zuerst in RAM speichert, dann aber auch auf die Festplatte cachen kann, wenn der RAM voll wird.

Ich glaube, dass es am sinnvollsten ist, als Java-Objekte zu bestehen, aber ich bin offen für bessere Ratschläge. Wir möchten einen herstellerneutralen Ansatz, so dass wir, wenn sich das Datenbankteam später dazu entschließt, die Anbieter zu wechseln, nicht an eine proprietäre Lösung gebunden sind. Vielen Dank.

+3

ahhh Text Wand. bitte mindestens formatieren, um blutige Augen zu verhindern – thatidiotguy

+0

Sie würden bessere Ergebnisse erhalten, wenn Sie Ihre Frage formatieren und es so einfach und auf den Punkt wie möglich machen .. –

+0

Bitte bearbeiten Sie Ihren Beitrag, um es lesbarer zu machen ... –

Antwort

1

Ich habe gesehen http://www.jboss.org/infinispan/ verwendet, um genau das zu tun. Es kann im Speicher, auf der Festplatte und/oder in der Datenbank zwischengespeichert werden. Ich würde nicht sagen, dass ich es liebe (die Konfiguration ist nicht super einfach und Dokumentation fehlt etwas), aber es funktioniert sicherlich und wird aktiv gepflegt.

1

Bei der herstellerunabhängigen Vorgehensweise müssen Sie eine Abstraktionsschicht schreiben, die in Ihrer Anwendung nativ ist, und dann den Cache-Dienst hinter dieser Ebene einbinden, während die Ebene, die diese Operationen für Ihren Hauptcode verfügbar macht, gleich bleibt .

Es gibt viele Möglichkeiten zum Zwischenspeichern. Sehen Sie sich verschiedene NoSql-Lösungen an.

Die meiste Zeit wird serialisiert Sie Ihr Objekt und bleiben es zu einem Cache-Ebene.

4

Ich denke, was Sie vielleicht suchen, ist Terracotta Ehcache. Dies macht alles, was Sie erwähnt haben und mehr. Es ist ein kostenloses Produkt, das verwendet werden kann, um Dinge im Speicher zwischenzuspeichern, auf Datenträger überlaufen, maximale Cache-Größen entweder durch MB oder # von Elementen angeben und basierend auf der letzten Zugriffszeit oder der Zugriffszeit ablaufen.

+0

EhCache ist ziemlich süß. Meine Erfahrung war "nur funktioniert". –

Verwandte Themen