Ho una HashMap Java con una chiave String e un valore POJO in un'applicazione a esecuzione prolungata, e occupa una grande quantità di memoria (oltre 500mb, e questo numero è destinato a crescere - Immagino che sarà superare i 2 GB in due o tre mesi); questo è usato per memorizzare i risultati di un calcolo costoso (in genere 2-4 secondi, ma fino a 20 secondi), quindi mi piacerebbe scaricare la HashMap sul disco rigido piuttosto che sostituirlo con una [HashMap [Soft / Debole] con l'aspettativa che la ricerca esterna sarà meno costosa del ricalcolo; Mi piacerebbe anche rendere la mappa persistente in caso di arresto anomalo dell'app.
La mia unica esperienza con i database NoSql è stata con DynamoDB, ma mi piacerebbe un database freeware piuttosto che cercare di limitarmi al livello gratuito di DynamoDB.
- L'app è scritta in Java, quindi ho bisogno di un'API Java per il database
- L'app viene eseguita su una singola macchina, senza alcuna aspettativa di migrazione verso un'architettura distribuita
- Preferisco che il database sia strongmente coerente, ma la coerenza finale è accettabile
- La macchina ha un disco rigido tradizionale (non SSD)
- Le chiavi della mappa sono stringhe (lunghezza < 40), ei suoi valori sono POJO; se necessario, posso serializzare i POJO su stringhe con Jackson prima di persisterli, anche se preferirei che il database gestisca questo
- I POJO appartengono a diverse sottoclassi con una classe genitore astratta comune; tutti i campi sono nella classe genitore (le sottoclassi usano solo metodi di aggiunta / sovrascrittura, tutti i campi che aggiungono sono transitori)
- Non ci sono requisiti di sicurezza: i dati che memorizzerei non devono essere protetti da password o nulla
- I valori nel database non scadranno (mi occuperò dei valori non aggiornati nel codice dell'applicazione - se POJO.someProperty! = someOtherProperty quindi ricalcolo il POJO)