Pregunta

Después de leer esta , se Suena como una gran idea para almacenar archivos usando el algoritmo SHA-1 para el directorio.

No tengo idea de lo que sin embargo este medio, todo lo que sé es que SHA-1 y MD5 son algoritmos de hash. Si puedo calcular el hash SHA-1 utilizando este script rubí y cambio de los archivos contenido (que cambia el hash), ¿cómo sé que el archivo se almacena entonces?

Mi pregunta es entonces, ¿cuáles son los fundamentos de la implementación de un sistema de SHA-1 / de almacenamiento de archivos?

Si todos los archivos están cambiando el contenido de todo el tiempo, hay una mejor solución para su almacenamiento, o sólo tiene que mantener la actualización del hash?

sólo estoy pensando acerca de cómo crear un archivo genérico sistema como Google Docs, Flickr, Youtube, Dropbox, etc. almacenar, algo que se puede reutilizar en diferentes entornos (tales como el almacenamiento PubMed artículos de revistas o Cramster tareas y pruebas, o imágenes al igual que en Flickr). Probablemente me las guardo en Amazon EC2. Sólo algún sistema para que pueda decir "esto es lo que voy a 99% de las veces hacer el almacenamiento de archivos a partir de ahora", por lo que puede dejar de pensar en la construcción de un camino sólido / consistente para almacenar archivos y entrar en algunos problemas reales.

¿Fue útil?

Solución

En primer lugar, si el contenido de los archivos están cambiando, nombre de archivo de SHA-digerir enfoque no es muy adecuado, ya que el nombre y la ubicación del archivo en el sistema de archivos debe cambiar cuando el contenido de los cambios en los archivos.


Básicamente primero calcular un SHA-1 o MD5 (= valor hash) a partir de los contenidos del archivo.

Cuando se tiene un resumen, por ejemplo, 00e4f56c0de1c61fdb926e79e8a0a65bd12930c9, se generará una ubicación de archivo y el nombre de la digestión. Por ejemplo, dividir los primeros caracteres del nombre del archivo a digerir estructura de directorios y resto de los personajes a. Por ejemplo:

 00e4f56c0de1c61fdb926e79e8a0a65bd12930c9 => some/path/00/e4/f5/6c0de1c61fdb926e79e8a0a65bd12930c9.txt

De esta manera sólo necesita almacenar el SHA-1 digerir del archivo de base de datos. A continuación, siempre se puede encontrar la ubicación correcta y el nombre del archivo.

Directorios por lo general también tiene el número máximo de archivos que pueden contener, por ejemplo máximo de 32000 subdirectorios y archivos por directorio. Una estructura de directorio basado en este tipo de hash hace que sea poco probable que almacene demasiados archivos para un mismo directorio. También el uso de hash como éste asegurarse de que cada directorio tiene aproximadamente el mismo número de archivos, no voy a entrar en situación en la que todos sus archivos están en un mismo directorio.

Otros consejos

La idea es no para cambiar el contenido del archivo, sino más bien su nombre (y ruta), mediante el uso de un valor hash.

Cambiar el contenido con un hash sería desastroso desde un hash no es normalmente reversible.

No estoy seguro de la motivivation para utilizar un de hash en lugar del nombre de archivo (o incluso en lugar de un número de larga aleatoria), pero aquí son algunas de las ventajas de la appraoch de hash:

  • los nombres de los archivos en el disco es uniforme
  • las partes superior e inferior del valor hash se puede utilizar para nombrar a los directorios y por lo tanto distribuir los archivos relativamente uniformemente
  • el nombre se convierte en un código, por lo que es difícil que alguien    a) adivinar un nombre de archivo    b) categorizar imágenes (qué alguien robar el contenido del disco duro)
  • sea capaz de recuperar el nombre del archivo y la ubicación de los archivos contenidos en sí (suponiendo que el hash proviene de dicho contenido. (No muy seguro de lo que caso de uso implicaría esto ... un poco contrieved ...)

El interés general de la utilización de un hash es que a diferencia de un nombre de archivo, un hash no tiene sentido, y por lo tanto se requeriría la base de datos para relacionar imágenes y datos de tipo "bibliográficas" (nombre del cargador, fecha de subida, etiquetas,. ..)

En el pensamiento de ello, la relectura de la respuesta hasta que se hace referencia, yo realmente no ver gran parte de la ventaja de un hash, en comparación con, por ejemplo, un número al azar ...

Además ... algunos hashes producir un valor numérico, normalmente expresado en hexadecimal (como se ve en la pregunta SO refernced) y esto podría ser visto como un desperdicio, haciendo que los nombres de archivo más largos que necesitan ser, y por lo tanto poner más tensión en el sistema de archivos (directorios más grandes ...)

La idea es que se necesita para llegar a un nombre para la foto, y es probable que desee para dispersar los archivos entre un número de directorios. Una forma fácil de llegar a un nombre único es utilizar el hash.

Así que el comienzo del hash se desprendió de una estructura de directorios multi-nivel y el resto del hash se utilizó un nombre de archivo para el jpg.

Esto tiene el beneficio adicional de detectar archivos duplicados.

Una de las ventajas que veo con el almacenamiento de archivos a través de su hash es que los datos del archivo sólo necesita ser almacenada una vez y luego se puede hacer referencia varias veces dentro de su base de datos. Esto le ahorrará espacio si usted tiene un diferentes usuarios subir el mismo archivo exacto.

Sin embargo, la desventaja de esto es cuando un usuario elimina lo que piensan es que hay archivo de su aplicación, no se puede simplemente eliminar físicamente el archivo desde el disco debido a que otros usuarios que suben el mismo archivo exacto todavía pueden estar usando la misma.

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