2009-06-16 33 views
7

Compramos una aplicación "de fábrica" ​​hace mucho tiempo que es capaz de almacenar archivos como un blob dentro de SQL Server. Hemos notado que la base de datos se ha más que duplicado en tamaño en los últimos seis meses debido al uso más frecuente de este campo blob por parte de un departamento. Como resultado, la aplicación se ha vuelto dolorosamente lenta.¿Cómo puedo identificar un tipo de archivo de un blob/filestream?

Se me ha encomendado la tarea de eliminar el campo blob de la base de datos y guardar el archivo en el sistema de archivos actual. Lamentablemente, la aplicación no almacena el tipo de archivo dentro de la base de datos. Aunque puedo leer el archivo tal como existe en la base de datos, no sé en qué extensión guardar el archivo. La mesa de soporte de la aplicación ya no admite esta versión del software y no nos hablará sobre la extracción de los datos. Desafortunadamente, no tenemos acceso a su código fuente.

¡Cualquier sugerencia sería muy apreciada! ¡Gracias por adelantado!

+0

No estoy seguro de si es relevante, pero probablemente el 70% de estos archivos son documentos de Office, diferentes formatos de Office 2003 - Office 2007. – proudgeekdad

Respuesta

2

No guardarlo como cualquier tipo. Guárdelo como un archivo sin extensión. Si no sabes de qué se trata, no lo falsifique. Si la aplicación que lo guardó lo solicita, devuélvalo del sistema de archivos de la misma forma que lo haría desde la base de datos; como datos binarios. A la base de datos no le importa qué tipo de datos es el Objeto binario; tampoco deberías.

2

Usted podría intentar usar TrID http://mark0.net/soft-trid-e.html

Se explorará los archivos y tratar de determinar la extensión.

+0

O utilice el puerto de Windows del archivo linx commnad http: //downloads.sourceforge .net/gnuwin32/file-5.03-setup.exe – jitter

0

¿Cómo sabes que esta información es legible por humanos?

Los fines de las extensiones de archivo son asociar un software en particular para abrir el archivo para que cuando haga doble clic en un archivo .txt, notepad.exe lo maneje.

Si solo los está escribiendo en el sistema de archivos para descargar la base de datos, entonces no hay necesidad de ninguna extensión específica. Si desea asociar un software con él, utilice la extensión correspondiente

0

Otra opción sería dividir físicamente su base de datos. Puede almacenar la tabla que contiene el campo blob en un archivo de base de datos diferente que podría almacenarse en un disco duro/cabezal diferente. El disco que contiene la tabla blob podría optimizarse aún más convirtiéndolo en RAID 0 o RAID 10.

Esto podría acelerar las cosas. Además, este enfoque elimina la necesidad de cambiar la lógica de la aplicación.

0

En sus palabras "... me han encargado ..." - ¿Está seguro de que esto no es un problema que pueda resolverse realizando una optimización en la base de datos? Seguir el camino de hackear una aplicación heredada para la que no tiene el código fuente y para la cual no hay soporte es algo que desea evitar tanto como sea posible.

Por lo tanto, mira el problema aquí - lentitud de la aplicación. Entonces, ¿por qué es lento? ¿Algo que un índice de base de datos no pudo resolver?

Si tiene que extraer los BLOB en el sistema de archivos, ¿por qué es relevante el formato del archivo? Seguramente la aplicación está diseñada para hacer una consulta en la base de datos con el fin de obtener el archivo de todos modos: ¿cómo lo ayudaría la extracción de los BLOB en el sistema de archivos?

Sin embargo, como un lado - Usualmente uso el comando Unix file para identificar archivos a través de números mágicos.

Cuestiones relacionadas