2009-02-19 22 views
5

Estoy trabajando en el sitio de trabajo (utilizando asp.net 3.5) en el que un usuario puede cargar uno o más currículos. La base de datos es sql server 2005. ¿Cuál es la recomendación con respecto al almacenamiento de estos documentos? ¿Debería almacenarlo como un blob en la base de datos o simplemente almacenar la ruta en la base de datos y mantener el documento en la carpeta física? ¿Puede alguien mencionar los pros y los contras de cada rendimiento y escalabilidad de la wrt?Almacenamiento de documentos de Word

Gracias!

(+) más fácil mantenimiento de la casa, los archivos no huérfanos en el disco

(+) de programación coherente y modelo de acceso (autorización)

(:

+0

Convierta a texto sin formato y almacene en una columna de texto ... Pro: ahora puede usar el índice FTS. Otro profesional: te deshaces de todo ese formato molesto. – Shog9

Respuesta

1

Almacenamiento de archivos de la base de datos que da -) La base de datos crece de forma exorbitante, lo que aumentará el tiempo de copia de seguridad y el uso de espacio en disco para guardar los archivos de copia de seguridad

No creo que ninguna de las opciones escale mejor que la otra. Si espera una cantidad muy grande de documentos, llegará a límites con respecto a la cantidad de archivos en un directorio (ya sea como un límite absoluto o porque las búsquedas de directorios comienzan a tener un rendimiento muy bajo en un determinado punto).

+0

gracias por su respuesta ...! –

0

Mantener sus datos en la base de datos facilitará la gestión de la fecha. No tendrá que asegurarse de que los datos en la base de datos estén sincronizados con los datos (rutas de archivos) en el sistema de archivos.

Habiendo dicho eso, es importante darse cuenta de que puede haber un golpe de rendimiento cuando se almacenan grandes blobs en la base de datos. Afortunadamente, se han realizado algunas investigaciones en esta área para investigar posibles escenarios. Te recomendaría que eches un vistazo al this paper de Microsoft Research sobre el tema. Espero que ayude.

Además, debo mencionar que Microsoft SharePoint almacena sus documentos de Word (así como otros archivos) en las bases de datos de SQL Server como blobs. Puede leer más sobre esto here.

0

No hay nada que decir que no pueda hacer ambas cosas: analizar el documento & almacenar información meta importante (como información de contacto, palabras de uso frecuente, etc.) en columnas indexadas, almacenar una ruta al documento. Eso es lo que hice para una alta disponibilidad (hasta 21M de impresiones/mes) db, pero estábamos sirviendo archivos multimedia, pero el tamaño del archivo & principal es más o menos el mismo.

0

Puede tratar de almacenar los documentos en una base de datos separada y utilizar el Modelo de recuperación simple. A continuación, puede realizar fácilmente una copia de seguridad de la base de datos de documentos sin preocuparse de que las copias de seguridad se disparen en tamaño.

0

He tenido dos sistemas que almacenan archivos en carpetas: ambos escalaron mal cuando llegamos a unos 20K archivos en una carpeta. Puede resolverse mediante el uso de subcarpetas (2008-01, 2008-02 por ejemplo) pero, como dijeron otros, tiene problemas de sincronización.

La base de datos le permite archivar/eliminar antiguos currículums y no hay problemas de sincronización. Puede comprimir/descomprimir el texto al almacenar/recuperar, siempre y cuando no desee buscar texto completo en los datos. Asumiendo un archivo de 10-20K, podrías comprimir a 1-2K probablemente. No tan grande.

0

Estoy a cargo de algunas aplicaciones que administran muchos TB de imágenes. Creo que esta aplicación es similar en cuanto a que está almacenando archivos relativamente grandes para las filas de bases de datos típicas. Hemos encontrado que almacenar rutas de archivos en la base de datos es lo mejor.

Hay un par de cuestiones:

  • de almacenamiento de base de datos suele ser más caro que el almacenamiento del sistema de archivos.
  • puede acelerar/distribuir el acceso al sistema de archivos con productos estándares disponibles.
  • cosas como servidores web, etc., no necesitan una codificación especial o procesamiento para acceder a las imágenes en el sistema de archivos.
0

Recomiendo guardarlo en la base de datos para mantener las cosas juntas.

Un punto adicional a considerar cuando se almacena en la base de datos es que una base de datos SQL puede estar compuesta por varios archivos. Lo que aconsejaría es crear un segundo archivo (.ndf) en esta base de datos que contenga las tablas que contienen datos BLOB.

Esto proporciona algunos beneficios clave, ya que puede (1) ejecutarse en una matriz de discos por separado si la demanda aumenta. (2) se puede respaldar y restaurar por separado. (3) no hinchará su archivo principal de base de datos OLTP.

0

me gustaría ir con el uso de la mejor herramienta para cada trabajo:

  • el mejor tipo de base de datos para almacenar y consultar datos es una base de datos relacional.
  • la mejor base de datos para administrar archivos es el sistema de archivos.

Usando el sistema de archivos le permitirá utilizar las herramientas adecuadas para la gestión de archivos: puede utilizar las funciones de compresión del sistema operativo, utilizar herramientas de copias de seguridad incrementales, etc., y no inflar su base de datos con documentos de Word a veces mal construidas que pueden contener grandes imágenes.

Como el número de archivos aumenta, el problema es fácil de resolver desde el punto de vista del sistema de archivos: almacene los archivos en directorios de ruta relativos para que pueda mantener el número de archivos por directorio bajo control (por ejemplo, creando una carpeta semanal o creando una nueva carpeta cuando el conteo de archivos supera un cierto límite).
Luego solo necesita mantener la ruta relativa del archivo en la base de datos.

También normalizaría los nombres de los archivos en el momento del envío para mantenerlos constantes, como 20090219-001.doc.

Como otros sugirieron, podría analizar el archivo doc para extraer la información puramente textual y almacenarla en la base de datos para obtener los beneficios de la búsqueda de texto.

Cuestiones relacionadas