Actualmente estoy trabajando en un proyecto en Java donde debo realizar varias tareas de Recuperación de información y Clasificación en un conjunto de datos muy grande. Una pequeña colección tendría documentos 10K. De cada documento, alrededor de 100 vectores de dobles de 150 dimensiones. Entonces, alrededor de 1 millón de vectores de 150 dobles o 150 millones de dobles. Después de almacenarlo, necesito recordarlos a todos O a un porcentaje de ellos y realizar agrupamientos (por ejemplo, KMEANS). Las colecciones reales tienen muchos más documentos (actualmente estoy tratando con documentos 200K).La mejor manera de almacenar y recuperar grandes conjuntos de datos con Java
Por supuesto que he tratado varias veces con OutOfMemoryError y mi última solución al problema fue almacenar en 10 enormes archivos XML con un tamaño total> 5GB. Los archivos tenían que ser 10 porque DOM Writer obtuvo la memoria completa. Para la lectura utilicé SAX Parser, que hizo el trabajo sin cargarlos en la memoria. Además, almacenar un doble en cualquier tipo de texto multiplica su tamaño real y agrega el costo computacional de análisis y conversión. Finalmente, los algoritmos de agrupación generalmente son iterativos, por lo que necesitarán los mismos datos una y otra vez. Mi método no guardaba nada en la memoria caché, solo leía desde el disco muchas veces.
Ahora estoy buscando una forma más compacta de almacenar cualquier cantidad de datos en formato binario (base de datos, archivo binario sin procesar, etc.) y una forma eficiente de leerlos. ¿Alguien tiene alguna idea para proponer?
JDBM3 se ha actualizado a JDBM4, mejor conocido como [MapDB] (http://www.mapdb.org/). –