Recentemente ho fatto una domanda su Neo4j, che ho funzionato e che mi sembra carino. È integrabile ed è scritto in Java e non ci sono (troppo) molte dipendenze.Quale DB incorporato scritto in Java per un semplice archivio di chiavi/valori?
Tuttavia è un DB grafico e non so se è una buona idea o non usarlo come un semplice negozio di chiavi/valori.
Fondamentalmente io ho una grande mappa, che in Java sarebbe simile a questa:
Map<Integer,Map<String,String>>
Ho un paio di decine di milioni di voci nella mappa principale e ogni voce in sé contiene una mappa di proprietà/valori. La mappa "interna" è relativamente piccola: circa 20 voci.
Ho bisogno di un modo per mantenere quella mappa da in esecuzione della webapp all'altra.
Utilizzando Neo4j, ciò che ho fatto è creare un nodo per ogni ID (numero intero) e quindi inserire una proprietà per ogni voce all'interno della mappa interna. Dai miei primi test sembra funzionare ma non sono sicuro che sia un buon modo per procedere.
Quale DB integrabile, scritto in Java, utilizzeresti?
I requisiti sono:
scritto in Java
embeddable (quindi niente di troppo grande)
non SQL (*)
open source
facile per il backup (ho bisogno di essere in grado di fare copie di backup "live", mentre il server è in esecuzione)
mia terminologia può essere un po 'sbagliato troppo, quindi sentitevi liberi di aiutarmi/correggetemi . Per la mia "mappa delle mappe", la soluzione migliore sarebbe un DB coppia/valore giusto?
io sono un po 'perso come la differenza tra coppie chiave/valore DB, Documento DB, grandi tavoli, grafico DB, ecc
mi piacerebbe anche se è una buona idea di utilizzare un grafico DB come Neo4J per il mio bisogno (penso che le prestazioni non saranno un problema visto il numero relativamente basso di voci che avrò).
Ovviamente I potrebbe semplicemente mantenere la mia mappa di mappe ma non voglio reinventare nessuna ruota qui. Voglio riutilizzare un DB provato e provato ...
(*) Il motivo per cui non voglio SQL è che avrò sempre questa "mappa delle mappe" e che la mappa interna si evolverà costantemente, quindi non voglio qualcosa di troppo strutturato.
è la mappa interna altamente probabile che sia diversa in ogni voce della mappa principale, o ci sarà una notevole quantità di sovrapposizione tra le mappe interne della mappa principale? Esistono diversi percorsi che è possibile eseguire, ma in realtà dipende dalla quantità di replica referenziale all'interno della struttura. – cdeszaq
@cdeszaq: grazie per il tuo commento e aiuto ... La mappa interna deve avere lo stesso numero di proprietà e le stesse proprietà, ma il valore di ciascuna proprietà sarà leggermente diverso. Direi piuttosto un po 'di sovrapposizione, ma non credo che le prestazioni rappresenteranno una preoccupazione maggiore: sto cercando qualcosa di più comodo/piccolo/facile da fare. Pensi che Neo4j lavorerebbe qui? So che ci sono diverse opzioni: così tante che sono un po 'perso:) –
@cdeszaq: Ho dimenticato di menzionare: le proprietà della mappa interna devono "evolversi" durante la vita dell'app: verranno aggiunte nuove proprietà (e le voci vecchie, che non hanno queste nuove proprietà, devono essere impostate automaticamente su un valore predefinito quando interrogate per una proprietà inesistente). Quindi c'è sovrapposizione ma non è "strutturata" in quanto non esiste uno schema fisso (se ho la terminologia giusta). –