Per depositare file in modo affidabile e scalabile, Azure Storage è lo strumento principale da usare sulla piattaforma cloud. Su di esso si basano moltissimi servizi Microsoft e rispetto ad un file system tradizionale offre molte più funzionalità: scaling, replica, lease, snapshot, encryption e accesso via REST.
Tra le funzionalità che possiamo sfruttare esiste anche il soft delete, cioè la facoltà di non cancellare definitivamente un blob, ma di marcarlo semplicemente come cancellato. Questo fa sì che nel periodo di retention configurato possiamo recuperare il file e renderlo nuovamente disponibile. Questa funzionalità è comoda in quelle situazioni in cui è possibile che accidentalmente qualcuno o qualcosa possa cancellare la risorsa. L'attivazione o la disattivazione sono possibili in qualsiasi momento direttamente API o dal portale.

Possiamo configurare la retention fino ad un massimo di 365 giorni, ma dobbiamo considerare che per delete non è considera la sola operazione di DELETE, ma anche qualsiasi POST o PUT. Ogni operazione di cambiamento sul file scatena la creazione di uno snapshot. Anche l'eventuale cancellazione di uno snapshot fa sì che questo non venga immediatamente rimosso, ma posticipato a fine retention.
I file cancellati non sono visibili normalmente e dobbiamo listarli in modo esplicito, attraverso la spunta del portale.

Tramite API, invece, disponiamo di un enum apposito e per recuperare un blob cancellato possiamo utilizzare il metodo Undelete.
// Recupero di tutti i blob cancellati foreach (CloudBlob blob in container.ListBlobs(useFlatBlobListing: true, blobListingDetails: BlobListingDetails.Deleted)) { blob.Undelete(); }
Da un punto di vista del pricing dobbiamo considerare che gli snapshot di blob sovrascritti o cancellati vanno comunque ad ampliare la dimensione dello spazio occupato. La creazione automatica di uno snapshot, invece, non viene conteggiata come transazione, ma vengono contate solo le operazioni che hanno generato lo snapshot.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Creare automaticamente una issue di GitHub
Gestire la query string nell'output cache di ASP.NET Core
Effettuare l'upload di un file via FTP con la libreria FluentFTP di .NET
Effettuare il download di un file via FTP con la libreria FluentFTP di .NET
Effettuare test di carico con Azure Load Testing
Specificare il numero di parentesi graffe nella string interpolation in combinazione con i string literal in C#
Innestare una query nel metodo Contains di Entity Framework Core
Linting di un Dockerfile con un workflow di GitHub
.NET Conference Italia 2022
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Utilizzare i nuovi piani dedicati di Azure Container Apps
Real world .NET Architecture
I più letti di oggi
- Rilasciata la versione 1.0 di ASP.NET MVC
- Abilitare HTTP/3 in ASP.NET Core 7.0
- Seconda preview per i Dynamic Data Control 4.0
- Ecco la roadmap di ASP.NET 5: il rilascio definitivo nel corso del primo trimestre 2016
- Rilasciato il Service Pack 3 di SQL Server 2005
- Rilasciata la versione 1.0 di ASP.NET Core
- Questionario sulla qualità di VS 2005
- Disponibile il SP1 di SQL Server 2008