2011-09-15 19 views
5

Estamos capturando una cadena binaria sin procesar de tamaño variable (de 100k a 800k) y nos gustaría almacenar estas cadenas individuales. No necesitan ser indexados (duh) y no habrá consultas sobre el contenido del campo.Almacenamiento de cadenas largas binarias (datos brutos)

La cantidad de estos insertos será muy grande (son para fines de archivo), digamos 10.000 por día. ¿Cuál es el mejor tipo de campo para grandes cadenas binarias como estas? ¿Debería ser text o blob o algo más?

Respuesta

13

En cuanto a PostgreSQL se refiere, tipo text está fuera de la cuestión. Es más lento, usa más espacio y es más propenso a errores que bytea para este propósito.
Hay básicamente 3 enfoques:

  1. uso de tipo bytea (básicamente la pg equivalentes del tipo blob SQL)

  2. uso "large objects"

  3. manchas almacenar como archivos en el sistema de archivos y solo almacena el nombre de archivo en la base de datos.

Cada uno tiene sus propias ventajas y desventajas.

  1. es bastante simple de manejar, pero necesita más espacio en disco. Se requiere algo de decodificación y codificación, lo que también lo hace lento. ¡Las copias de seguridad crecen rápidamente en tamaño!

  2. es un poco incómodo de manejar, pero tiene su propia infraestructura para manipular las manchas, si es necesario. Y puede hacer copias de seguridad separadas más fácilmente.

  3. es, con mucho, la forma más rápida y utiliza el menor espacio en disco. Pero no proporciona la integridad referencial que obtiene cuando almacena dentro de la base de datos.

que tienen una serie de implementaciones por el estilo para archivos de imagen: almacenar una pequeña miniatura en un campo bytea para la integridad referencial y de referencia rápida. Almacene la imagen original como archivo en el sistema de archivos. Por supuesto, debe pensar cuándo y cómo eliminar archivos desactualizados, cómo hacer una copia de seguridad de los archivos externos y demás.

+0

Gran respuesta. Gracias. – teustis

+1

¿Hay datos recientes que comparen estos enfoques? Sería maravilloso si hubiera algunas comparaciones objetivas. – beldaz

2

Probablemente deberías usar blob en la mayoría de las bases de datos. text las columnas a menudo se normalizarán o transformarán según una codificación de texto o configuración regional; y entonces los bytes reales no se pueden preservar como se esperaba. En casi todos los casos, esta es la única diferencia entre una columna text y blob.

0

Tenemos una columna VARBINARIA de usuario para almacenar hasta 300 MB de archivos.

Cuestiones relacionadas