2009-02-28 13 views
7

Necesito almacenar una matriz dispersa en el disco. Es como una tabla de base de datos con millones de filas y miles de columnas, donde muchas o la mayoría de las columnas son nulas. Necesita ser consultable, como un SQL SELECT con un WHERE en algunas de las columnas.Cómo almacenar una matriz consultable dispersa en el disco o la base de datos?

Mi requisito específico es Java. Primero pensé en usar Berkeley DB for Java para simular una tabla, pero luego no admite consultas basadas en valores.

Luego, pensé en usar una base de datos SQL regular. Por ejemplo, crear un esquema con solo una Id. De fila, una Id. De columna y el valor. La fila virtual será todas las filas reales con la misma ID. Pero luego, esto parece un abuso de la base de datos.

¿Alguna idea?

+1

¿Puede usted por favor actualizar este hilo con una descripción de lo que realmente hizo y cómo esto funcionó? –

+0

Gracias por el interés. En realidad, no procedí con el proyecto. – mparaz

Respuesta

3

Lo primero que se me vino a la mente al leer el encabezado de la pregunta fue una fila de la base de datos por (x, y) como sugirió en el penúltimo párrafo.

La otra cosa a tener en cuenta es que las bases de datos a menudo comprimen las filas, particularmente para NULLs, por lo que la representación directa puede no perder tanto espacio como piense.

0

Depende de su definición de "muchas o la mayoría de las columnas son nulas", pero eso suena como un enfoque muy razonable, suponiendo que realmente necesita el acceso aleatorio.

Si puede hacer todo por medio del procesamiento secuencial (por ejemplo, un escaneo en el orden de las filas), un archivo plano sería otra opción razonable a considerar.

1

la base de datos Intersystems Cache utiliza estructuras internas para almacenar datos, que son matrices multidimensionales dispersas. Tal vez verifique eso. Puede consultarlo y asignarlo a tablas SQL. No estoy seguro de si puede acceder directamente a las matrices multidimensionales en Intersystems Cache de Java.

0

Si sólo necesita guardar los datos como se dice "en el disco", leyó de nuevo & hacer ciertas preguntas, es posible que desee considerar simplemente la serialización de la clase de su propio diseño y la elección. Elimina toda necesidad de infraestructura de base de datos, pero obviamente también excluye muchas de las cosas con las que una base de datos realmente podría ayudarlo,

Cuestiones relacionadas