Attualmente sto lavorando su un progetto in Java in cui devo eseguire diverse attività di recupero e classificazione delle informazioni su un set di dati molto grande. Una piccola raccolta avrebbe documenti 10K. Da ogni documento circa 100 vettori di 150 dimensioni di doppi. Quindi circa 1 milione di vettori di 150 doppi o 150 milioni di doppi. Dopo averlo memorizzato, ho bisogno di richiamarli tutti O una percentuale di essi ed eseguire il clustering (ad esempio KMEANS). Le collezioni effettive hanno molti più documenti (attualmente mi occupo di documenti 200K).Il modo migliore per archiviare e recuperare set di dati di grandi dimensioni con Java
Naturalmente mi sono occupato di OutOfMemoryError più volte e la mia ultima soluzione al problema è stata la memorizzazione in 10 enormi file XML con dimensioni totali> 5 GB. I file dovevano essere 10 perché DOM Writer aveva la memoria piena. Per la lettura ho usato SAX Parser che ha fatto il lavoro senza caricarli in memoria. Inoltre, la memorizzazione di una doppia in qualsiasi tipo di testo moltiplica le sue dimensioni effettive e aggiunge il costo computazionale di analisi e conversione. Infine, gli algoritmi di clustering sono di solito iterativi, quindi avranno bisogno degli stessi dati ancora e ancora. Il mio metodo non ha memorizzato nella cache nulla, ha solo letto dal disco molte volte.
Attualmente sto cercando un modo più compatto di memorizzare qualsiasi quantità di dati in formato binario (database, file binario non elaborato, ecc.) E un modo efficace di leggerli. Qualcuno ha qualche idea da proporre?
JDBM3 è stato aggiornato a JDBM4, meglio noto come [MapDB] (http://www.mapdb.org/). –