Alla ricerca di un database di valori-chiave NoSql per scaricare una Java HashMap [chiusa]

6

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)
posta Zim-Zam O'Pootertoot 01.05.2013 - 16:34
fonte

3 risposte

3

Uso spesso Apache CouchDB , accedendo tramite Ektorp . Ektorp usa la serializzazione e la de-serializzazione di Jackson JSON in modo nativo. Rende molto facile la lettura e la scrittura dei POJO. _Id di ogni documento sarebbe probabilmente la tua chiave di hash map.

Non so quale sia il tuo algoritmo, ma potresti anche trarre vantaggio dall'utilizzo di visualizzazioni riduzioni mappa di CouchDB a implementare tutto o parte dell'algoritmo. I risultati di una vista in CouchDB sono persistenti e il database gestisce l'aggiornamento dei risultati per te.

Probabilmente potresti usare anche MongoDB, ma non l'ho usato personalmente.

Inoltre, Apache Cassandra è un negozio di valore chiave basato sulla Dynamo di Amazon e sui documenti BigTable di Google. Quindi si adatta bene al paradigma della mappa. Non memorizza i dati come JSON, ma puoi farlo tu stesso salvando i dati come una stringa JSON. È simile a DynamoDB, ma è liberamente disponibile come open source.

    
risposta data 01.05.2013 - 17:15
fonte
3

CouchDB e MongoDB sembrano essere i leader dei pacchetti di DB NoSQL oggi (IMHO, ovviamente).

Mongo ha il supporto di una società, ma è ancora gratuita - guadagna tramite i servizi di supporto. La documentazione è buona Couch è un progetto Apache, così gratuito.

Potresti usare PostgreSQL che ha hstore e una colonna di tipo di dati json che ti offre molte funzionalità noSql .

    
risposta data 01.05.2013 - 17:00
fonte
1

Hai solo bisogno di una cache con persistenza del disco. EhCache è una HashMap glorificata che supporta la persistenza del disco con una serie di opzioni di configurazione. Sarà probabilmente l'opzione più semplice perché il tuo codice cambierà molto poco.

    
risposta data 01.05.2013 - 17:36
fonte

Leggi altre domande sui tag