2011-10-03 17 views
5

Tengo una situación en la que un usuario está adjuntando archivos dentro de una aplicación, estos archivos se conservan en el almacenamiento de Azure Blob, existe una probabilidad razonable de que haya duplicados y quiero implementar una solución donde se dupliquen blobs se evitan¿Existe alguna forma de realizar enlaces simbólicos a los datos de blobs al usar Azure Storage para evitar blobs duplicados?

Mi primer pensamiento es sólo el nombre del blob como filename_hash pero que sólo capta un subconjunto de los duplicados, a continuación, filesize_hash Fue entonces siguiente pensamiento.

Al hacer esto, aunque parece que estoy perdiendo parte de la flexibilidad del almacenamiento de blob para representar la posición en la jerarquía del archivo, ver: Windows Azure: How to create sub directory in a blob container

así que estaba buscando para ver si había una forma de crear un blob que hace referencia a los datos de blob, es decir, algunos de enlace simbólico, pero no pudo encontrar lo que yo quería.

Me falta algo o debería ir con el método filesize_hash y almacenar mi jerarquía utilizando un método alternativo.

+0

Blobs tienen soporte de atributos de metadatos, si necesita almacenar algún indicador sobre el origen, pero no entiendo cuál es el problema real. Es posible que pueda obtener una mejor respuesta si explica en detalle por qué surge el problema. – codingoutloud

Respuesta

2

No, no hay enlaces simbólicos (fuente: http://social.msdn.microsoft.com/Forums/vi-VN/windowsazuredata/thread/6e5fa93a-0d09-44a8-82cf-a3403a695922).

Una buena solución depende del tamaño anticipado de los archivos y el número de duplicados. Si no van a haber muchos duplicados, o los archivos son pequeños, puede ser más rápido y más barato vivir con él: ¡$ 0,15 por gigabyte por mes no es una gran oferta, en comparación con el costo de desarrollo! (Ese es el enfoque que estamos tomando).

Si valía la pena eliminar duplicados, utilizaría el almacenamiento de tablas para crear algún tipo de redirección entre el nombre del archivo y la ubicación real de los datos. Luego, haré una redirección del lado del cliente para redirigir el navegador del cliente y descargar la versión correcta.

Si hace esto, querrá conservar el nombre del archivo (ya que eso será lo que el usuario ve) pero puede llamar a la ubicación de la "carpeta" lo que desee.

+0

Gracias, el costo de desarrollo no vale la pena en este caso tampoco. – JTew

2

Otra solución para mantener toda la estructura de sus archivos, pero todavía proporcionar una forma de hacer "enlaces simbólicos" podría ser la siguiente, pero como en la otra respuesta el precio podría ser tan pequeño que no vale la pena el esfuerzo de implementarlo .

Decidí en una configuración similar almacenar simplemente el md5 de cada archivo cargado en una tabla y luego en un año volver y ver cuántos archivos duplicados que se cargaron y cuánto espacio de almacenamiento se podía guardar. En ese momento será más fácil evaluar si vale la pena implementar una solución para enlaces simbólicos.

La desventaja de mantenerlo todo en el almacenamiento de tablas es que obtiene una API de consulta limitada para sus blobs. En su lugar, sugeriría utilizar Metadata en blobs para crear enlaces. (los metadatos se convierten en encabezados normales en las solicitudes cuando se usa el efecto REST).

Por lo tanto, para las manchas duplicadas, solo conserve una de ellas y almacene un encabezado de enlace que indique dónde están los datos.

blob.Metadata.Add("link", dataBlob.Name); 
await blob.SetMetadataAsync(); 
await blob.UploadTextAsync(""); 

en este punto la mancha ocupa ahora no hay datos, pero todavía está presente en el almacenamiento y será devuelto cuando se enumeran las gotas.

Luego, al acceder a los datos simplemente debe verificar si un blob tiene un conjunto de metadatos de "enlace" o con descanso, verificar si un encabezado x-ms-meta-link está presente y luego leer los datos desde allí.

blob.Container.GetBlockBlobReference(blob.Metadata["link"]).DownloadTextAsync() 

o cualquiera de los otros métodos para acceder a los datos.

Por encima es lo básico y estoy seguro de que puede averiguar el resto si se utiliza.

Cuestiones relacionadas