Puedo almacenar una gran cantidad de datos (<= 4 GB) en una columna de la tabla. ¿Pero es una buena idea?

StackOverflow https://stackoverflow.com/questions/2091541

  •  21-09-2019
  •  | 
  •  

Pregunta

Para hacer una larga historia corta, una parte de la aplicación que estoy trabajando en las necesidades de almacenar una cierta gran volumen de datos en una base de datos, por otra parte de la aplicación para recoger más adelante. Normalmente esto sería <2000 filas, pero en ocasiones puede ser superior a 300.000 filas. Los datos deben ser almacenados temporalmente y puede ser eliminado después.

He estado jugando con varias ideas y una cosa vino a la mente en la actualidad. El tipo de datos LONGTEXT puede almacenar un máximo de 2 ^ 32 bytes, lo que equivale a 4 GB. Ahora, eso es un montón de cosas para meter en una fila de la tabla. Eso sí, los datos probablemente no exceda 60-80 MB a lo sumo. Pero mi pregunta es, ¿es una buena idea para hacer realidad eso?

Las dos soluciones Actualmente estoy jugando con el uso son algo como esto:

  • Inserción de todos los datos como filas individuales en una tabla "temporal" que se trunca después de acabado.
  • Inserción de todos los datos como una cadena en serie en una columna LONGTEXT consecutivo en el que se elimina después de acabado.

Únicamente desde una perspectiva de rendimiento, sería mejor para almacenar los datos como potencialmente> 300.000 filas individuales, o como una entrada de 60 MB LONGTEXT?

Si se trata de un lavado, probablemente voy a ir con la opción LONGTEXT, ya que haría que la parte de la aplicación que recoge los datos más fácil de escribir. También resultaría más adecuado con la otra parte, lo que aumentaría el rendimiento general de la aplicación.

Le agradecería cualquier idea sobre esto.

¿Fue útil?

Solución

La serialización de todos esos datos en una LONGTEXT ... blasfemia !! :)

En serio, se me ocurre que si lo hace, que no tendría más remedio que extraer todo en uno, gigante, pieza. Si usted separa en filas individuales, por el contrario, puede tener su front-end traiga en lotes más pequeños.

Al menos darse esa opción parece lo más inteligente que hacer. (Tenga en cuenta que subestimar las necesidades futuras del tamaño de una vez los datos puede ser un error fatal!)

Y si el diseño de las tablas de la derecha, dudo mucho que 60MiB de difusión de datos sobre 300.000 filas sería menos eficiente que ir a buscar 60MiB de texto y análisis que en el front-end.

En última instancia, la pregunta es: ¿Cree que su front-end puede analizar el texto de manera más eficiente que MySQL puede buscarlo

?

Otros consejos

Esto debería estar bien, siempre y cuando utiliza un motor de almacenamiento de memoria . En MySQL, esto significa utilizar el motor de almacenamiento InnoDB memoria en lugar de o MyISAM. De lo contrario, el uso del disco traerá su aplicación a sus rodillas.

¿Qué tipo de datos y cómo se va a utilizar? Probablemente será mucho mejor para almacenar y procesar en la memoria de su aplicación. Al menos, será mucho más rápido y no se carga el motor DB.

Siempre se puede almacenar en la base de datos como el formato de 300.000 fila y utilizar memcached para almacenar en caché los datos para que no tenga que hacerlo de nuevo. Tenga en cuenta que las tiendas de memcached en la memoria de la máquina de modo que si su uso de una gran cantidad de estos datos es posible que manera de establecer la mínima expiran en él. Pero MemCached acelera significativamente el tiempo para obtener los datos, ya que no tiene que hacer consultas cada carga de página.

Si usted va a ser simplemente escribiendo un BLOB grande, temporal que podría considerar la posibilidad de grabar en un archivo temporal en un sistema de archivos compartidos en su lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top