Foros del Web » Programando para Internet » PHP »

guardar archivos en db o en directorio?

Estas en el tema de guardar archivos en db o en directorio? en el foro de PHP en Foros del Web. Saludos a todos. Desde siempre, cuando tengo que vincular jpg, pdf,... a un objeto de la db, por ejemplo, articulos, creo una carpeta en servidor ...
  #1 (permalink)  
Antiguo 14/04/2012, 04:32
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 7 meses
Puntos: 97
guardar archivos en db o en directorio?

Saludos a todos.
Desde siempre, cuando tengo que vincular jpg, pdf,... a un objeto de la db, por ejemplo, articulos, creo una carpeta en servidor /articulos/archivos y los guardo ahi, utilizando articulos.id para crear el nombre del archivo (12_fichatecnica.pdf).

Sin embargo, ahora estoy planteando crear una tabla 'archivos', con los campos tabla,tabla_id,key,archivo.

Fijaros que no guardo el archivo en la tabla 'articulos', sino en una tabla aparte 'archivos'. De esta manera, al hacer un select sobre articulos, no se sobrecarga por la imagen ni se ralentiza. Y cuando necesite el archivo hago

select archivo from archivos where tabla='articulos' and tabla_id=$articulos_id and key='fichatecnica'.

El tiempo de carga de dicha select en comparacion de la carga del archivo desde disco, no creo que sea muy significativa, sino menor.

Voy errado?
Alguien tiene una razón de peso para utilizar o no alguno de los dos modos?

gracias de antemano.
  #2 (permalink)  
Antiguo 14/04/2012, 04:56
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: guardar archivos en db o en directorio?

Si solo tienes un archivo por artículo lo normal es guardar la referencia a dicho archivo en la misma tabla artículos y luego hacer un select recuperando los datos que te interesan.

Si tienes más de un archivo por artículo lo normal sería crear una tabla archivos relacionada con artículos y guardar las referencias a los archivos en esa tabla.

no se si te he entendido bien,

saludos.
__________________
Tu álbum de cromos online!!
  #3 (permalink)  
Antiguo 14/04/2012, 05:03
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 7 meses
Puntos: 97
Respuesta: guardar archivos en db o en directorio?

Estoy construyendo un motor generador de webs, por lo que me enfrento a n tablas, con n imagenes, pdfs... unicas (imagen principal..) o colecciones (sliders...), imagenes multiidioma...etc.

La duda es si seguir como lo tengo ahora, en directorios, y que funciona correctamente, o gano algo pasando a db.
Gracias por tu tiempo!
  #4 (permalink)  
Antiguo 14/04/2012, 05:12
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 7 meses
Puntos: 97
Respuesta: guardar archivos en db o en directorio?

otra reflexion...

si guardo en db, al hacer un backup de la db, ira mas lento, pero tengo datos+archivos guardados.

si guardo en carpetas, el backup de db es mas rapido, pero tengo que copiar los ficheros a parte con ftp.
otro dilema!!!
  #5 (permalink)  
Antiguo 14/04/2012, 05:19
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 16 años, 5 meses
Puntos: 53
Exclamación Respuesta: guardar archivos en db o en directorio?

Para archivos:

La idea que siempre se ha aplicado en los casos donde tiendes a manipular archivos referenciados a un determinado usuario es llevar la dirección origen a la base de datos y el archivo como tal en el servidor, con determinados privilegios. Evidentemente agiliza su tiempo de carga.

Cita:
La duda es si seguir como lo tengo ahora, en directorios, y que funciona correctamente, o gano algo pasando a db.
Si hablas de manejar relaciones con simplemente grabados en disco:

No ganas "algo", ganas todo realmente. La relación usuarios (suponiendo que es a través de él que manipulas el respectivo "motor generador de webs") y sus diferentes procesos, se hace relativamente sencilla y te permite identificar reportes complejos simplemente basándote en un modelo relacional. La persistencia de datos que aplica a un archivo, es casi nula.

En fin, no sé cuánto más pueda extender el tema, cualquier duda, con gusto.

Buena suerte.
__________________
Programar dejó de ser una profesión acusada en la oscuridad y disfrutada fríamente... para convertirse en un arte.
  #6 (permalink)  
Antiguo 14/04/2012, 05:20
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses
Puntos: 66
Respuesta: guardar archivos en db o en directorio?

Mi consejo esque no guardes archivos grandes en la BD, solo referencias a esos archivos, por lo de subir los archivos via ftp no es obligatorio, tambien los puedes sibir via web al tiempo que creas el registro en la BD.
__________________
Tu álbum de cromos online!!
  #7 (permalink)  
Antiguo 14/04/2012, 06:10
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 7 meses
Puntos: 97
Respuesta: guardar archivos en db o en directorio?

"La persistencia de datos que aplica a un archivo, es casi nula."
Cierto desde sql, pero para cada objeto tengo parametros de preproces y postproces para cada acción CRUD, y la insercion datos/archivos es la misma función heredada para todos los objetos, por lo que no tengo problemas.
...y teniendo en cuenta la estructura de la tabla 'archivos' ( tabla,tabla_id,key,archivo.) donde tabla es un string que identifica la tabla (articulos,familia, modelos....), como harias la persistencia de dicha tabla desde mysql?

En cuanto a ftp, me refiero a hacer copias de seguridad. Los archivos suben al servidor por post mediante un gestor de datos, tal y como propone Santris.

gracias por vuestras reflexiones

Etiquetas: tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:43.