Blob storage directory

Questo post è parte di una serie su windows azure.

In un post precedente abbiamo definito in linea di massima le capabilities del windows azure blob storage. Anche da un overview sommaria la prima cosa che si nota è che, nel blob storage, non c’è alcun riferimento al concetto di “directory”: ogni file è un blob, ogni blob appartiene ad un container, ma non sembra sia possibile, definire una sorta di gerarchia che possa catalogare, in modo  molto simile a quanto siamo abituati a fare con il file system, i nostri file (blob).

Nonostante quanto detto sia assolutamente vero, è possibile simulare comunque il concetto di directory, in modo, direi, alquanto facile.

Il primo modo, il più diretto, è quello di utilizzare il nome del file per simulare l’appartenenza ad una gerarchia, come avviene nell’esempio seguente:


Un altro modo, più lineare, è quello di utilizzare le API messe a disposizione dall’SDK e descrivere il processo di upload in modo un po’ più più dettagliato, ma anche più leggibile, definendo esplicitamente le proprie intenzioni:


Analizzando quello che succede, attraverso il management portal, abbiamo la conferma di quanto asserito in precedenza: non c’è alcune traccia del concetto di directory. Infatti, all’interno del container, abbiamo una visualizzazione piatta dei file caricati, siano essi nella root o in qualche “directory virtuale”.

Il concetto di “virtual directory”, però, non è scomparso e interagendo con il container, tramite le API (ma anche con i servizi REST messi a disposizione dalla piattaforma) abbiamo la possibilità di navigare all’interno di questa gerarchia. Nell’esempio precedente, ciclando sui blob contenuti nella root del container, otteniamo il seguente risultato:



Ovvero, anche se non fisicamente, la directory è effettivamente presente. Cerchiamo ora di capire cosa avviene “dietro le quinte”, utilizzando fiddler. A fronte dell’operazione di listing dei blob del container o di una virtual folder, le API, internamente, eseguono una GET verso l’url che identifica il blob storage, utilizzando dei parametri “ad hoc” nella query string:


Nel nostro caso, le due chiamate differiscono per un semplice parametro: “prefix”. Come documentato, questo parametro permette di fare delle “sub-select” di tutti i blob che rispettano il pattern.

In questo, semplice, modo abbiamo la possibilità di simulare la gerarchia simile a quella del file system, anche sul windows azure blob storage.