2009-03-31 16 views
5

Gibt es In-Memory/Caching-Lösungen für Java, die eine Form der Abfrage bestimmter Attribute von Objekten im Cache ermöglichen?Caching-Lösungen und Abfragen

Ich weiß, dass dies etwas ist, für das eine vollständige Datenbank verwendet wird, aber ich möchte in der Lage sein, die Geschwindigkeit/Leistung eines Caches mit der Abfragefähigkeit einer Datenbank zu haben.

+0

Wie unterscheidet sich das, was Sie verlangen, von einer einfachen Karte? Sie können auf einer Map rudimentäre Abfragen durchführen, die auf einen Schlüssel beschränkt sind, der einen Wert zurückgibt. –

+0

Um Pauls Frage zu erweitern, sind Ihre Abfragen einfache 'Feld = Wert' Abfragen, oder benötigen Sie mehr Logik, wie 'Feld> Wert' oder 'Feld1 = Wert1 UND NICHT Feld2 = Wert2'? – joev

+0

Je mehr Logik, desto besser. (Feld> x, y systemoutprintln

Antwort

3

Heutzutage sollte die Antwort auf Infinispan, dem Nachfolger von JBoss Cache, aktualisiert werden und die Suchtechnologie stark verbessert haben.

+0

Ja, Infinispan verwendet Apache lucene und Hibernate sucht nach zwischengespeicherten Objekten. –

2

Zuerst kam mir HSQLDB in den Sinn, aber das ist eine relationale In-Memory-Datenbank anstelle einer Objektdatenbank. Vielleicht wollen Sie sich this list ansehen. Es gibt einige Objektdatenbanken, von denen eine Ihren Bedürfnissen entspricht.

1

Betrachten Sie db4o bei ziemlich leichten Java-Objekt-Datenbank. Sie können auch die Daten mit regulären Java-Code-Abfrage:

List students = database.query(new Predicate(){ 
     public boolean match(Student student){ 
     return student.getAge() < 20 
      && student.getGrade().equals(gradeA);}}) 

(Von this article).

4

JBoss Cache hat Suchfunktionen. Es heißt JBossCacheSearchable. Von der Website:

Dies ist das Integrationspaket zwischen JBoss Cache und Suche Hibernate.

Ziel ist es, Suchfunktionen zu JBoss Cache hinzufügen. Wir erreichen dies durch mit Hibernate Search, um Benutzer Objekte zu indizieren, wie sie in den Cache hinzugefügt und modifiziert werden. Der Cache wird durch abgefragt, indem eine gültige Apache Lucene Abfrage übergeben wird, die dann verwendet wird, um die Indizes zu durchsuchen und übereinstimmende Objekte aus dem Cache abzurufen.

Haupt JBoss Cache Seite: http://www.jboss.org/jbosscache/

JBossCacheSearch: http://www.jboss.org/community/docs/DOC-10286

0

Eine weitere Idee ist Lucene und eine RAMDirectory Implementierung von Directory Index zu verwenden, was Sie in Ihren Cache setzen. Auf diese Weise können Sie alle Suchanfragenfunktionen von Lucene abfragen.

In Ihrem Fall werden Sie wahrscheinlich die relevanten Eigenschaften Ihrer Objekte wie sie sind (ohne einen Analyzer zu verwenden) indizieren und mit einem booleschen Gleichheitsoperator abfragen.

Lucene ist sehr leicht, performant, Thread-sicher und der Speicherverbrauch ist gering.

3
+1

Ok, seltsam. Jemand hat mir eine E-Mail geschickt und mir gesagt, dass ich diesen Link für Pojocache bereitstellen soll: http://www.samaxes.com/2009/03/17/jboss-pojocache-configuration/? Ich verstehe nicht, warum sie diesen Kommentar hier nicht selbst machen würden. –

0

Sie können diese Bibliothek prüfen wollen:

http://casperdatasets.googlecode.com

dies ist ein Daten-Set-Technologie. Es unterstützt Tabellendaten (entweder aus einer Datenbank oder in Code erstellt), und Sie können Abfragen und Filter für das Dataset (und die Sortierung) erstellen, alles im Arbeitsspeicher. es ist schnell und einfach zu bedienen. Vor allem können Sie Abfragen für jede Spalte oder Attribut in der Datenmenge durchführen.

Verwandte Themen