valores pedir numeros matrices ingresar guardar datos como capturar arreglo array almacenar agregar java database hsqldb

java - pedir - Almacenamiento de matrices en bases de datos



ingresar datos en arreglo java (11)

Como ya se sugirió: No use un RDBMS si no necesita las características. En lugar de Serialización, es posible que desee concider una API de bajo nivel como JDBM que proporciona algunas características similares a la base de datos, como la gestión de un índice en disco.

¿Cuál es la forma más eficiente de almacenar grandes matrices (10000x100) en una base de datos, por ejemplo, hsqldb? Necesito hacer esto para un determinado programa de matemáticas que estoy escribiendo en Java. Por favor ayuda. Toda la matriz se recuperará y almacenará con frecuencia (no tanto elementos individuales). Además, algunos metadatos sobre la matriz deben almacenarse sobre la matriz.


¿Qué hay de almacenar los datos como un BLOB y el uso de Java para decodificar el BLOB en una matriz de Java real? Sería mucho más eficiente almacenar y recuperar toda la matriz de un solo trago, pero sería terrible para mezclar elementos individuales.


Defina una tabla con los datos que contiene su matriz e inserte los valores de la matriz en una tabla.

Este es un acceso / almacenamiento de datos muy simple. ¿Sus dimensiones de matriz siempre serán las mismas?


Gran pregunta

A menos que quiera traducir sus matrices en un conjunto de tablas normalizadas, lo que parece que no es, debería considerar la serialización.

La serialización es una palabra elegante para convertir objetos en algún formato que pueda guardar en el disco o en una base de datos. Los dos formatos principales de serialización son binarios y XML, y estoy apostando a que Java tiene algo de soporte para ello.

Dependiendo de los tipos de datos que esté utilizando, debería poder convertir su matriz en XML o binario y luego guardarla en un solo campo en la base de datos. Puede comenzar con esta técnica en Java visitando http://java.sun.com/developer/technicalArticles/Programming/serialization/ . Sé que está integrado en .NET.

Espero que esto ayude Avíseme si puedo darle más instrucciones.



Propón una representación interna, ya sea XML, JSON, algún archivo binario que se te ocurra, o cualquier otra forma de serialización.

Guárdelo en una tabla usando el tipo de datos "blob". Almacene los metadatos asociados con la matriz en columnas adicionales.

Estoy totalmente en desacuerdo con que la forma de hacerlo es crear una tabla con el mismo número de filas y columnas que tu matriz; ese es un precio muy alto para pagar por la funcionalidad que no usas.

Prepare sus instrucciones de inserción / selección de antemano y utilice variables de vinculación para cambiar la matriz con la que está trabajando; no haga que el DB vuelva a analizar cada solicitud.


Si es solo una matriz, ¿por qué no utilizar un archivo binario?


  • Hazlo en una gran transacción explícita. No fuerce el sistema de base de datos para crear una nueva transacción implícita para cada inserción.
  • Use una declaración preparada.

Serialización Java a una matriz de bytes almacenada como un BLOB será su mejor apuesta. Java serializará una gran matriz de manera bastante eficiente. Use el resto de las columnas de las filas para todo lo que le interese consultar o mostrar fácilmente. También puede ser una buena idea mantener los BLOB en su propia tabla y hacer que las filas "regulares" apunten a las filas "BLOB", si consulta e informa mucho sobre los datos que no son BLOB (aunque esto puede variar según la implementación de la base de datos). )


Si sus datos están empaquetados densamente (el histograma de valores está cerca de la línea plana), su mejor opción es blob y serialización utilizando el flujo [Output / Input] del objeto.

De lo contrario, es posible que le resulte más eficiente usar matrices dispersas y variaciones del esquema de Entidad-Atributo-Valor. Aquí hay un ejemplo:

Name | IndexKey | Value ------+-----------+------- foo | ''default'' | 39 foo | 0:0:0 | 23 foo | 0:0:1 | 34 foo | 1:5:0 | 12 ... bar | 1:3:8 | 20 bar | 1:3:8 | 23 bar | 1:1:1 | 24 bar | 3:0:6 | 54 ...

Esto también le permite realizar actualizaciones rápidas en partes de la tabla y seleccionar sectores utilizando el operador SQL ''like''.

Si se fija el número de sus dimensiones para dividir la columna clave para separar las columnas int para cada dimensión con el fin de mejorar la eficiencia del índice y tener criterios de selección más flexibles (puede usar el primer índice ''nulo'' para los metadatos como el valor predeterminado) .

En cualquier caso, es una buena idea crear un índice agrupado en Nombre, columnas IndexKey.


HSQLDB 2.0 admite matrices de una dimensión almacenadas como una columna de la tabla. Entonces cada fila de la tabla corresponderá a una fila de la matriz 2D.

Pero si desea recuperar una matriz 2D como un todo, BLOB es la mejor solución.