Estrategias de almacenamiento de archivos para un sitio web de alojamiento web

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

  •  09-06-2019
  •  | 
  •  

Pregunta

Voy a alojar los archivos que envía el usuario.Necesito tomar algunos datos del archivo y luego moverlos a algún directorio.

Hay dos puntos de interés durante la vida útil de este archivo.La primera es cuando se extraen los datos y la segunda es cuando se archiva el archivo para poder compartirlo.

Cuando se abstraen datos, he pensado en cambiar el nombre del archivo a algo único o agregar una cadena única al nombre del archivo para evitar que sobrescriba otros archivos existentes.

Cuando se va a archivar el archivo, he pensado en tres estrategias.Una es mantener todos los archivos cargados a partir de determinados datos en una carpeta.(2006/04/septiembre, 2008/05/05) La otra es mantener una carpeta y seguir llenándola hasta alcanzar un número máximo de archivos que quiero mantener en la carpeta y luego crear otra (/carpeta001/, /carpeta002/, /carpeta003/, etc.).Otra es crear subcarpetas una vez que alcancen cierto umbral.Entonces, como (/j/jd/jde/jdelator), he visto esto en Unix y no estoy seguro de cómo explicarlo.

La pregunta que tengo es ¿qué tipo de estrategias les han resultado útiles o han utilizado?

¿Fue útil?

Solución

Cuando se abstraen datos, elegiría algo como: filename + millisec();Es poco probable que dos llamadas a milisegundos sean iguales y el nombre del archivo es más fácil de usar al acceder.

La estrategia de fechas puede resultar útil si decide eliminar archivos antiguos y no utilizados:sólo tienes que conseguir la carpeta 2006, y eliminar todo aquello a lo que no se haya accedido en el último año, según tu registro.Esto también puede ser una buena indicación para sus usuarios, ya que sabrán si se trata de un archivo nuevo o no.La carpetaXYZ es solo una variante de ésta, reemplazando la fecha con una etiqueta cada N archivos.

Las subcarpetas de umbral le ayudan a mantener baja la cantidad de entradas de sus directorios, por lo que el acceso es más rápido.Tenga en cuenta que esta solución requiere a veces mover archivos (y luego romper alguna URL si no está asignada) cuando un directorio en particular crece.

Otra posibilidad es utilizar una base de datos con UID correspondiente a la ubicación del nombre del archivo y acceder al archivo a través de http://server.com/UID/nombredearchivo.txt .De esta manera, el usuario guarda el archivo como "nombre de archivo.txt", lo cual le resulta conveniente, y usted sabe con la URL dónde encontrar el archivo (usando la base de datos para transformar el UID en ubicación).Tenga en cuenta que el UID puede ser una suma de comprobación (MD5, SHA-1) para manejar duplicados del mismo archivo.

Otros consejos

Votaría con guid en una base de datos y luego usaría el encabezado Content-Disposition para devolverle el nombre del archivo original si fuera necesario.Una cosa que recomendaría es que las carpetas que utilice se almacenen fuera de la raíz web;No desea que los usuarios carguen archivos en las carpetas de su aplicación.

He utilizado una base de datos relacional que etiqueta los ID (int) con los uuids que son el nombre de los archivos.De esta manera no importa cómo estén en el disco.Me ayuda a ofuscar los archivos.Además, puedo usar JOIN para "cambiar el nombre" del archivo de forma arbitraria.Además, puedo usar diferentes "nombres" de archivo. Todo depende de su aplicación y de dónde se esté ejecutando.

Aunque depende de su aplicación, etc., sugeriría mantener el esquema de depósito de archivos muy simple por ahora y decidir una estrategia más elaborada más adelante.En otras palabras, se crea una especie de "caos controlado" por un tiempo;La estructura y la estrategia aparecerán más adelante, cuando conocerá todos los requisitos y los detalles del dominio.Manteniéndolo simple, puedes cambiar todo fácilmente.

De todos modos, el cambio es inevitable, lo mejor que puedes hacer ahora es elegir alguna estrategia y documentarlo todo.

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