sql >> Base de Datos >  >> RDS >> Mysql

BLOB vs. VARCHAR para almacenar arreglos en una tabla MySQL

¿Hay alguna razón por la que no cree una tabla secundaria para poder almacenar un valor de punto flotante por fila, en lugar de una matriz?

Digamos que almacena mil arreglos de 300 elementos cada uno por día. Eso es 300.000 filas por día, o 109,5 millones por año. Nada despreciable, pero dentro de las capacidades de MySQL o cualquier otro RDBMS.

Re sus comentarios:

Claro, si el pedido es significativo, agrega otra columna para el pedido. Así es como diseñaría la mesa:

CREATE TABLE VectorData (
  trial_id INT NOT NULL,
  vector_no SMALLINT UNSIGNED NOT NULL,
  order_no SMALLINT UNSIGNED NOT NULL,
  element FLOAT NOT NULL,
  PRIMARY KEY (trial_id, vector_no),
  FOREIGN KEY (trial_id) REFERENCES Trials (trial_id)
);
  • Espacio total para una fila de datos vectoriales:300x(4+2+2+4) =3600 bytes. Más directorio de registros InnoDB (material interno) de 16 bytes.

  • ¿Espacio total si serializa una matriz Java de 300 flotantes =1227 bytes?

Por lo tanto, ahorra alrededor de 2400 bytes, o el 67% del espacio al almacenar la matriz. Pero suponga que tiene 100 GB de espacio para almacenar la base de datos. El almacenamiento de una matriz serializada le permite almacenar 87,5 millones de vectores, mientras que el diseño normalizado solo le permite almacenar 29,8 millones de vectores.

Dijiste que almacenas unos cientos de vectores por día, por lo que llenará esa partición de 100 GB en solo 81 años en lugar de 239 años.

Re tu comentario:Rendimiento de INSERT es un problema importante, pero solo almacena unos pocos cientos de vectores por día.

La mayoría de las aplicaciones MySQL pueden lograr cientos o miles de inserciones por segundo sin excesiva hechicería.

Si necesita un rendimiento óptimo, aquí hay algunas cosas que debe considerar:

  • Transacciones explícitas
  • Sintaxis INSERT de varias filas
  • INSERTAR RETARDADO (si todavía usa MyISAM)
  • CARGAR ARCHIVO DE DATOS
  • ALTER TABLE DISABLE KEYS, haga las inserciones, ALTER TABLE ENABLE KEYS

Busque la frase "inserciones mysql por segundo" en su motor de búsqueda favorito para leer muchos artículos y blogs que hablan de esto.