2009-03-31 6 views
5

Esistono in-memory/caching soluzioni per java che consentono una ricerca per attributi specifici di oggetti nella cache?Soluzioni di memorizzazione nella cache e query

Mi rendo conto che si tratta di un database completo, ma voglio essere in grado di avere la velocità/prestazioni di una cache con la capacità di query di un database.

+0

Come si differenzia ciò che chiedi da una semplice mappa? Puoi eseguire query rudimentali su una mappa, limitato a una chiave che restituisce un valore. –

+0

Per estendere la domanda di Paolo, le query sono semplici query 'campo = valore' o hai bisogno di più logica, come 'campo> valore' o 'campo1 = valore1 AND NOT campo2 = valore2'? – joev

+0

Più logica è, meglio è. (campo> x, y systemoutprintln

risposta

3

Al giorno d'oggi la risposta deve essere aggiornata a Infinispan, il successore di JBoss Cache e con una tecnologia di ricerca molto migliorata.

+0

Sì, Infinispan fa uso di Apache lucene e Hibernate cerca la ricerca in oggetti memorizzati nella cache. –

2

Inizialmente, mi è venuto in mente HSQLDB, ma si tratta di un database relazionale in memoria anziché di un database di oggetti. Potrebbe voler dare un'occhiata a this list. Ci sono alcuni database di oggetti lì, uno dei quali potrebbe soddisfare le tue esigenze.

1

Vedere db4o su un database di oggetti java piuttosto leggero. È anche possibile interrogare i dati utilizzando il codice Java regolare:

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

(da this article).

4

JBoss Cache ha funzionalità di ricerca. Si chiama JBossCacheSearchable. Dal sito:

Questo è il pacchetto di integrazione tra il JBoss Cache e Hibernate ricerca.

L'obiettivo è aggiungere funzionalità di ricerca a JBoss Cache. Otteniamo questo tramite utilizzando Hibernate Search per indicizzare gli oggetti utente man mano che vengono aggiunti alla cache e modificati. La cache viene interrogata da passando una query Apache Lucene valida , che viene quindi utilizzata per cercare tra gli indici e recuperare gli oggetti corrispondenti dalla dalla cache.

pagina principale JBoss Cache: http://www.jboss.org/jbosscache/

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

0

Un'altra idea è quella di utilizzare Lucene e un'implementazione RAMDirectory di Directory per indicizzare quello che mettete nel vostro nascondiglio. In questo modo, puoi eseguire query utilizzando tutte le funzioni di query del motore di ricerca fornite da Lucene.

Nel tuo caso, probabilmente indicizzerai le proprietà rilevanti dei tuoi oggetti così come sono (senza usare un Analizzatore) e interrogerai usando un operatore di uguaglianza booleana.

Lucene è molto leggero, performante, thread-safe e il consumo di memoria è basso.

3
+1

Ok, strano. Qualcuno mi ha mandato un'email e mi ha detto di fornire questo link per pojocache: http://www.samaxes.com/2009/03/17/jboss-pojocache-configuration/? Non vedo perché non si limiterebbero a fare quel commento da soli. –

0

Si potrebbe voler controllare questa libreria:

http://casperdatasets.googlecode.com

Questa è una tecnologia set di dati. Supporta i dati tabulari (da un database o costruito nel codice), e quindi puoi costruire query e filtri sul dataset (e ordinarli), tutti in memoria. è veloce e facile da usare. PIÙ IMPORTANTE, puoi eseguire query su QUALSIASI colonna o attributo sul set di dati.