2010-04-04 22 views
15

Berkeley DB è probabilmente la scelta migliore, ma non è possibile utilizzarlo a causa di problemi di licenza.Alla ricerca di un archivio di valori-chiave leggero in-memory compatibile con java

Esistono alternative?

+0

@Stephen C: siete invitati a modificare e fornire una spiegazione migliore. A proposito di "rispondere sarcasticamente": mi sembra strano che l'alternativa a Berkeley DB sia HashMap. – Roman

+2

upvoting - la domanda sembra legittima, e non c'è molto sarcasmo in giro. Dato, la domanda avrebbe potuto affermare fin dall'inizio che le hashmaps non lo avrebbero tagliato. – tucuxi

+0

OK @Roman ... cosa ** DO ** intendi per "// sarcasam" nel tuo commento qui sotto ?? –

risposta

4

La tua domanda potrebbe significare una delle due cose.

Se si intende una struttura dati per la memorizzazione di coppie chiave-valore, utilizzare una delle istanze Map che sono una parte standard di JDK.

Se si è alla ricerca di un archivio di valori-chiave in memoria, suggerirei di dare un'occhiata a EHCache o anche a memcached.

+1

in memoria – Roman

+0

@cletus: hashmap non utilizza l'archivio valori-chiave in memoria? – Ashwin

3
+0

Manca la gestione delle transazioni e la possibilità di conservare alcuni dati nel disco e un'altra parte in memoria e così via .. // sarcasm – Roman

+0

Ah, capisco :) C'è stato un problema nel passato con qualcuno che voleva sviluppare cose per Android ma era necessario utilizzare una hashmap con memoria di archiviazione perché la dimensione dei suoi dati era troppo grande. Qualcosa di simile, immagino. –

0

Ci sono DBS lightweigh o embedded come HSQLDB, Derby, SQLite Ma come gli altri non capiscono il motivo per cui avete bisogno di un db per memorizzare/valori chiave ...

Perché non una mappa? È necessario mantenere la chiave/i valori per il riavvio dell'app?

Inoltre, forse non è quello che ti serve, ma con html5 sui browser aggiornati hai localStorage che ti permette di memorizzare chiavi/valori nel browser usando javascript.

1

jdbm funziona alla grande per questo genere di cose. È progettato per la memorizzazione su disco in un file di paging, fornisce il supporto di base per le transazioni (nessuna garanzia sull'isolamento, ma l'ACD è coperto). L'abbiamo utilizzato in un sistema di produzione con una distribuzione abbastanza ampia e siamo rimasti piuttosto soddisfatti delle prestazioni, della stabilità, ecc ...

1

Considerare l'utilizzo di jredis. È un client Java per Redis, un archivio di valori-chiave persistente. C'è anche un driver JDBC per questo: code.google.com/p/jdbc-redis/.

6

Si può provare Hazelcast. Basta aggiungere hazelcast.jar al classpath. E iniziare a scrivere codice

java.util.Map map = Hazelcast.getMap("myMap"); 

Otterrete una, distribuito griglia di dati in memoria, scalabile dinamicamente che svolge super veloce.

1

So che questo è un post di due anni ma recentemente mi sono occupato di Infinispan e mi piace fino ad ora. Non sono un esperto in alcun modo, ma non è stato troppo difficile per me impostare una cache distribuita con alcuni nodi e stavo tracciando alcuni dati da loro in circa un'ora.

1

MapDb è un'alternativa a Berkley con una licenza Apache 2.

  • Fornisce memoria dei valori-chiave tramite Java Mappa interfaccia
  • leggero (jar 300KB)
  • veloce e threadsafe
  • persiste modifiche sul disco se si desidera
  • Molti altri features
+0

Leggero? mvn copy-dependencies raccoglie circa 14 MB per mapdb: 3.0.5 – weberjn

0

Consiglierei di provare a Redisson.Sarai in grado di utilizzare implementazioni distribuite e scalabili Map o ConcurrentMap e altre (Set, Elenco, Coda, Blocco ...) in aggiunta al server con valore-chiave Redis ad alte prestazioni.

facile esempio:

Redisson redisson = Redisson.create(); 

ConcurrentMap<String, SomeObject> map = redisson.getMap("anyMap"); 

... 

redisson.shutdown(); 
2

Chronicle-Map è una valida alternativa.

  • puro Java, semplicemente java.util.Map implementazione
  • Memorizza i dati off-heap, opzionalmente persistito su disco tramite file mappati in memoria
  • Open source, permissiva licenza Apache 2.0
  • incredibilmente veloce, in grado di gestire milioni di aggiornamenti/query al secondo (see exact numbers)