Saltar al contenido

Obtener el recuento de blobs en un contenedor de Azure Storage

Posteriormente a observar en varios repositorios y foros de internet al terminar hallamos la solución que te mostramos ahora.

Solución:

Si solo desea saber cuántos blobs hay en un contenedor sin escribir código, puede usar la aplicación Microsoft Azure Storage Explorer.

  1. Abra el BlobContainer deseado
    ingrese la descripción de la imagen aquí
  2. Haga clic en el icono Estadísticas de la carpeta
    ingrese la descripción de la imagen aquí
  3. Observe el recuento de blobs en la ventana Actividades
    ingrese la descripción de la imagen aquí

Intenté contar blobs usando ListBlobs() y para un contenedor con alrededor de 400 000 elementos, me tomó más de 5 minutos.

Si tiene control total sobre el contenedor (es decir, controla cuándo se producen las escrituras), puede almacenar en caché la información de tamaño en los metadatos del contenedor y actualizarla cada vez que se elimina o se inserta un elemento. Aquí hay un fragmento de código que devolvería el recuento de blobs del contenedor:

static int CountBlobs(string storageAccount, string containerId)
 String.IsNullOrEmpty(countUpdateTime))
    
        recountNeeded = true;
    
    else
    
        DateTime dateTime = new DateTime(long.Parse(countUpdateTime));

        // Are we close to the last modified time?
        if (Math.Abs(dateTime.Subtract(cloudBlobContainer.Properties.LastModifiedUtc).TotalSeconds) > 5) 
            recountNeeded = true;
        
    

    int blobCount;
    if (recountNeeded)
    
        blobCount = 0;
        BlobRequestOptions options = new BlobRequestOptions();
        options.BlobListingDetails = BlobListingDetails.Metadata;

        foreach (IListBlobItem item in cloudBlobContainer.ListBlobs(options))
        
            blobCount++;
        

        cloudBlobContainer.Metadata.Set("ItemCount", blobCount.ToString());
        cloudBlobContainer.Metadata.Set("CountUpdateTime", DateTime.Now.Ticks.ToString());
        cloudBlobContainer.SetMetadata();
    
    else
    
        blobCount = int.Parse(count);
    

    return blobCount;

Esto, por supuesto, supone que actualiza ItemCount/CountUpdateTime cada vez que se modifica el contenedor. CountUpdateTime es una protección heurística (si el contenedor se modificó sin que alguien actualizara CountUpdateTime, esto forzará un recuento) pero no es confiable.

La API no contiene un método o propiedad de recuento de contenedores, por lo que debe hacer algo como lo que publicó. Sin embargo, deberá tratar con NextMarker si supera los 5000 artículos devueltos (o si especifica un número máximo para devolver y la lista supera ese número). Luego, realizará llamadas adicionales basadas en NextMarker y agregará los recuentos.

EDITAR: Por Smarx: el SDK debería encargarse de NextMarker por usted. Deberá tratar con NextMarker si está trabajando en el nivel de API, llamando a List Blobs a través de REST.

Como alternativa, si está controlando las inserciones o eliminaciones de blobs (a través de un servicio wcf, por ejemplo), puede usar el área de metadatos del contenedor de blobs para almacenar un recuento de contenedores en caché que calcula con cada inserción o eliminación. Solo tendrá que lidiar con la simultaneidad de escritura en el contenedor.

Si te sientes suscitado, eres capaz de dejar un ensayo acerca de qué le añadirías a esta noticia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *