Pues quería consultaros esto, a ver que opinais...
Una aplicación (la que sea) necesita almacenar documentos pdf, canciones en mp3, imágenes... ¿Como es mejor gestionar estos recursos en la persistencia?.
Se puede almacenar en una carpeta en el servidor, y almacenar en base de datos únicamente las referencias para poder recuperarlo físicamente... o guardarlo como blob. ¿Se os ocurren formas mejores de gestionarlos?.
Almacenarlos como blob en base de datos requiere tiempo, creo yo... estar parseando y desparseando los documentos...
En mi trabajo usamos Alfresco, por ejemplo, como gestor documental, con lo cual cada consulta a un documento es una invocación a un servicio web.
Estoy empezando una aplicación que requiere subida y descarga de archivos (más lectura que escritura) y estaba pensando que opción abordar...
¿Qué se os ocurre?, ¿cual os parece mejor enfoque?.
En lo personal, el BLOB cuanto menos se use mejor. No solo hace la tabla bastante más grande (y consecuentemente más lenta), si no que para acceder al fichero requiere hacer el parseo. Yo recomiendo solo poner la referencia.
Si los ficheros son públicos (imágenes de un blog o algo así) colocándolo en una carpeta pública y configurando bien Apache / Nginx el acceso es directo, siendo más liviano y rápido.
Si por el contrario es de acceso restringido, lo colocas en una carpeta privada y que el código servidor, tras comprobar si hay permiso, acceda al fichero y los "escupa" tal cual.
Yo recomendaría usar Amazon S3 (https://aws.amazon.com/es/s3/). Yo lo llevo usando varios años en distintas empresas en las que he trabajado y es sencillo, barato y bastante configurable, porque puedes usar atributos en cada fichero para identificar tipos, organizarlo en buckets según te interese, etc.
Como te dicen, usa S3 o similar (Rackspace tiene algo). Y, si quieres hacerlo mejor, pim una CDN delante para la descarga.
Guardar archivos en tu servidor te impide escalar horizontalmente (poner otro servidor "clonado" si tienes mucho éxito y necesitas más potencia).
Meterlos en la bd es mejor desde ese punto de vista (no es tan malo, la mayoría de las BDs no guardan blobs en la tabla, así que el resto de usos no se ven muy afectados… salvo que pidas recuperar el blob). Los problemas vendrían de que tu BD tiene el doble de responsabilidades.
Finalmente, en ambos casos es tu servidor el que tiene que atender las peticiones de descarga… un tiempo que estaría mejor empleado generando html dinámico (además de que el límite de peticiones simultáneas al mismo host que los browsers se auto imponen haría que el site ser perciba como lento). Los estáticos son para las CDNs.
La verdad es que estaba pensando hacer un pequeño gestor documental a través de un API Rest... que me devolviera la url de descarga del documento y poco más (en plan filosofía DIY).
Pero claro, también tendría que alojar esa aplicación... y lo mismo los servicios que proponeis son más asequibles.
Pues quería consultaros esto, a ver que opinais...
Una aplicación (la que sea) necesita almacenar documentos pdf, canciones en mp3, imágenes... ¿Como es mejor gestionar estos recursos en la persistencia?.
Se puede almacenar en una carpeta en el servidor, y almacenar en base de datos únicamente las referencias para poder recuperarlo físicamente... o guardarlo como blob. ¿Se os ocurren formas mejores de gestionarlos?.
Almacenarlos como blob en base de datos requiere tiempo, creo yo... estar parseando y desparseando los documentos...
En mi trabajo usamos Alfresco, por ejemplo, como gestor documental, con lo cual cada consulta a un documento es una invocación a un servicio web.
Estoy empezando una aplicación que requiere subida y descarga de archivos (más lectura que escritura) y estaba pensando que opción abordar...
¿Qué se os ocurre?, ¿cual os parece mejor enfoque?.
Un saludo.
04/06/2014 09:43
Si los ficheros son públicos (imágenes de un blog o algo así) colocándolo en una carpeta pública y configurando bien Apache / Nginx el acceso es directo, siendo más liviano y rápido.
Si por el contrario es de acceso restringido, lo colocas en una carpeta privada y que el código servidor, tras comprobar si hay permiso, acceda al fichero y los "escupa" tal cual.
04/06/2014 09:14
En carpeta, que no sea pública por ejemplo y con una referencia al fichero en la tabla ;)
05/06/2014 15:47
05/06/2014 19:08
09/06/2014 14:24
11/06/2014 08:36
Guardar archivos en tu servidor te impide escalar horizontalmente (poner otro servidor "clonado" si tienes mucho éxito y necesitas más potencia).
Meterlos en la bd es mejor desde ese punto de vista (no es tan malo, la mayoría de las BDs no guardan blobs en la tabla, así que el resto de usos no se ven muy afectados… salvo que pidas recuperar el blob). Los problemas vendrían de que tu BD tiene el doble de responsabilidades.
Finalmente, en ambos casos es tu servidor el que tiene que atender las peticiones de descarga… un tiempo que estaría mejor empleado generando html dinámico (además de que el límite de peticiones simultáneas al mismo host que los browsers se auto imponen haría que el site ser perciba como lento). Los estáticos son para las CDNs.
11/06/2014 10:02
La verdad es que estaba pensando hacer un pequeño gestor documental a través de un API Rest... que me devolviera la url de descarga del documento y poco más (en plan filosofía DIY).
Pero claro, también tendría que alojar esa aplicación... y lo mismo los servicios que proponeis son más asequibles.
¡Muchas gracias!.
Un saludo.