Nel grosso ecosistema dei servizi di Microsoft Azure, lo storage è quello più importante e rappresenta le basi di molti altri servizi. In particolare, i blob ci permettono di memorizzare terabyte di file in maniera del tutto gestita, sicura e performante, il tutto attraverso operazioni REST.
Dal punto di vista delle prestazioni, caricare o leggere un file sapendone l'URI completo ci garantisce velocità, lasciando a noi quindi il compito di memorizzare in un database separato l'associazione del URI ad altre informazioni che permettano alle logiche applicative e all'utente di trovarlo facilmente. I blob, infatti, soffrono di scarse prestazioni nel momento in cui decidiamo di enumerare la lista dei file alla ricerca di uno con un determinato nome.
Per non dover affiancare un database, di recente è stata introdotta la possibilità di associare dei tag ai blob stessi. Si trattano di coppie chiave/valore che ci permettono di associare stringhe. Diversamente dai metadata, già disponibili, questi tag vengono immediatamente indicizzati, permettendoci di fare ricerche molto velocemente.
Per dare un primo sguardo a questa funzionalità possiamo usare direttamente il portale che, posizionandoci sulle proprietà di un file esistente o in fase di upload, ci permette di impostare questi tag.

Possiamo inserire fino ad un massimo di 10 chiavi, con una serie di vincoli su dimensioni e caratteri, compreso il fatto che le stringhe sono case sensitive. Possiamo impostare questi tag anche attraverso le API .NET.
var tags = new Dictionary<string, string> { { "project", "ASPItalia.com" }, { "type", "txt" }, }; await myBlob.SetTagsAsync(tags);
L'indicizzazione avviene immediatamente permettendoci poi di ricercare il file, da portale o tramite API.

Il corrispettivo con le API .NET è visibile nell'esempio seguente.
var query = "'project' = 'ASPItalia.com'"; await foreach (TaggedBlobItem taggedBlobItem in serviceClient.FindBlobsByTagsAsync(query)) { Console.WriteLine(taggedBlobItem.Uri); }
La ricerca non si limita al solo operatore di uguaglianza, ma anche quelli di comparazione oltre che a quello logico AND, consentendoci anche di fare ricerche parziali.
Un ultimo aspetto interessante è rappresentato dal fatto che possiamo usare gli indici anche nel lifecycle management per automatizzare processi come lo spostamento e la cancellazione di file. Per conoscere tutti gli aspetti e limiti, rimandiamo comunque alla documentazione ufficiale:
https://docs.microsoft.com/en-us/azure/storage/blobs/storage-manage-find-blobs
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare l'option pattern per gestire la configurazione in ASP.NET Core
Utilizzare .NET 6 con le Azure Function
Caricare automaticamente i dati delle relazioni in EF Core 6
Code reviewers as code in GitHub
Gestire gli errori in un servizio gRPC di ASP.NET Core
Avviare e arrestare programmaticamente un Hosted Service di ASP.NET Core
Continuous Deployment tramite GitOps
Come sono state modificate le checkbox nelle form di Bootstrap 5
Creare velocemente microservice grazie a minimal API di ASP.NET Core 6
Utilizzare SFTP con Azure Storage Blob
Utilizzare azurite come simulatore di Azure Storage
Leggere il valore di un header della richiesta in ASP.NET Core 6
I più letti di oggi
- Tracciare gli eventi tramite i DevTools di Chrome
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Accedere alla console di una Azure Container App
- devConf 2022 - Online
- Utilizzare i metodi Linq MinBy e MaxBy per semplificare le ricerche degli elementi minimi e massimi in liste di oggetti complessi con LINQ
- Track 1: @marcominerva ci parla di DateOnly e TimeOnly in #dotnetTrack 2: @raffaeler su come monitorare e prevenire problemi in produzione (parte 2)Track 3: live show (ultimo segmento live della giornata) Seguici live su #aspilive: https://aspit.co/devconf-22
- Track 1: @sm15455 con le novità di #angular 14Track 2: @CristianCivera su come sviluppare applicazioni #serverless con #azure #containerappsTrack 3: live show Seguici su #aspilive: https://aspit.co/devconf-22