2010-01-08 24 views
6

¿Cuál es la mejor manera de almacenar archivos binarios o ?Mejor manera de almacenar archivos binarios o de imagen

  1. base de datos Sistema
  2. Archivo Sistema

podría por favor explicar , ¿por qué?

+2

Proporcione más contexto para esta pregunta. La respuesta puede ser bastante diferente para un usuario doméstico, una tienda en línea, google maps y un ambiente corporativo paranoico. –

+1

Si hubiera una * forma * correcta, ¡dudo que hubiera 2 posibilidades disponibles! Depende de lo que estés haciendo. He tenido aplicaciones que comienzan de una manera y terminan haciéndolo otra porque las cosas cambian. Hagas lo que hagas, debes abstraer esto lo suficiente como para que puedas cambiarlo sin cambiar TODO tu código EN TODAS PARTES. – hackerhasid

+0

@Wim Hollebrandse: Lamento decir que su comentario es inesperado. Publiqué problemas aquí para obtener solución, no para obtener rango. Necesito una solución y cuando la tengo me siento feliz. Gracias a stackoverflow.com por sus servicios. –

Respuesta

9

No hay una mejor manera real, solo un manojo de compensaciones.

Pros: Base de datos
1. Mucho más fácil de tratar en un entorno de clúster.
2. No depende de recursos adicionales como un servidor de archivos.
3. No es necesario configurar las operaciones de "sincronización" en un entorno con equilibrio de carga.
4. Las copias de seguridad incluyen automáticamente los archivos.

base de datos Contras:
1. Tamaño/crecimiento de la base de datos.
2. Dependiendo del servidor de base de datos y su idioma, puede ser difícil de instalar y recuperar.
3. Velocidad/rendimiento.
4. Dependiendo del servidor de base de datos, debe analizar los archivos al momento de cargarlos y exportarlos.


Pros archivos:
1. Para las instalaciones individuales de servidor db sola web /, es rápido.
2. Capacidad bien entendida para manipular archivos. En otras palabras, es fácil mover los archivos a una ubicación diferente si se queda sin espacio en disco.
3. ¿Puede el virus escanear cuando los archivos están "en reposo"? Esto le permite aprovechar las actualizaciones del escáner.

fichero cons:
1. En entornos de múltiples servidores web, requiere una cuota de acceso. Que también debería estar agrupado para failover.
2. Requisitos de seguridad adicionales para manejar el acceso a archivos. Debe tener cuidado de que el servidor web y/o compartir no permita la ejecución de archivos.
3. Las copias de seguridad transaccionales deben tener en cuenta el sistema de archivos.


Dicho esto, SQL 2008 tiene una cosa llamada FILESTREAM que combina ambos mundos. Usted carga a la base de datos y almacena de manera transparente los archivos en un directorio en el disco. Al recuperar, puede extraer de la base de datos; o puede ir directamente a donde vive en el sistema de archivos.

0

me gusta almacenar imágenes en una base de datos. Hace que sea fácil pasar del desarrollo a la producción simplemente cambiando las bases de datos (sin copiar archivos). Y la base de datos puede hacer un seguimiento de las propiedades, como las fechas creadas/modificadas, tan bien como el sistema de archivos.

0

Yo personalmente nunca almacenar imágenes en la base de datos con fines de rendimiento. En todos mis sitios tengo una carpeta "/ files" donde puedo colocar subcarpetas según el tipo de imágenes que voy a almacenar. Luego los nombro en la convención.

Por ejemplo si estoy almacenar una imagen de perfil, voy a lo almacenan en "/ archivos/perfil /" como profile_2.jpg (si 2 es el ID de la cuenta). Siempre hago una regla para cambiar el tamaño de la imagen en el servidor al tamaño más grande que necesitaré, y luego los más pequeños si los necesito. Así que me gustaría guardar "profile_2_thumb.jpg" y "profile_2_full.jpg".

Al crear reglas para sí mismo que puede simplemente en el img src llamada codificada = "/ files/profile__thumb.jpg"

Ése es cómo hacerlo de todos modos!

4

Pros de almacenamiento de archivos binarios en un DB:

  • Algunos disminución de la complejidad ya que la capa de acceso a datos de su sistema necesitan única interfaz a una base de datos y no un sistema de archivos DB + .
  • Puede proteger sus archivos utilizando el misma seguridad comprensiva basada en permisos que protege el resto de de la base de datos.
  • Los archivos binarios están protegidos contra la pérdida junto con el resto de sus datos a través de las copias de seguridad de bases de datos. No se requiere un sistema de copia de seguridad del sistema de archivos por separado .

contras de almacenamiento de archivos binarios en un DB:

  • Dependiendo del tamaño/número de archivos, puede ocupar un espacio significativo disminuyendo potencialmente el rendimiento (dependening de si sus binarios archivos se almacenan en una tabla que es consultada para otros contenidos a menudo o no ) y hacer copia de seguridad para los más largos veces.

Pros de almacenamiento de archivos binarios en el sistema de archivos:

  • Esto es lo que los sistemas de archivos son buenos en . Los sistemas de archivos manejarán bien la desfragmentación de y recuperar los archivos (digamos, para transmitir un archivo de video a a través de un servidor web) será más rápido que con una base de datos de .

contras de almacenamiento de archivos binarios en el sistema de archivos:

  • acceso a los datos un poco más compleja capa. Necesita su propio sistema de respaldo. Necesidad de considerar los problemas de integridad referencial (por ejemplo suprime puntero en la base de datos tendrá que resultado de la eliminación de archivos con el fin de no tiene archivos 'huérfanos' en el sistema de archivos ).

En resumen, utilizaría el sistema de archivos. En el pasado, al usar SQL Server 2005 simplemente almacenaba un 'puntero' en tablas db en el archivo binario. El puntero normalmente sería un GUID.

Aquí está la buena noticia si está usando SQL Server 2008 (y tal vez otros, no sé): existe un soporte integrado para una solución híbrida con el nuevo tipo de datos VARBINARY (MAX) FILESTREAM. Estos se comportan lógicamente como columnas VARBINARIAS (MÁXIMAS) pero detrás de escena, SQL Sever 2008 almacenará los datos en el sistema de archivos.

+0

Cuando comencé a escribir, todavía no había respuestas. ¡SO se está convirtiendo en un concurso de preguntas donde gana el mecanógrafo más rápido! :) – Emmanuel

+0

Creo que realmente me ganaste por un minuto o dos. – NotMe

2

No hay mejor manera.

¿Qué? ¿Necesitas más información?

Hay tres formas que conozco de ... Una, como arreglos de bytes en la base de datos. Dos, como un archivo con la ruta almacenada en la base de datos. Tres, como un híbrido (solo si DB lo permite, como con el tipo FileStream).

La primera es muy buena porque puede consultar y obtener sus datos en el mismo paso. Lo cual siempre es bueno Pero, ¿qué sucede cuando tienes MUCHOS archivos? Su base de datos se agranda. Ahora debe lidiar con grandes problemas de mantenimiento de bases de datos, como las pruebas de respaldo de bases de datos que tienen más de un terabyte. ¿Y qué sucede si necesita acceso externo a los archivos? Tales como las conversiones de tipo, la manipulación masiva (cambiar el tamaño de todas las imágenes, marcas de agua appy, etc.)? Es mucho más difícil de hacer que cuando tienes archivos.

El segundo es ideal para cantidades relativamente grandes de archivos. Puede almacenarlos en dispositivos NAS, hacer copias de seguridad de forma incremental, mantener su base de datos pequeña, etc. Pero luego, cuando tiene MUCHOS archivos, comienza a encontrarse con limitaciones en el sistema de archivos. Y si los distribuyes por la red, obtienes problemas de latencia, problemas de derechos de usuario, etc. Además, me apiadás de ti si tu red se reorganiza. Ahora tiene que ejecutar actualizaciones masivas en la base de datos para cambiar las ubicaciones de sus archivos, y le tengo lástima si algo se estropea.

Luego está la opción híbrida. Es casi perfecto: puede obtener sus archivos a través de su consulta, pero su base de datos no es masiva. ¿Esto soluciona todos tus problemas? Probablemente no. Su base de datos ya no es portátil; estás bloqueado a un DBMS en particular. Y estas cosas aún no están maduras, así que puedes disfrutar el proceso de la dentición. ¿Y quién dice que esto resuelve todos los diferentes problemas?

El hecho es que no hay una "mejor" manera.Solo tienes que determinar tus requisitos, tomar la mejor decisión dependiendo de ellos, y luego absorber cuando descubras que hiciste algo incorrecto.

+0

Gracias Will, estaba buscando usar FileStream, pero su respuesta me ha hecho replantearme debido a los problemas que plantea. – JLWarlow

Cuestiones relacionadas