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?
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?
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.
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
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. –
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.
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 ...
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/.
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.
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.
MapDb è un'alternativa a Berkley con una licenza Apache 2.
Leggero? mvn copy-dependencies raccoglie circa 14 MB per mapdb: 3.0.5 – weberjn
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();
Chronicle-Map è una valida alternativa.
java.util.Map
implementazione
@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
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
OK @Roman ... cosa ** DO ** intendi per "// sarcasam" nel tuo commento qui sotto ?? –