2012-01-17 9 views
5

Estoy buscando la mejor manera de controlar un contenedor/carpeta en Azure blob storage para ver los cambios. Hasta ahora, solo he encontrado una forma de hacerlo, que consiste en ejecutar un proceso de trabajo en alguna parte que muestre periódicamente los contenidos del contenedor para buscar cambios.¿Cuál es la mejor forma de supervisar un contenedor en Azure blob storage para ver los cambios?

¿Hay una manera mejor?

+0

Parece como si quieres disparadores, usted tiene para usar SQL Azure Aquí hay una pequeña y bonita comparación: http://brian.chipsofttech.com/blogs/brian/post/Azure-Data-Storage.aspx –

+0

Los activadores de SQL Azure no se aplican a los contenedores de almacenamiento de blob, ni SQL Azure proporciona la masa- capacidad de almacenamiento de blobs y contenedores. –

Respuesta

9

Storage SDK no proporciona esto, pero es una característica principal en el nuevo SDK de WebJobs. Hay un atributo [BlobInput] que le permite especificar un contenedor para escuchar, e incluye un oyente blob eficiente que se enviará al método cuando se detecten nuevos blobs. Hay algunos ejemplos de burbuja escuchando en: http://blogs.msdn.com/b/jmstall/archive/2014/02/18/azure-storage-bindings-part-1-blobs.aspx

He aquí un ejemplo de uso:

public static void CopyWithStream(
     [BlobInput("container/in/{name}")] Stream input, 
     [BlobOutput("container/out1/{name}")] Stream output 
     ) 
    { 
     Debug.Assert(input.CanRead && !input.CanWrite); 
     Debug.Assert(!output.CanRead && output.CanWrite); 

     input.CopyTo(output); 
    } 

Y el oyente nota se realiza aquí abajo:

 JobHost host = new JobHost(acs); // From nuget: Microsoft.WindowsAzure.Jobs.Host 
     host.RunAndBlock(); 
+0

Vale la pena mencionar que el contenedor se escanea cada 10 minutos (!). Por lo tanto, el trabajo web no se activará de inmediato. – johni

1

No hay mejor manera, en mi humilde opinión. Lo siento. HTH

0

Igor tiene razón, ya que tendrá que sondear el contenedor. Solo quería aclarar algo. Cuando dijo:

plazo un proceso de trabajo en alguna parte que hace ping el contenido del recipiente sobre una base regular para buscar los cambios

El proceso de trabajo puede ser un hilo en un Papel Web o trabajador de Roles, las Ejecutar(), etc. No requiere un rol separado. Solo asegúrese de que su código de sondeo funcione con varias instancias de rol (por ejemplo, puede querer hacer algún tipo de arrendamiento de blob de página como un mutex, para asegurarse de que está sondeando desde una sola instancia). También puede hacer esto a través de Colas Azure, ya que los mensajes de cola ahora admiten un tiempo de espera de invisibilidad después de la creación del mensaje.

4

Como han dicho otros, la votación en un intervalo razonable para su aplicación está bien. Pero no necesita verificar el contenido en sí mismo. Puede verificar ETag (si usa HTTP simple) o puede marcar BlobProperties.LastModifiedUtc si está usando API.

+0

Ok, eso es lo que pensé. ¿No sería bueno si hubiera un tipo de notificación de inserción para esto ...? –

+0

@BillForney Probablemente sí, pero teniendo en cuenta el tamaño posiblemente ilimitado del contenedor y su naturaleza distribuida, no es trivial hacerlo, escalar bien y no matar a la infraestructura. –

+0

¿Es 100% seguro suponer que, en caso de comprobar solo el campo BlobProperties.LastModifiedUtc de un contenedor, nunca perderá un cambio? ¿No puede haber problemas, por ejemplo, si se usan varias máquinas para almacenar un contenedor enorme en blob, no puede haber un evento cuando habrá una "modificación en el pasado"? – hpityu

0

¿El análisis de almacenamiento azul contiene la información requerida? Todavía necesitarías algo para hacer la votación.

1

Suponiendo que tiene control sobre el código que actualiza/modifica el blob, puede usar SignalR para generar una notificación de inserción siempre que el blob cambie evitando así la necesidad de un sondeo repetido.

Cuestiones relacionadas