Principales respuestas
Almacenar Imágenes

Pregunta
-
hola amigos estoy desarrollando un sistema para una inmobiliaria con C#, tengo propiedades y almaceno 5 fotos por cada propiedad....
Mi pregunta es la siguiente es recomendable guardar dichas imágenes en la base de datos o me produciria algun problema... ??
de ser así, cual es el mejor método para hacerlo?? y que tipo de datos deve ser el campo da la imegen.... image o VarBinary(MAX) ??
muchas gracias....
Respuestas
-
Hola.
Elaborando un poco sobre las dos opciones que propone Williams, para la opción 2 tienes ciertos beneficios en la parte de respaldo y restauración, porque tienes todo en un mismo lugar, cual es la BD. Adicionalmente, tu aplicación se beneficia porque con un simple acceso a la BD, y no a la BD y al File System, obtiene la información que require. Por ultimo, garantizas temas como integridad de datos en cuanto a que la imagen está asociada a un registro particular en la BD. Sin embargo, esta opción no es muy eficiente en términos de memoria y CPU y es por esto que, como bien indica Williams, tienes FileStream en SQL Server. Mayor información sobre FileStream en esta entrada de la documentación en línea o en este buen libro electrónico en formato PDF de Redgate, The Art of SQL Server Filestream.
Para la opción 1, debes tener en cuenta una estrategia para respaldo y restauración de tus archivos, complementaria a la de tu BD, ofrecer solo los accesos requeridos de acuerdo con los requerimientos de seguridad, es decir de autenticación y autorización de tu aplicación y tener presente aspectos de disponibilidad del repositorio en donde estarán dichas imágenes. Algo que he visto es que algunas personas, para escenarios similares al tuyo, luego de que un usuario hace UPLOAD de las imágenes, cambian el nombre para tener dentro de éste temas como fecha, usuario y un secuencial para también desde File System poder manipular los archivos.
En conclusion, hay mucho debate sobre este tema y recomendar algo en este momento puede ser contraproducente. En mi caso, he tenido buena experiencia con ambas aproximaciones e incluso diría que lo mejor es FileStream, lo cual incluso me ayudó mucho para un escenario que involucró SharePoint Server 2010.
Si tienes tiempo, haz las pruebas con BD, BD+FileStream y archivos en el File System a ver que tal te va en términos de desempeño, seguridad y administración & operación. Quédate con la que mejor te funcione en general.
Saludos,
Guillermo Taylor F.
MVP SQL Server & IT Pro
Mi Blog- Propuesto como respuesta Karen MalagónModerator miércoles, 11 de noviembre de 2015 16:50
- Marcado como respuesta Karen MalagónModerator jueves, 12 de noviembre de 2015 23:13
Todas las respuestas
-
Leandro tiene un excelente articulo sobre este tema:
http://ltuttini.blogspot.com/2010/03/aspnet-guardar-imagen-base-de-datos.html
Y desde mi punto de vista es mejor VarBinary, así te será mas fácil expandir tu BD a otro tipo de archivos.
Roy Sillerico
-
Hola Facundo88,
Aquí hay dos soluciones por las que puedes optar:
- La imagen estará disponible en una unidad compartida y sólo se almacenará el nombre del archivo en un campo de tipo texto en la base de datos.
- La imagen se almacenará en una columna del tipo que soporte datos binarios. Aquí descarta el tipo image porque Microsoft anuncia que será retirado. La opción a considerar es varbinary(max), podrías también considerar marcar la columna varbinary(max) con el atributo FileStream para que los datos se almacenen en el sistema de archivos y no en la columna de la tabla, esta opción es recomendable cuando los objetos son mayores a 1MB de almacenamiento, caso contrario el mejor rendimiento lo obtendrás con varbinary(max) sin el atributo FileStream.
- Editado Willams Morales miércoles, 11 de noviembre de 2015 3:18
-
Hola.
Elaborando un poco sobre las dos opciones que propone Williams, para la opción 2 tienes ciertos beneficios en la parte de respaldo y restauración, porque tienes todo en un mismo lugar, cual es la BD. Adicionalmente, tu aplicación se beneficia porque con un simple acceso a la BD, y no a la BD y al File System, obtiene la información que require. Por ultimo, garantizas temas como integridad de datos en cuanto a que la imagen está asociada a un registro particular en la BD. Sin embargo, esta opción no es muy eficiente en términos de memoria y CPU y es por esto que, como bien indica Williams, tienes FileStream en SQL Server. Mayor información sobre FileStream en esta entrada de la documentación en línea o en este buen libro electrónico en formato PDF de Redgate, The Art of SQL Server Filestream.
Para la opción 1, debes tener en cuenta una estrategia para respaldo y restauración de tus archivos, complementaria a la de tu BD, ofrecer solo los accesos requeridos de acuerdo con los requerimientos de seguridad, es decir de autenticación y autorización de tu aplicación y tener presente aspectos de disponibilidad del repositorio en donde estarán dichas imágenes. Algo que he visto es que algunas personas, para escenarios similares al tuyo, luego de que un usuario hace UPLOAD de las imágenes, cambian el nombre para tener dentro de éste temas como fecha, usuario y un secuencial para también desde File System poder manipular los archivos.
En conclusion, hay mucho debate sobre este tema y recomendar algo en este momento puede ser contraproducente. En mi caso, he tenido buena experiencia con ambas aproximaciones e incluso diría que lo mejor es FileStream, lo cual incluso me ayudó mucho para un escenario que involucró SharePoint Server 2010.
Si tienes tiempo, haz las pruebas con BD, BD+FileStream y archivos en el File System a ver que tal te va en términos de desempeño, seguridad y administración & operación. Quédate con la que mejor te funcione en general.
Saludos,
Guillermo Taylor F.
MVP SQL Server & IT Pro
Mi Blog- Propuesto como respuesta Karen MalagónModerator miércoles, 11 de noviembre de 2015 16:50
- Marcado como respuesta Karen MalagónModerator jueves, 12 de noviembre de 2015 23:13