ubicación recomendada para el almacenamiento de documentos - la base de datos o en otro lugar?

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

Pregunta

Antecedentes:

Tenemos un sistema de almacenamiento de documentos en la casa que se implementó hace mucho tiempo. Por alguna razón, el uso de la base de datos como se eligió el mecanismo de almacenamiento para los documentos.

Mi pregunta es la siguiente:

¿Cuál es la mejor práctica para el almacenamiento de documentos? ¿Cuáles son las alternativas? ¿Cuáles son los pros y los contras? Las respuestas no tienen que ser o plataforma tecnológica específica, se trata más de una cuestión general mejor práctica.

Mis Pensamientos:

Las bases de datos no son para el almacenamiento de documentos. Sistemas de archivos o sistemas de gestión de documentos 3 ª parte pueden ser de mejor uso. Almacenamiento de documentos en bases de datos es costoso. Las operaciones son lentas. Son estas suposiciones lógicas? Tal vez esto es lo mejor, pero en mi mente, tenemos mejores alternativas. Podrían BFILE de Oracle (enlaces para documentar el NAS o SAN) sean mejores que BLOB / CLOB?

Detalles de:

  • Los documentos son diversos tipos (PDF, Word, XML)
  • El código de etapa intermedia está escrito en .NET / C # 2.0
  • documentos se almacenan en una base de datos Oracle 10g en BLOB con compresión (NAS Storage)
  • Los tamaños de archivo rabia
  • El número del documento está creciendo drásticamente y no tiene signos de desaceleración
  • insertos es típicamente está en las hunderds por hora durante el pico
  • retreival está típicamente en los miles por hora durante el pico
  • almacenamiento NAS y SAN de almacenamiento está disponible

ACTUALIZACIÓN (de preguntas a continuación):

  • mi fuerte es el desarrollo
  • no está asociado meta-datos sobre los archivos almacenados junto a los archivos de la base de datos
¿Fue útil?

Solución

El único límite para el almacenamiento de documentos en la base de datos es tecnológico.

base de datos de relación está destinado a ser el almacén persistente de la misión de los datos críticos de una empresa . Lo bien que puede realizar esa función varía de base de datos para la base de datos y un sistema a otro, por supuesto. Pero idealmente ÁCIDO propiedades de un base de datos relacional son destinado para que sea la tienda de toda Enterprise Data . El sistema de archivos, sistemas de control de revisión y otros sistemas de almacenamiento tienda local podrían tener ventajas específicas, pero que no están diseñados para el almacenamiento de datos de la empresa como tal.

Si los documentos que está almacenando corresponden a datos de la empresa - si se utilizan persistentemente a través de salida de la empresa - entonces es lógico para mantenerlos en la base de datos. Si está teniendo problemas con el almacenamiento en la base de datos, tal vez un DBA puede encontrar una mejor solución. Puede ser que incluso tienen que sacarlos de la base de datos por razones de rendimiento, pero no creo que usted debe sacarlos de la base de datos por razones de mejores prácticas.

Por supuesto, si los documentos no son datos de la empresa, si sólo son utilizados para una aplicación, por ejemplo, a continuación, se mueve fuera de la base de datos podría también tener sentido.

Otros consejos

Con base en mi experiencia diría que mantenerlos en la base de datos. Nos hemos trasladado a dos de nuestros sistemas para hacer esto.

Ponerlo en la base de datos significa:

  • Es fácil acceso, incluso desde varios servidores
  • Se copia de seguridad automática (en lugar de tener que tener un trabajo independiente para hacer eso)
  • Usted no tiene que preocuparse por el espacio (ya que las personas mantienen la base de datos se llene demasiado el disco, pero puede olvidarse de controlar por dónde se almacenan los documentos)
  • Usted no tiene que tener un esquema de directorio complicada

Tuvimos documentos fuera de la base de datos. Se convierte en un problema con una gran cantidad de documentos. Un directorio normales en Linux es un bloque, que suele ser 4K. Tuvimos un directorio que era 58MB porque tenía tantos archivos en él (que era sólo un directorio plano, sin jerarquía). Tenía que muchos bloques indirectos. Se tardó más de una hora para eliminar. Tomó minutos para obtener un recuento del número de archivos en el directorio. Fue abismal. Esto está en ext3.

Con el sistema de archivos que necesita:

  • mecanismo de copia de seguridad independiente (de la copia de seguridad DB)
  • Para mantener las cosas en sincronía (por lo que el registro no existe en la base de datos sin el archivo de estar allí)
  • Una jerarquía de almacenamiento (para evitar el problema mencionado anteriormente, por lo que hay un directorio termina con 10.000 s de archivos)
  • Algunos manera de verlos desde otros servidores si necesita un cluster (por lo que probablemente NFS o algo así)

Es realmente un dolor. Para cualquier número no trivial de documentos, me gustaría recomendar en contra del sistema de archivos basado en lo que he visto.

Yo prefiero guardar el documento en el sistema de archivos y guardar un enlace al archivo y metadatos de archivos asociados en la base de datos .

Se ha demostrado más conveniente, fácil de mantener, y menos costosa que la alternativa.

La mayoría de los sistemas de gestión de documentos de clase empresarial no almacene el archivo de objeto en la base de datos. El hecho de que puede no significa que debe . Si escalabilidad y el rendimiento son importantes para usted y usted tiene un conjunto documento grande tiene que ser muy cuidadoso con el almacenamiento de los objetos en el PP. Considere lo siguiente:

En el caso caso de imágenes de documentos, 200 millones de archivos TIFF se puede considerar una proporción relativamente grande, pero no es enorme, sistema. sistemas a gran escala pueden tener más de 1 mil millones ficheros objeto. A, digamos, 20 KB por TIFF bitonal que podría tener 4 TB de almacenamiento de archivos objeto. ¿Cuánto tiempo están las copias de seguridad de base de datos van a tomar? ¿Cuánto tiempo están sus consultas van a tomar? ¿Cuál es la frecuencia de acceso para estos objetos? Si estos objetos tienen una alta frecuencia de acceso, lo que quiere que su servidor de base de datos de gama alta de pasar todo su tiempo sirviendo de seguridad de archivos? Si usted tiene millones de objetos a continuación, hay que ser bastante maldito cuidado acerca de cómo diseñar una solución en la que se almacenan los objetos en el PP.

Suponga que está ahora en la tarea de convertir esos archivos TIFF 200M en archivos PDF. Esté preparado para llevar la solución a sus rodillas como servidor de base de datos desperdicia su tiempo sirviendo a todos y cada fichero objeto para el proceso de conversión y volver a guardar los resultados.

A modo de ejemplo, Sharepoint es famoso por el almacenamiento de objetos en el PP. SharePoint también es famoso por los problemas de escalabilidad.

Mi respuesta:
Para los sistemas de archivos pequeños (<1M) que almacena los archivos de la base de datos puede ser considerado. Para los sistemas de archivos grandes (> 1M) que almacena los archivos de la base de datos es un error.

Mi mayor preocupación con el almacenamiento de los archivos de la propia base de datos es la gestión del tamaño y la complejidad de las copias de seguridad y otras operaciones de mantenimiento db.

Una de las estrategias para mitigar esta dificultad (por lo menos en MS SQL) es la creación de particiones de base de datos independientes, potencialmente almacenados en diferentes unidades.

A continuación, separar su esquema de datos para que sus metadatos sobre Los archivos se encuentran en una partición y los archivos BLOB reales están situados en una partición separada.

Estas particiones se pueden sostener en horarios diferentes, o incluso recuperan por separado.

He imágenes almacenadas como BLOB en la base de datos una vez y me arrepentí la primera vez que tuve que realizar una operación por lotes en esas imágenes. Hubiera sido mucho más fácil que hacerlo en el sistema de archivos. También, como usted ha mencionado, es mucho más rápido para recuperar los documentos si viven en un sistema de archivos.

Mi visión simple: el sistema de archivos debe almacenar archivos, y una base de datos relacional debe almacenar datos relacionales

.

Guarde los archivos binarios en el sistema de archivos. Crear una aplicación ASP.NET para las operaciones de almacenamiento y recuperación. Puede ser de lujo con la aplicación web (doc versiones, la seguridad de varios niveles, etc.). Creo que este es el consenso en la industria de gestión de doc.

Debido a que su "número de documento está creciendo drásticamente", parece que esto se está convirtiendo a gran escala. Es posible que desee comenzar a mirar de terceros, fuera de la caja soluciones (como http: // Kofax .com / captura / - tengo una amplia experiencia con este) para hacer el "trabajo sucia" para usted!. O mejor aún, considerar la búsqueda de SaaS que ofrece, tales como estos chicos http://www.edocumentsolutionsllc.com/

: -)

Guarde sus documentos como archivos como .doc si usted quiere ser capaz de acceder a los archivos y editar y volver a guardar con ellos.

Guarde sus documentos como archivos tales como .pdf o .tiff si quieres copias históricos reales que se puede extraer una copia de seguridad y reproducen.

almacenar toda la información relativa a sus archivos (tales como fechas, autores, localización) en su base de datos.

Siempre almacenar información núcleo y la ruta del archivo de documentos en la base de datos, pero nunca el propio documento. Es raro que todo el documento necesita estar en la base de datos.

Esto permite mucha más flexibilidad en el uso de esos documentos. Por ejemplo, querer utilizado mecanismos de almacenamiento y copia de seguridad por niveles deduping? Trate de que en Oracle BLOB.

La única ventaja que puedo ver a almacenar documentos en la base de datos es la facilidad de mover los documentos a otro entorno. Aparte de eso, yo no lo haría por todas las razones ya mencionadas.

Experiencia personal: ¿Es usted un administrador dB o un programador?

Seguridad: una configuración para la base de datos frente a 2 para el sistema de base de datos y archivo. Es una preocupación de que alguien se mueva accidentalmente / borrar los archivos? En un entorno complejo que un administrador puede elegir mover archivos a otro servidor y sólo cambiar la acción o la cartografía. Lo sé, esto nunca sucedería.

Las nuevas bases de datos están mejorando en este ámbito.

Considere guardar sus documentos en la subversión, u otro sistema de control de versiones. Vas a tener una buena copia de seguridad, la capacidad de mirar a las versiones antiguas de documentos y espléndida acceso a la red. Consulte " Mi vida en la subversión ".

Por el contrario iría para su almacenamiento en la base de datos por un par de razones:

  1. Más simple estrategia de copia de seguridad
  2. Los documentos almacenados en la base de datos se pueden indexar y buscar
  3. Usted no tiene que preocuparse acerca de los archivos que se mueve / seguridad manipulado
  4. Fácil de puerto a otro servidor en el caso de un accidente
  5. Si el gobierno ordena debe almacenar los datos que se remonta x años, la gestión de este uso de una base de datos es mucho más fácil

Las bases de datos se hacen para almacenar datos. Los archivos son sólo de datos.

A pesar de haber dicho que hay beneficios para el almacenamiento de archivos en el sistema de archivos, el jefe de ser una base de datos de rendimiento es mejor y el tamaño se mantiene hacia abajo. SQL Server 2008 le permite tener lo mejor de ambos mundos utilizando el FileStream. Lea este libro blanco para más información

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