2008-09-18 9 views
19

Niemals zuvor einen Cache wie diesen verwendet. Das Problem ist, dass ich 500.000 + Datensätze aus einer Datenbank laden und einige schnell auswählen/filtern möchte.OSCache vs. EHCache

Ich denke über die Verwendung eines Cache, und vorläufig gefunden EHCache und OSCache, Meinungen?

+7

Warum denken Sie, dass die Verwendung des Cache schneller ist als das Auswählen/Filtern in der Datenbank? So machen sie das. :) –

Antwort

19

Sie sind beide ziemlich solide Projekte. Wenn Sie ziemlich grundlegende Caching-Anforderungen haben, wird einer von ihnen wahrscheinlich genauso gut funktionieren wie der andere.

Sie können auch die Filterung in einer Datenbankabfrage in Betracht ziehen, wenn es machbar ist. Wenn Sie eine angepasste Abfrage verwenden, die eine kleinere Ergebnismenge zurückgibt, erzielen Sie oft eine bessere Leistung als 500.000 Zeilen in den Arbeitsspeicher zu laden und anschließend zu filtern.

0

Ich verwende hauptsächlich EhCache, weil es der Standard-Cache-Provider für Hibernate war. Es gibt eine Liste von Caching-Lösungen unter Java-Source.net.

Ich hatte mal einen Link, der die wichtigsten Caching-Lösungen verglichen hat. Wenn ich es finde, werde ich diese Antwort aktualisieren.

5

Es hängt irgendwie von Ihren Bedürfnissen ab. Wenn Sie die Arbeit im Arbeitsspeicher auf einem Rechner ausführen, funktioniert Echcache einwandfrei, vorausgesetzt, Sie haben genug Arbeitsspeicher oder eine Festplatte, die schnell genug ist, so dass der Überlauf kein Paging/Thrashing verursacht. Wenn Sie feststellen, dass Sie Skalierbarkeit erreichen müssen, auch wenn diese bestimmte Operation viel passiert, dann werden Sie wahrscheinlich Clustering betreiben wollen. JGroups/TreeCache von JBoss unterstützen dies ebenso wie EHcache (glaube ich), und ich weiß, dass es definitiv funktioniert, wenn Sie Ehcache mit Terrakotta verwenden, was eine sehr glatte Integration ist. Diese Antwort spricht nicht direkt auf die Vorteile von EHcache und OSCache an, daher hier die Antwort: EHcache scheint die größte Trägheit zu haben (früher war es die bekannte, aktive Entwicklung, einschließlich eines neuen Cache-Servers) und OSCache schien (zumindest an einem Punkt), um etwas mehr Features zu haben, aber ich denke, dass mit den oben erwähnten Optionen diese Vorteile aufgehoben/ersetzt werden. Ach, die andere Sache, die ich vergessen habe zu erwähnen, ist, dass die Transaktionalität der Daten wichtig ist und Ihre Anforderungen die Liste der gültigen Auswahlmöglichkeiten verfeinern werden.

2

In jedem Fall empfehle ich, sie mit Federmodulen zu verwenden. Der Cache kann für die Anwendung transparent sein, und Cache-Implementierungen sind leicht austauschbar. Zusätzlich zu OSCache und EHCache unterstützen Spring Modules auch Gigaspaces und JBoss-Cache.

In Bezug auf Vergleiche .... OSCache ist einfacher EHCache hat mehr Konfigurationsoptionen

Sie sind beide absolut solide, sowohl Unterstützung Spiegelung Cache, beide arbeiten mit Terrakotta, unterstützen beide im Speicher zu konfigurieren und zu Zwischenspeicherung

3

Andere Antworten diskutieren Pro/Contra für Caches; aber ich frage mich, ob Sie überhaupt von Cache profitieren. Es ist nicht ganz klar, was genau Sie hier vorhaben und warum ein Cache nützlich wäre: Wenn Sie den Datensatz zu Ihrer Verfügung haben, greifen Sie einfach darauf zu. Cache hilft nur, Dinge zwischen ansonsten unabhängigen Aufgaben wiederzuverwenden. Wenn Sie das tun, kann Caching helfen. Wenn es jedoch eine große Aufgabe ist, die ihren Datensatz mit sich führt, würde Caching keinen Wert hinzufügen.

52

Gemessen an ihrer releases page, OSCache wurde seit 2007 nicht aktiv gepflegt. Das ist keine gute Sache. EhCache hingegen wird ständig weiterentwickelt. Schon aus diesem Grund würde ich EhCache wählen.

Edit November 2013: OSCache, wie der Rest von OpenSymphony, ist tot.

+5

+1 Dies ist ein sehr großer Faktor bei der Entscheidung, welche Open-Source-Software zu verwenden ist – Richard

+10

http://www.opensymphony.com/ OpenSymphony hat jetzt öffentlich bekannt gegeben, dass sie tot sind. – Pace

2

Ich habe oscache für mehrere Feder-Projekte mit Feder-Modulen verwendet, die die aop-basierte Konfiguration verwenden.

Kürzlich habe ich versucht, oscache + spring-Module auf einem Spring 3.x-Projekt zu verwenden, fand jedoch, dass die Annotation von federmodulbasierten Caches nicht unterstützt wird (selbst bei der Verzweigung).

ich vor kurzem über dieses Projekt fand heraus -

http://code.google.com/p/ehcache-spring-annotations/

Welche Feder 3.x mit deklarative Annotation-basierte Caching ehcache unterstützt die.

5

Wählen Sie einen Cache, der JSR 107 entspricht, was Ihre Arbeit erleichtert, wenn Sie von einer Implementierung zur anderen migrieren möchten. Um auf die Frage spezifisch zu sein, gehen Sie für Ehcache, die populärer ist und weit verbreitete Java-Caching-Lösung. Wir verwenden Ehcache ausgiebig und es funktioniert für uns.

0

OSCache ist so ziemlich tot, wie es vor ein paar Jahren aufgegeben wurde. Werfen Sie einen Blick auf Cacheonix, es wurde aktiv entwickelt und wir haben gerade v.2.2.2 mit Unterstützung für das Caching in der Web Tier veröffentlicht. Ich bin ein Committer, also können Sie mich erreichen, wenn Sie irgendwelche Fragen haben.